当前位置: 代码迷 >> java >> 如何在Ruby on Rails Web应用程序上创建RabbitMQ使用者?
  详细解决方案

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

热度:103   发布时间:2023-07-25 19:52:50.0

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

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

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

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

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

您可以使用兔子宝石: :

这是一个小例子:

#!/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