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