2016-07-04 110 views
0

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

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。

回答

0

信道类型,在发布之前就宣布这样一个交换:

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

official RabbitMQ tutorial