ZBLOG

golang 同时监听多个rabbitmq队列

在 Golang 中,你可以使用 RabbitMQ 客户端库 AMQP 来同时监听多个队列。以下是一个简单的示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "github.com/streadway/amqp"
  6. )
  7. func main() {
  8. // 连接 RabbitMQ 服务器
  9. conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
  10. if err != nil {
  11. log.Fatalf("failed to connect to RabbitMQ: %v", err)
  12. }
  13. defer conn.Close()
  14. // 创建 channel
  15. ch, err := conn.Channel()
  16. if err != nil {
  17. log.Fatalf("failed to open a channel: %v", err)
  18. }
  19. defer ch.Close()
  20. // 创建队列并绑定 exchange
  21. q1, err := ch.QueueDeclare(
  22. "queue1",
  23. false,
  24. false,
  25. false,
  26. false,
  27. nil,
  28. )
  29. if err != nil {
  30. log.Fatalf("failed to declare queue1: %v", err)
  31. }
  32. q2, err := ch.QueueDeclare(
  33. "queue2",
  34. false,
  35. false,
  36. false,
  37. false,
  38. nil,
  39. )
  40. if err != nil {
  41. log.Fatalf("failed to declare queue2: %v", err)
  42. }
  43. // 绑定 exchange 和队列
  44. if err = ch.QueueBind(q1.Name, "", "exchange1", false, nil); err != nil {
  45. log.Fatalf("failed to bind queue1 to exchange1: %v", err)
  46. }
  47. if err = ch.QueueBind(q2.Name, "", "exchange2", false, nil); err != nil {
  48. log.Fatalf("failed to bind queue2 to exchange2: %v", err)
  49. }
  50. // 消费消息
  51. msgs1, err := ch.Consume(q1.Name, "", true, false, false, false, nil)
  52. if err != nil {
  53. log.Fatalf("failed to consume messages from queue1: %v", err)
  54. }
  55. msgs2, err := ch.Consume(q2.Name, "", true, false, false, false, nil)
  56. if err != nil {
  57. log.Fatalf("failed to consume messages from queue2: %v", err)
  58. }
  59. // 在两个 channel 上循环读取消息
  60. for {
  61. select {
  62. case msg := <-msgs1:
  63. fmt.Printf("received message from queue1: %s\n", string(msg.Body))
  64. case msg := <-msgs2:
  65. fmt.Printf("received message from queue2: %s\n", string(msg.Body))
  66. }
  67. }
  68. }

在这个示例中,我们首先连接到 RabbitMQ 服务器并创建一个 channel。然后,我们使用 QueueDeclare 创建两个队列,并使用 QueueBind 将它们绑定到相应的 exchange 上。

接下来,我们使用 Consume 方法分别从两个队列中消费消息。在一个无限循环中,我们通过对两个 channel 的监听来同时处理来自不同队列的消息。

当有消息到达时,将会通过 select 语句选择合适的 channel 并打印出消息内容。

注意:以上代码只是简单的示例,实际应用需要更加健壮和完善的错误处理和逻辑控制。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5538

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?