Ruby on rails 我可以把这个rabbitmq消费代码放在哪里?
我有一个rabbitmq使用者使用的代码,它应该侦听发布到rabbitmq队列的消息,并在消息被消费时在视图上显示一个flash通知。使用者在与生产者不同的会话中运行,尽管它们在同一个应用程序中。应用程序使用直接交换,该交换使用消息接收者的电子邮件作为路由密钥。我希望当发布一条带有类似于当前用户电子邮件的Ruby on rails 我可以把这个rabbitmq消费代码放在哪里?,ruby-on-rails,rabbitmq,bunny,Ruby On Rails,Rabbitmq,Bunny,我有一个rabbitmq使用者使用的代码,它应该侦听发布到rabbitmq队列的消息,并在消息被消费时在视图上显示一个flash通知。使用者在与生产者不同的会话中运行,尽管它们在同一个应用程序中。应用程序使用直接交换,该交换使用消息接收者的电子邮件作为路由密钥。我希望当发布一条带有类似于当前用户电子邮件的路由键的消息时,会为该用户显示一条flash消息,指示他有一条新消息,而不刷新页面。我想要类似Facebook通知的行为 生产者代码如下所示: class MessagesController
路由键的消息时,会为该用户显示一条flash消息,指示他有一条新消息,而不刷新页面。我想要类似Facebook通知的行为
生产者代码如下所示:
class MessagesController < ApplicationController
def create
@message = Message.new(message_params)
@message.creator_id = current_user.id
@message.receiver_id = params[:message][:receiver_id]
if @message.save
email = @message.receiver.email
$message_exchange.publish(@message.content, :routing_key => email)
redirect_to user_path(current_user)
end
end
email = current_user.email
$message_queue.bind($message_exchange, :routing_key => email)
logger.info " [*] Waiting for messages. To exit press CTRL+C"
$message_queue.subscribe(:manual_ack => true) do |delivery_info, properties, body|
logger.info " [x] #{delivery_info.routing_key}:#{body}"
if delivery_info.routing_key == current_user.email
flash[:notice] = "you have new message: #{body}"
end
end
问题是我不知道把消费者代码放在哪里。我曾尝试将代码作为方法放在应用程序控制器中,但这似乎不起作用。对于如何更好地执行此操作的任何建议,我们都将不胜感激。控制器必须向客户发送通知。你有没有看过或类似的推送技术?@NicolasLabrot我没有看过websocket,只是浏览各种谷歌搜索结果似乎是实现这一点的好方法。我一定会更深入地研究这个问题。非常感谢。