2011-03-30 5 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. 

10 배 많이 간다

편집 :

생산

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); 
("K1을"QUEUENAME, exchangeName)

channel.queueBind;

답변

1

이 방법을 따를 수 // k1은 첫 번째 라우팅 키입니다.

channel.queueBind (queueName, exchangeName, "k2"); // k2는 두 번째 라우팅 키입니다