首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bunny中暂停和恢复消费者

如何在bunny中暂停和恢复消费者
EN

Stack Overflow用户
提问于 2016-03-04 16:27:35
回答 1查看 145关注 0票数 0

有没有什么办法可以让消费者临时暂停,稍后再恢复?

下面是我想要做的一个例子:

代码语言:javascript
复制
require "bunny"
conn = Bunny.new
conn.start

ch1 = conn.create_channel
publisher = ch.direct('test', :auto_delete => false)

consumer1 = nil
Thread.new do
    ch2 = conn.create_channel(nil, 8) #Using eight worker
    queue1 = ch2.queue('', :exclusive => true)
    queue1.bind(publisher, :routing_key => 'low_priority')
    consumer1 = queue1.subscribe(:block => true) do |delivery_info, properties, payload|
       #do some work
    end
end

Thread.new do
    ch3 = conn.create_channel
    queue2 = ch3.queue('', :exclusive => true)
    queue2.bind(publisher, :routing_key => 'high_priority')
    consumer2 = queue2.subscribe(:block => true) do |delivery_info, properties, payload|
        consumer1.pause   #pause the other consumer
        #do other things
        consumer1.resume  #resume the consumer
    end
end
#rest of the code

当我在consumer2工作时,我想暂停consumer1。有什么有效的方法可以做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2016-04-25 05:33:18

如果你想创建优先级策略,bunny已经实现了:

http://rubybunny.info/articles/queues.html#consumer_priorities

代码语言:javascript
复制
q = ch.queue("a.queue")
q.subscribe(:manual_ack => true, :arguments => {"x-priority" => 5}) do |delivery_info, properties, payload|
  # ...
end
q.subscribe(:manual_ack => true, :arguments => {"x-priority" => 2}) do |delivery_info, properties, payload|
  # ...
end

如果你想并行处理它,我推荐这个gem:

https://github.com/grosser/parallel

示例:

代码语言:javascript
复制
results = Parallel.map(['a','b','c'], in_processes: 3) { |one_letter| ... }

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35791258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档