RabbitMQ PHP для динамического обновления сообщений

Я изучаю RabbitMQ и подумал о том, чтобы использовать его для предоставления пользователям «динамических сообщений», очень похоже на то, как Facebook дает динамические каналы от друзей.

Моя идея была:

  1. Каждый раз, когда создается пользователь, я создаю очередь с именем userId пользователя, поэтому имя очереди может быть «100_message_queue«(userId_message_queue).

  2. Производитель будет помещать все обновления в эту очередь.

  3. Со стороны клиента (javascript) он будет вызывать REST API, например:GET http://example.com/getliveupdates/100«, тогда я буду получать все новые обновления от 100_message_queue и отправьте это как ответ.

Я читаю учебники PHP RabbitMQ, но не могу понять, как это возможно? Более того, потребитель работает вечно, поэтому кажется, что я не могу сделать REST-запрос. Это дает мне тайм-аут.

Есть идеи, как реализовать такую ​​структуру?

Спасибо

0

Решение

Поскольку вы планируете доставлять эти сообщения в веб-клиент, я бы порекомендовал посмотреть на MQTT а также ТОПАЙТЕ с Веб-STOMP Плагины RabbitMQ. Для вас это должно быть идеальным решением использовать их власть над WebSocket. И это дает вам сообщения в реальном времени, который всегда профессионал и, вероятно, то, что вы хотите.

Что касается работы с вечными потребителями:

Если вы используете php-amqp расширение вы можете установить read_timeout параметр для некоторых небольших значений, скажем, 1 (сек), поэтому, когда потребитель получит все сообщения из очереди, он будет ждать в течение 1 сек. больше для новых сообщений, а затем выбросить исключение (я думаю, AMQPConnectionException, некрасивое решение, но сейчас это так).

Кроме того, вы можете AMQPQueue::get сообщения из очереди, пока не останется сообщений.

С php-amqplib все должно быть одинаково, по крайней мере, идея все та же: ограничить потребителя временем ожидания новых сообщений или итеративным образом получать сообщения из очереди.

1

Другие решения

Других решений пока нет …