Golang Rabbit MQ Fanout Exchange 多个消费者

标签 go rabbitmq

我在 Java 应用程序的扇出交换中发布消息。我能够在 Java 中的多个消费者中接收消息。我在 golang 应用程序中有 2 个消费者,但只有一个消费者(或者)正在接收消息(不是他们两个都接收已发布的消息)。

func HandleMessageFanout1(){

    conn := system.EltropyAppContext.RabbitMQConn

    channel, err := conn.Channel()

    if(err!=nil){
        log.Println(err)
    }
    //forever := make(chan bool)



    deliveries,err := channel.Consume(
        "example.queue", //queue
        "qw",
        true,
        false,
        false,
        false,
        nil)

    if(err!=nil){
        log.Println(err)
    }

    go func() {

        for d := range deliveries {
            log.Printf("Message recived in fanout 1")
            log.Printf("Received a message: %s", d.Body)
        }
    }()

    //<-forever

}

//第二个消费者

package consumer

import (
    "github.com/eltropy/shehnai/backend/golang/common-packages/system"
    log "github.com/Sirupsen/logrus"
)

    func HandleMessageFanout2() {

        conn := system.EltropyAppContext.RabbitMQConn

        channel, err := conn.Channel()

        if (err!=nil) {
            log.Println(err)
        }

        //forever := make(chan bool)

        deliveries, err := channel.Consume(
            "example.queue", //queue
            "q2",
            true,
            false,
            false,
            false,
            nil)

        if (err!=nil) {
            log.Println(err)
        }

        go func() {
            for d := range deliveries {
                log.Printf("Message recived in fanout 2")
                log.Printf("Received a message: %s", d.Body)
            }
        }()

        //<-forever

    }

我正在使用 https://github.com/streadway/amqp兔子 mq 库。

最佳答案

在 channel 类型上,在你发布之前,像这样声明一个交换:

err = channel.ExchangeDeclare(
  "example.queue",   // name
  "fanout", // type
  true,     // durable
  false,    // auto-deleted
  false,    // internal
  false,    // no-wait
  nil,      // arguments
)

参见 official RabbitMQ tutorial .

关于Golang Rabbit MQ Fanout Exchange 多个消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38186283/

相关文章:

io - 使用 Scanf + input + enter 从 stdin 获得双重输入,如何刷新?

go - 如何处理 Response JSON 有没有键的自定义字段?

GDB - 附加和中断正在运行的 Go 应用程序

python - celery 节拍 : Limit to single task instance at a time

c# - RabbitMQ 事务在队列关闭时无一异常(exception)地提交

go - 即使配置了 GOPTH,也无法下载 fabric-sdk-go

node.js - Go 有一个 "infinite call stack"等价物吗?

go - 在单独的方法中使用golang的defer

spring - STOMP over websockets 与普通 STOMP。哪一个更好?

javascript - 如何在没有nodejs的情况下使用javascript连接到rabbitmq