Golang Rabbit MQ Fanout交换多个消费者

时间:2016-07-04 13:46:01

标签: 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。

1 个答案:

答案 0 :(得分:0)

在频道类型上,在发布之前,声明如下的交换:

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

请参阅official RabbitMQ tutorial