Browse Source

Shutdown consumer gracefully

pull/51/head
Mike Tonks 4 years ago
parent
commit
4d2760040d
1 changed files with 28 additions and 3 deletions
  1. +28
    -3
      examples/consumer/main.go

+ 28
- 3
examples/consumer/main.go View File

@ -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()
}

Loading…
Cancel
Save