2011-03-30 598 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是第二个路由键

相关问题