diff --git a/examples/consumer/main.go b/examples/consumer/main.go index 8d503b2..ece3f31 100644 --- a/examples/consumer/main.go +++ b/examples/consumer/main.go @@ -1,12 +1,18 @@ package main import ( + "fmt" "log" + "os" + "os/signal" + "syscall" amqp "github.com/rabbitmq/amqp091-go" rabbitmq "github.com/wagslane/go-rabbitmq" ) +var consumerName = "example" + func main() { consumer, err := rabbitmq.NewConsumer( "amqp://guest:guest@localhost", amqp.Config{}, @@ -28,12 +34,31 @@ func main() { rabbitmq.WithConsumeOptionsBindingExchangeName("events"), rabbitmq.WithConsumeOptionsBindingExchangeKind("topic"), rabbitmq.WithConsumeOptionsBindingExchangeDurable, + rabbitmq.WithConsumeOptionsConsumerName(consumerName), ) if err != nil { log.Fatal(err) } - // block main thread so consumers run forever - forever := make(chan struct{}) - <-forever + // block main thread - wait for shutdown signal + sigs := make(chan os.Signal, 1) + done := make(chan bool, 1) + + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + + go func() { + sig := <-sigs + fmt.Println() + fmt.Println(sig) + done <- true + }() + + fmt.Println("awaiting signal") + <-done + fmt.Println("stopping consumer") + + // wait for server to acknowledge the cancel + noWait := false + consumer.StopConsuming(consumerName, noWait) + consumer.Disconnect() }