2014-01-24 1 views
0

node-amqp lib와 함께 RabbitMQ를 사용하고 있습니다. 필수 플래그가 설정된 메시지를 게시하고 대기열에 대한 경로가없는 경우 RabbitMQ는 사양과 마찬가지로 basic.return으로 응답합니다.basic.return 응답에서 라우팅되지 않은 amqp 메시지를 확인하는 방법은 무엇입니까?

내 문제는, 내가 알 수있는 한, basic.return은 비동기식이며 어떤 메시지가 어떤 대기열을 찾지 못했는지에 대한 정보를 포함하지 않습니다. 교환이 확인 모드에 있더라도). 도대체 내가 어떤 메시지가 돌려 보내 졌는지 말해야 겠어?

+0

그것은 것,이 라우팅 키를 사용하여 모든 메시지가 전달되지 않은 것으로 간주 할 수 있다고 가정 언어 및 도서관과 같은 더 많은 정보를 제공하면 도움이됩니다. – pinepain

답변

1

노드 AMQP 방출한다 'basic-return' 이벤트를 AMQP에서 basic.return 수신에. 어떤 사용의 한가지가 동일한 라우팅 키가 모든 메시지는 같은 방식으로 전달되기 때문에 라우팅 키.. 내가 특정 라우팅 키에 대해 basic.return을 일단

function deliver(routing_key, message, exchange, resolve, reject){ 
    var failed_delivery = function(ret){ 
     if(ret.routingKey == routing_key){ 
      exchange.removeListener('basic-return', failed_delivery); 
      reject(new Error('failed to deliver')); 
     } 
    }; 
    exchange.on('basic-return', failed_delivery); 
    exchange.publish( 
     routing_key, 
     message, 
     { deliveryMode: 1, //non-persistent 
      mandatory: true 
     }, function(error_occurred, error){ 
      exchange.removeListener('basic-return', failed_delivery); 
      if(error_occurred){ 
       reject(error); 
      } else { 
       resolve(); 
      } 
    }); 
} 
0

이전에 문제없이 기본 수익을 사용했기 때문에 AMQP 사양을 읽었지만 .NET 클라이언트도 사용하고 있습니다. node-amqp에 관한 문서를 살펴 봤는데 Basic.Return을 구현 한 것을 볼 수 없다.

어떤 경우에도 서버는 게시 할 수 없을 때 전체 메시지로 응답합니다. 당신은 amqplibChannel#on('return', function(msg) {...})로 표시이 기능()을 가지고있다 (예를 들어, 다른 Node.js를 라이브러리로 전환 고려할 수 있습니다.

관련 문제