我有两个正在运行的牛仔服务器实例,它们连接到 RabbitMQ。我使用 gen_bunny 作为 RabbitMQ 客户端连接到 RabbitMQ。
如果使用 bunnyc:consume(),我可以使用来自 rabbitMQ 的消息。但是,为此我需要明确地触发此方法。我想要的是在牛仔上绑定一个事件,以便队列中有消息时它应该自动通知牛仔。
是否可以使用 gen_bunny 或其他 erlang 客户端?
不知道 gen_bunny,但使用官方 erlang 客户端,您可以订阅队列(查看http://www.rabbitmq.com/erlang-client-user-guide.html,“订阅队列”部分)
据我了解,您需要通过 WebSockets 从队列向客户端发送消息。因此,您需要订阅与客户端通信的进程中的队列。并在“receive ... end”或 handle_info 中接收消息(取决于实现)
我查看了 gen_bunny 来源... mochi/gen_bunny 取决于提供 amqp_channel:subscribe/3 的 mochi/amqp_client (请参阅https://github.com/mochi/amqp_client/blob/master/src/amqp_channel.erl#L177)你可以用来订阅
成功了……在对 bunnyc.erl 源代码进行了一些调整之后。现在,在 init 函数中,我添加了订阅函数,并在 bunnyc.erl 中的 start_link 函数中传递了我的牛仔进程的进程 ID,因此只要队列中有消息,我就可以在牛仔的 websocket_info 函数中获取它。