gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:33:59 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

关于java - 如何在 Ruby on Rails Web 应用程序上创建 RabbitMQ 使用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31882572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com