2015-11-05 120 views
0

我發佈使用兔子(紅寶石)的RabbitMQ消息是這樣的:如何從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

您每次啓動消費者時都會創建一個新隊列!因此,當您重新啓動使用者時,新隊列會收到新消息,但沒有先前的消息。

這樣做:

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

,而不是這樣的:

q = ch.queue("") 

然後,當你重新啓動消費,儘快,它會立即得到所有備份信息以最快的速度就可以了。

+0

RabbitMQ有多長時間來備份郵件? – syko

+0

我不明白「備份」是什麼意思。 – Louise

+0

那麼您使用的「備份消息」的含義是什麼? – syko

相關問題