Трансляция сообщений с использованием RabbitMQ, genbunny и уведомления о событиях cowboy

У меня есть два экземпляра ковбойского сервера, которые подключены к RabbitMQ. Я использую gen_bunny в качестве клиента RabbitMQ для подключения к RabbitMQ.

Я могу получить сообщение от rabbitMQ, если использую bunnyc:consume(). Однако для этого мне нужно явно запустить этот метод. Я хочу привязать событие к ковбою, чтобы, как только в очереди появилось сообщение, оно автоматически уведомляло ковбоя.

Возможно ли использовать gen_bunny или другой клиент erlang?


person Jack Daniel's    schedule 30.05.2013    source источник


Ответы (2)


Не знаю о gen_bunny, но с официальным клиентом erlang вы можете подписаться на очередь (см. http://www.rabbitmq.com/erlang-client-user-guide.html, раздел «Подписка на очереди»)

Насколько я понимаю, вам нужно отправлять сообщения из очереди через веб-сокеты клиентам. Поэтому вам нужно подписаться на очередь в процессе, которая общается с клиентом. И получать сообщения в "receive... end" или в handle_info (зависит от реализации)

ДОБАВЛЕНИЕ

Я посмотрел в исходниках gen_bunny... mochi/gen_bunny зависит от mochi/amqp_client, которые предоставляют amqp_channel:subscribe/3 (см. https://github.com/mochi/amqp_client/blob/master/src/amqp_channel.erl#L177), вы можете использовать его для подписки

person couchemar    schedule 30.05.2013
comment
Спасибо за ответ... Проблема в том, что приложение уже использует gen_bunny. Тем не менее, я также попробую клиент erlang... - person Jack Daniel's; 31.05.2013
comment
Клиент erlang прост в настройке. - person Muzaaya Joshua; 31.05.2013
comment
Спасибо, Couchemar. У меня все заработало после настройки кода bunnyc.erl. - person Jack Daniel's; 31.05.2013

Заработало... После некоторой настройки исходного кода bunnyc.erl. Теперь в функцию инициализации я добавил функцию подписки и в функцию start_link в bunnyc.erl, передав идентификатор процесса моего процесса ковбоя, поэтому, как только в очереди появится сообщение, я могу получить его в функции websocket_info ковбоя.

person Jack Daniel's    schedule 31.05.2013