"Bunny"보석을 사용하여 때때로 RabbitMQ 대기열에 메시지를 게시하는 Rails 앱이 있습니다. 그때 호출 할 수 있습니다 어디서나 응용 프로그램에서지연된 작업에서 Bunny :: Exchange 게시를 호출 할 수 있습니까?
# config/initializers/bunny.rb
$mq_connection = Bunny.new
$mq_connection.start
$mq_channel = $mq_connection.create_channel
:
exchange = $mq_channel.default_exchange
exchange.publish(msg.to_json, persistent: true, routing_key: '...')
이 내가 응용 프로그램에서 호출하면 좋은 작품, 또는 콘솔에서, 하지만 일을 doesen't 여기에 설정입니다 DelayedJob 직장에서 전화하면입니다. 예외는 발생하지 않지만 메시지는 전송되지 않습니다. 싱글과 노력
:
그것은 $mq_channel
같은 전역 변수처럼 보였다는 DelayedJob에 의해 발견, 그래서 그것을 저장하는 싱글 모델을 만들 수 없습니다 :
class RabbitMq
include Singleton
attr_accessor :connection, :channel
def exchange
channel.default_exchange
end
def setup
self.connection = Bunny.new
self.connection.start
self.channel = connection.create_channel
end
end
을 내가 설정을 호출 내 이니셜 라이저 :
# config/initializers/bunny.rb
RabbitMq.instance.setup
하지만 제대로 작동하지 않습니다. 작업은 오류없이 종료되지만 아무것도 게시되지 않습니다.
어떻게 할 수 있습니까? DJ와 같은 배경 작업자로부터 RabbitMQ에 메시지를 게시하는 것은 아주 일반적입니다. 여기
메시지를 게시해야 할 때마다 새로운 연결을 만들면 실제로 작동합니다. 감사! – jibai31