如何从RabbitMQ获取旧消息?

时间:2015-11-05 14:02:45

标签: rabbitmq rabbitmq-exchange bunny

我使用Bunny(Ruby)发布RabbitMQ消息,如下所示:

x.publish("Message !"+n.to_s, :routing_key => 'mychannel')

并订阅如下:

    ch   = conn.create_channel
x    = ch.topic('fling',durable: true)
q    = ch.queue("")
q.bind(x, :routing_key => 'mychannel')


puts "Waiting for messages."
q.subscribe( :block => true) do |delivery_info, properties, body|
puts " [x] Received #{body}, message properties are #{properties.inspect}"

一旦启动订阅者,它会立即收到任何已发送的消息。但是,如果我在没有启动订阅者的情况下发送消息,则在启动订阅者时不会收到消息(发送者是否仍在推送消息)。

当没有订阅者正在收听时,是否可以返回队列并接收过去发送的消息?

1 个答案:

答案 0 :(得分:1)

每次启动消费者时,您都会创建一个新队列!因此,当您重新启动使用者时,新队列会收到新消息,但不会有以前的消息。

这样做:

q    = ch.queue("myqueue",durable: true)

而不是:

q    = ch.queue("")

然后,只要重新启动使用者,它就会立即尽快获得所有备份消息。