Ruby on Rails-Rails RabbitMQ 如何同时处理多个queue问题

发布于 2017-01-24 06:44:39 字数 1155 浏览 1416 评论 1

场景

我有Rails项目A和B, A和B之间通过RabbitMQ通信:
A里采集数据任务,采集完数据并审核后,将发送给B;
B收到采集数据后,发送一个‘确认收到’信息给A;
A里还可能会修改某些数据,如修改分类信息,修改后将此信息发送给B;
B收到分类信息后,发磅一个‘确认收到分类信息’信息给A。

采集数据是比较耗时的。
分类信息的数据是相对要及时的。

这样,我建了两个Queue,一个专门处理采集耗时的任务,一个处理分类信息的
consumer端的代码类似(script/consumber.rb):

#!/usr/bin/env ruby
# encoding: utf-8

require "rubygems"
require "amqp"

EventMachine.run do
AMQP.connect do |connection|
channel = AMQP::Channel.new(connection)
exchange = channel.topic("weathr", :durable => true)

channel.queue("colloect_job").bind(exchange, :routing_key => "colloect_job.#").subscribe do |headers, payload|
# puts "#{payload}, routing key is #{headers.routing_key}"
# A里耗时采集的任务
end

channel.queue("update").bind(exchange, :routing_key => "update.#").subscribe do |headers, payload|
# puts "#{payload}, routing key is #{headers.routing_key}"
# 接收B返回的’*确认收到分类信息*‘的任务
end

end
end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

虐人心 2017-02-27 03:12:23

目前我们php多系统之间通信也是使用RabbitMQ的。
可以试图改变你的consmuer代码结构:
1.把采集耗任务和接受确认分开俩个队列执行
2.数据审核完后修改的数据另起一个队列保存起来
3.确认信息入的队列另起一个脚本执行,这样就不会因为采集耗时而不执行了。

不知道是否正确理解。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文