2011-03-30 596 views
2

我需要一個參考請多個路由鍵綁定隊列。
你看,我創建了一個隊列,並與Rabbitmq - 多個綁定(路由鍵)到單個隊列

channel.queuebind() 

和另一個時間再次

channel.queuebind() 

綁定一次,直到我上了同一個隊列這兩個綁定。
但發佈後 - 只有第一個有界的消息被成功傳輸。
(我甚至取代了訂單,仍然 - 只有第一個,所以我的發佈是好的)

我沒有做的 - 是定義一個新的訂戶channel.basicConsumer。
我應該這樣做嗎?我想讓老款手機獲得更多信息。我做錯了什麼?

這裏是我的隊列列表是
你可以看到amq.gen-4ae4QUbSNevC/RgM + 8C9CA ==綁定了兩個鍵。

但消息只能進入第一個關鍵

Listing queues ... 
amq.gen-4ae4QUbSNevC/RgM+8C9CA==  0 
amq.gen-sgZK0bSc0W3QEXda8m1vIQ==  0 
PositionsQueue 1 
...done. 

rabbitmqctl.bat list_bindings 

Listing bindings ... 
    exchange  PositionsQueue queue PositionsQueue [] 
    exchange  amq.gen-4ae4QUbSNevC/RgM+8C9CA==  queue amq.gen-4ae4QUbSNevC/RgM+8C9CA== 
    exchange  amq.gen-sgZK0bSc0W3QEXda8m1vIQ==  queue amq.gen- sgZK0bSc0W3QEXda8m1vIQ== 
    Positions_Exchange  exchange  amq.gen-4ae4QUbSNevC/RgM+8C9CA==  queue Account:Account1 
    Positions_Exchange  exchange  amq.gen-4ae4QUbSNevC/RgM+8C9CA==  queue Portfolio:Portfolio1 
...done. 

10X很多

編輯:

生產

channel.basicPublish(exchangeName, routingKey, MessageProperties.MINIMAL_BASIC, messageBodyBytes); 

消費者

channel.exchangeDeclare(exchangeName, "direct", durable); 
QueueName = channel.queueDeclare(queueName, durable, exclusive, autoDelete, arguments).getQueue(); 
channel.queueBind(queueName, exchangeName, routingKey); 

boolean noAck = false; 
queueingConsumer = new QueueingConsumer(channel); 
channel.basicConsume(queueName, noAck, queueingConsumer); 

回答

1

你可以按照這種方式:

channel.queueBind(queueName,exchangeName,「k1」); // k1是第一個路由密鑰

channel.queueBind(queueName,exchangeName,「k2」); // k2是第二個路由鍵

相關問題