Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我可以把这个rabbitmq消费代码放在哪里?_Ruby On Rails_Rabbitmq_Bunny - Fatal编程技术网

Ruby on rails 我可以把这个rabbitmq消费代码放在哪里?

Ruby on rails 我可以把这个rabbitmq消费代码放在哪里?,ruby-on-rails,rabbitmq,bunny,Ruby On Rails,Rabbitmq,Bunny,我有一个rabbitmq使用者使用的代码,它应该侦听发布到rabbitmq队列的消息,并在消息被消费时在视图上显示一个flash通知。使用者在与生产者不同的会话中运行,尽管它们在同一个应用程序中。应用程序使用直接交换,该交换使用消息接收者的电子邮件作为路由密钥。我希望当发布一条带有类似于当前用户电子邮件的路由键的消息时,会为该用户显示一条flash消息,指示他有一条新消息,而不刷新页面。我想要类似Facebook通知的行为 生产者代码如下所示: class MessagesController

我有一个rabbitmq使用者使用的代码,它应该侦听发布到rabbitmq队列的消息,并在消息被消费时在视图上显示一个flash通知。使用者在与生产者不同的会话中运行,尽管它们在同一个应用程序中。应用程序使用直接交换,该交换使用消息接收者的电子邮件作为路由密钥。我希望当发布一条带有类似于当前用户电子邮件的
路由键的消息时,会为该用户显示一条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,只是浏览各种谷歌搜索结果似乎是实现这一点的好方法。我一定会更深入地研究这个问题。非常感谢。