如何在Ruby on Rails Web应用程序上创建RabbitMQ使用者?

所以我正在构建一个使用Ruby on Rails前端和Java后端的Web应用程序。 所以基本上当用户登录网站时,我想要一个列表,列出该用户在屏幕上显示的所有交易数据历史记录。

我需要这样做的方式(出于各种原因,我不会进入)是让Ruby层上的代码发送一条消息(使用RabbitMQ,打包为JSON对象)到队列,这条消息将从在Java层中按代码排队。

然后,Java层需要将其响应(事务数据历史记录,打包为JSON对象)发送到另一个队列,我的Ruby层中的代码将使用该队列,然后在浏览器上显示它。

因此,这个请求/响应周期需要异步我的Ruby层上的消费者代码也需要知道要显示详细信息的客户端,具体取决于它所采用的消息。

这可以在轨道上完成吗? 谢谢。

你可以使用bunny gem: https : //github.com/ruby-amqp/bunny

这是一个小例子:

#!/usr/bin/env ruby # encoding: utf-8 require "bunny" def get_timestamp "#{Time.now.strftime('%H:%M:%S')}" end conn = Bunny.new conn.start queue_name = ENV['RABBITMQ_QUEUE'] || 'default_queue' args = {} args['x-message-ttl'] = 5000 ch = conn.create_channel q = ch.queue( queue_name, :arguments => args, :auto_delete => false, :exclusive => false, :durable => true ) puts " [*] Waiting for messages in #{q.name}. To exit press CTRL+C" begin q.subscribe(:block => true, :manual_ack => true) do |delivery_info, properties, body| puts "[#{get_timestamp}] [ruby client] Received #{body}" # Acknowledge that the message has been # processed. This prevents: # - flooding the client with messages # - losing messages if the client dies ch.ack(delivery_info.delivery_tag) end rescue ensure conn.close end