繁体   English   中英

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

[英]How to create a RabbitMQ consumer on a Ruby on Rails web app?

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

我需要执行此操作的方法(出于各种原因,我将不愿提及)是让Ruby层上的代码向队列发送一条消息(使用RabbitMQ,打包为JSON对象),并且该消息将从在Java层中按代码排队。

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

因此,这个请求/响应周期必须是异步的,我在Ruby层上的使用者代码还需要根据显示的消息知道向哪个客户端显示详细信息。

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

您可以使用兔子宝石: 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM