2016-07-04 18 views
0

Javaアプリケーションからファンアウト交換でメッセージを発行しています。私はJavaで複数のコンシューマーでメッセージを受け取ることができます。私はgolangアプリに2人の消費者を持っていますが、消費者の1人だけがメッセージを受信して​​います(公表されたメッセージの両方ではありません)。Golang Rabbit MQファンアウトExchange複数のコンシューマ

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 

    } 

私はウサギのMQのhttps://github.com/streadway/amqpライブラリを使用しています。チャネルタイプに

答えて

0

、あなたが発行する前に、このような交流を宣言:

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

official RabbitMQ tutorialを参照してください。

関連する問題