簡體   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