我想将消息发布到直接交换,所以我有以下功能:
def publish_message_to_direct(server_params, exchange, payload)
AMQP.start(server_params) do |connection|
channel = AMQP::Channel.new(connection)
exchange = channel.direct(exchange,:durable=>true)
exchange.publish(payload)
puts payload
connection.close do
EM.stop { exit }
end
end
end
调用该函数后,它会将有效负载打印到终端,但不会将消息发布到交换机。但是,如果我添加这样的SIGTRAP,那么它会发布消息:
.
.
.
Signal.trap("INT") do
connection.close do
EM.stop { exit }
end
end
如何让EM停止而不必发送此信号? IOW,我只是希望它发布消息并返回。
答案 0 :(得分:0)
好吧,我刚刚阅读了文档并找到了publishing one-off messages上的部分:
所以现在的代码如下:
def publish_message_to_direct(server_params, exchange, payload)
AMQP.start(server_params) do |connection|
channel = AMQP::Channel.new(connection)
exchange = channel.direct(exchange,:durable=>true)
exchange.publish(payload, :nowait => false) do
puts payload
connection.close do
EM.stop
end
end
end
end
显然,不同之处在于在传递给发布函数的块中添加了关闭事件并使用选项:nowait => false
。希望这能帮助其他人解决同样的问题。