Ruby AMQP:并行处理队列
发布时间:2020-12-17 07:10:18 所属栏目:百科 来源:网络整理
导读:由于我的大部分任务都依赖于网络,因此我希望并行处理队列,而不是一次只处理一条消息. 所以,我使用以下代码: #!/usr/bin/env ruby# encoding: utf-8require "rubygems"require 'amqp'EventMachine.run do connection = AMQP.connect(:host = '127.0.0.1') ch
由于我的大部分任务都依赖于网络,因此我希望并行处理队列,而不是一次只处理一条消息.
所以,我使用以下代码: #!/usr/bin/env ruby # encoding: utf-8 require "rubygems" require 'amqp' EventMachine.run do connection = AMQP.connect(:host => '127.0.0.1') channel = AMQP::Channel.new(connection) channel.prefetch 5 queue = channel.queue("pending_checks",:durable => true) exchange = channel.direct('',:durable => true) queue.subscribe(:ack => true) do |metadata,payload| time = rand(3..9) puts 'waiting ' + time.to_s + ' for message ' + payload sleep(time) puts 'done with '+ payoad metadata.ack end end 为什么不使用我的预取设置?我想它应该得到5条消息并且并行处理它们,不是吗? 解决方法
预取是在您确认之前可能提前发送给您的最大消息数.
换句话说,预取大小不限制单个消息到客户端的传输,只有在客户端仍有一个或多个未确认消息时才发送更多消息. (来自AMPQ文档) QoS Prefetching Messages RabbitMQ AMQP Reference EventMachine是单线程和基于事件的.对于不同线程或进程上的并行作业,请参阅EM :: Deferrable,然后是Thread或spawn. 另请参阅Rabbit Bunnies,这是RabbitMQ Java客户端上的快速DSL: https://github.com/ruby-amqp/hot_bunnies (感谢Michael Klishin在Google网上论坛上提供的信息,以及stoyan on blogger) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |