Skip to content

Instantly share code, notes, and snippets.

@ramya-rao-a
Last active April 29, 2019 21:14
Show Gist options
  • Save ramya-rao-a/a87ead13eb3aa7fbd91623f82c055a1f to your computer and use it in GitHub Desktop.
Save ramya-rao-a/a87ead13eb3aa7fbd91623f82c055a1f to your computer and use it in GitHub Desktop.
package main
import (
"context"
"fmt"
"time"
servicebus "github.com/Azure/azure-service-bus-go"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 40*time.Second)
defer cancel()
connStr := ""
queueName := ""
// Create a client to communicate with a Service Bus Namespace.
ns, err := servicebus.NewNamespace(servicebus.NamespaceWithConnectionString(connStr))
if err != nil {
fmt.Println(err)
return
}
// Create a QueueClient in PeekLock mode
q, err := ns.NewQueue(queueName)
if err != nil {
fmt.Println(err)
return
}
sessionID := "my-session"
qs := q.NewSession(&sessionID)
// Send a message
fmt.Println("Sending: hello")
if err := qs.Send(ctx, servicebus.NewMessageFromString("hello")); err != nil {
fmt.Println(err)
return
}
// Receive and defer the message
var sequenceNumber int64
err = qs.ReceiveOne(ctx, servicebus.NewSessionHandler(
servicebus.HandlerFunc(func(ctx context.Context, msg *servicebus.Message) error {
fmt.Println("Deferring: ", string(msg.Data))
sequenceNumber = *msg.SystemProperties.SequenceNumber
return msg.Defer(ctx)
}),
func(ms *servicebus.MessageSession) error {
return nil
},
func() {}))
if err != nil {
fmt.Println(err)
return
}
// Receive the deferred message
err = q.ReceiveDeferred(ctx, servicebus.HandlerFunc(func(ctx context.Context, msg *servicebus.Message) error {
fmt.Println("Receiving deferred: ", string(msg.Data))
return msg.Complete(ctx)
}), sequenceNumber)
if err != nil {
fmt.Println(err)
return
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment