【问题标题】:How do I get old messages from RabbitMQ?如何从 RabbitMQ 获取旧消息?
【发布时间】:2016-02-06 09:45:05
【问题描述】:

我正在使用 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}"

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

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

【问题讨论】:

    标签: rabbitmq rabbitmq-exchange bunny


    【解决方案1】:

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

    这样做:

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

    而不是这个:

    q    = ch.queue("")
    

    然后,只要您重新启动消费者,它就会立即以最快的速度获取所有备份的消息。

    【讨论】:

    • RabbitMQ 备份消息需要多长时间?
    • 我不明白您所说的“备份”是什么意思。
    • 你当时使用的“备份消息”是什么意思?
    • 备份消息是指延迟的消息。您是在问“RabbitMQ 将消息延迟多长时间?”它会延迟它们,直到您收集它们!一根绳子有多长...
    【解决方案2】:

    队列必须是称为持久的参数,它永远不会丢失

    ch.queue(queue, {
           durable: true
         });
    instead 
    q    = ch.queue("")

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多