Ruby amqp 라이브러리의 v0.7.1과 Ruby 1.8.7을 사용하여 RabbitMQ 서버에 짧은 (~ 40 바이트) 메시지를 대량으로 게시하려고합니다. 내 프로그램의 메인 루프는 (물론, 정말 루프,하지만 여전히) 다음과 같습니다많은 수의 메시지를 AMQP 대기열에 게시
AMQP.start(:host => '1.2.3.4',
:username => 'foo',
:password => 'bar') do |connection|
channel = AMQP::Channel.new(connection)
exchange = channel.topic("foobar", {:durable => true})
i = 0
EM.add_periodic_timer(1) do
print "\rPublished #{i} commits"
end
results = get_results # <- Returns an array
processor = proc do
if x = results.shift then
exchange.publish(x, :persistent => true,
:routing_key => "test.#{i}")
i += 1
EM.next_tick processor
end
end
EM.next_tick(processor)
AMQP.stop {EM.stop} end
코드는 결과 배열이 잘 처리하기 시작하지만, 잠시 후 (보통, 12K 메시지 정도 후)을 다음 오류로 사망합니다.
/Library/Ruby/Gems/1.8/gems/amqp-0.7.1/lib/amqp/channel.rb:807:in `send':
The channel 1 was closed, you can't use it anymore! (AMQP::ChannelClosedError)
메시지가 큐에 저장되어 있지 않습니다. 이 오류는 프로그램에서 대기열 서버로의 네트워크 활동이 시작될 때 발생하는 것 같습니다.
내가 뭘 잘못하고 있니?
RabbitMQ 로그 란 무엇입니까? 브로커가 아직 실행 중입니까? 'lsof -i : 5672'는 무엇을 반환합니까? –
특별한 것은 없지만 스크립트가 시작될 때 연결이 열리고 닫히는 것으로 나타납니다. RabbitMQ는 코드가 실패한 후에도 다른 대기열과 클라이언트에 계속 정상적으로 작동합니다. 이것이 RabbitMQ의 문제라고 생각하지 않습니다. –