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

UI设计界面 UI设计界面 主题:1059 回复:2190

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

归属感 发布于 2017-01-24 字数 1365 浏览 1288 回复 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

发布评论

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

支持 Markdown 语法,需要帮助?

评论(1

虐人心 2017-02-27 1 楼

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

不知道是否正确理解。