0

bunnyを使用するこのコードは、rabbitmq キューに発行されたメッセージをリッスンし、メッセージが消費されるたびにビューにフラッシュ通知を表示する必要があります。コンシューマーは、同じアプリケーション内にありますが、プロデューサーとは別のセッションで実行されています。アプリケーションは、メッセージ受信者の電子メールを routing_key として使用する直接交換を使用します。current_user の電子メールに似たメッセージrouting_keyが公開されたときに、ページを更新せずにそのユーザーに新しいメッセージがあることを示すフラッシュ メッセージが表示されるようにしたいと思います。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

問題は、消費者コードをどこに置くべきかわからないことです。コードをメソッドとしてアプリケーション コントローラーに配置しようとしましたが、うまくいかないようです。これを改善する方法についての提案は大歓迎です。

4

0 に答える 0