2010-07-22 2 views
3

Ruby 스크립트 (Bunny 사용)에서 RabbitMQ에 메시지를 게시하고 node.js 서버 (node-amqp 사용)에서 메시지를 사용하려고합니다.RabbitMQ/AMQP 처리되지 않은 채널 오류 - NOT_FOUND

첫 번째 메시지가 성공적으로 도착,하지만 오류가 Node.js를 내부에 기록되고 연결이 닫히고 더 이상 메시지가 수신되지 :

mu:charlie-node tom$ node charlie.js 
22 Jul 09:11:04 - Running in development environment. 
22 Jul 09:11:04 - Connected to AMQP. 
22 Jul 09:11:04 - {"build_id":1234} 
Unhandled channel error: NOT_FOUND - unknown delivery tag 1 

내가 교환에 두 개의 메시지를 게시하는 경우와 그런 다음 node.js 서버를 실행하십시오. 오류가 기록되기 전에 두 메시지가 모두 표시되는 것을 볼 수 있습니다. 이는 RabbitMQ가 비어있을 때 RabbitMQ가 교환 또는 대기열을 닫고 있음을 나타냅니다. 그러나 autoDelete를 false로 설정 했으므로 두 가지 모두에서 false로 설정해야합니다.

제안 사항?

내 Node.js를 스크립트는 다음과 같이 보입니다 :

var amqpConnection = amqp.createConnection({ host: config.rabbitmq.host }); 

amqpConnection.addListener('ready', function() { 
    sys.log("Connected to AMQP."); 

    var exchange = amqpConnection.exchange('job_exchange', { 
    type : 'topic', 
    passive : false, 
    durable : true, 
    autoDelete : false 
    }) 

    exchange.addListener('open', function() { 

    var queue = amqpConnection.queue('arthr_queue', { 
     passive : false, 
     autoDelete : false, 
     durable : true, 
     exclusive : false 
    }); 

    queue.bind(exchange, '#'); 

    queue.subscribe(function(message) { 
     sys.log(message.data.toString()); 
    }); 
    }); 
}); 

을 그리고처럼 내 루비 스크립트 보이는 :이 노드 AMQP의 버그라고 생각

require 'rubygems' 
require 'bunny' 
require 'json' 

b = Bunny.new(:logging => true) 

b.start 

job_exchange = b.exchange('job_exchange', 
    :type => :topic, 
    :durable => true, 
    :auto_delete => false, 
    :passive => false 
) 

message = { 
    :build_id => 1234 
} 

job_exchange.publish(message.to_json, :key => 'arthr.rebuild') 

b.stop 

답변

1

. options.ack이 false로 설정되면 코드는 기본적으로 ack를 보냅니다.

amqp 0.8 사양은 noAck을 사용할 때 서버가 클라이언트 대신이를 수행한다고 말합니다.

RabbitMQ 1.8.1의 버그를 목격했습니다. 아마 그들은 더 엄격 해졌을거야.

내 지사 (http://github.com/spahl/node-amqp)에서 수정되었으며 모든 테스트가 통과합니다. 또한 기본 'amq.topic'교환을 비 내구성으로 재 선언하려고한다는 사실을 수정했습니다.

+0

완벽한 - 그것이 나를 위해 그것을 해결합니다. 감사! – tomtaylor

관련 문제