gpt4 book ai didi

ruby - 使用 bunny gem,我如何阻止直到收到消息或超时到期

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:46 24 4
gpt4 key购买 nike

我正在使用 bunny ruby gem向 rabbitmq 服务器发送和接收消息。如何同步从队列中弹出一条消息,同时对我等待的时间设置超时(即,如果 3 秒后没有消息到达,则停止阻塞)?

一个明显的解决方案是循环调用 pop 直到超时到期或收到消息,但这似乎效率很低。有更优雅的解决方案吗?我查看了 bunny 的文档以及 rabbitmq 站点上的教程,但我没有找到针对这个特定场景的解决方案。

最佳答案

为了实现这样的功能,我们不得不重写订阅的基本方法。我发现我们可以为 channel 设置超时时间,但是函数中没有这样的输入参数。

response = nil

subscribe(block: true, timeout: 10) do |delivery_info, properties, payload|
Rails.logger.info "got message #{payload}"
response = payload
@channel.consumers[delivery_info.consumer_tag].cancel
end



def subscribe(opts = {block: false}, &block)
ctag = opts.fetch(:consumer_tag, @channel.generate_consumer_tag)
consumer = Bunny::Consumer.new(@channel,@response_queue,ctag)

consumer.on_delivery(&block)
@channel.basic_consume_with(consumer)

if opts[:block]
@channel.work_pool.join(opts[:timeout])
end
end

关于ruby - 使用 bunny gem,我如何阻止直到收到消息或超时到期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com