项目中有 c++ 程序需要写数据库等操作, 为了保证数据的一致性, c++ 程序更新完数据库后需要通知后台 rails web 程序更新数据显示, 使用消息总线 ActiveMQ 作为中间件.
使用 Rails 同 ActiveMQ 通讯
发送消息
gem install stomp
or
gem ‘stomp’ # rails 项目中使用
require 'stomp'
def send_mq(host, queue_name, message)
@stomp_client = Stomp::Client.new("", "", host, 61613)
@stomp_client.publish("/queue/#{queue_name}",message)
end
# 组装 JSON
data = {
"message_type":"update",
"id": 1,
"action": "update"
}.to_json
# 发送消息 传入总线所在 ip , 队列名, 消息内容
send_mq('192.168.1.1', 'request', data)
接收消息
添加 Gem
gem ‘activemessaging’, github: ‘ieme/activemessaging’ # for rails 5 gem ‘daemons’
生成配置文件
rails g active_messaging:install
rails g active_messaging:processor
添加监听队列
在 项目目录 app 下创建 自己 的processors
my_message_processor.rb
class MyMessageProcessor < ActiveMessaging::Processor
#监听 dete_push
subscribes_to :dete_push
def on_message(message)
logger.debug "MyMessageProcessor received: " + message
puts "----------->>>>>>>>>>>: #{message}"
# Reteryjob.create_record(message)
end
end
开启服务
script/poller run