RabbitMQ PHP для динамического обновления сообщений
Я изучаю RabbitMQ и подумал о том, чтобы использовать его для предоставления пользователям "динамических сообщений", очень похоже на то, как Facebook дает динамические каналы от друзей.
Моя идея была:
Каждый раз, когда создается пользователь, я создаю очередь с именем userId пользователя, поэтому имя очереди может быть "
100_message_queue
"(userId_message_queue).Производитель будет помещать все обновления в эту очередь.
Со стороны клиента (javascript) он будет вызывать REST API, например:
GET http://example.com/getliveupdates/100
", тогда я буду получать все новые обновления от100_message_queue
и отправьте это как ответ.
Я читаю учебники PHP RabbitMQ, но не могу понять, как это возможно? Более того, потребитель работает вечно, поэтому кажется, что я не могу сделать REST-запрос. Это дает мне тайм-аут.
Есть идеи, как реализовать такую структуру?
Спасибо
1 ответ
Поскольку вы планируете доставлять эти сообщения в веб-клиент, я бы порекомендовал посмотреть на MQTT и STOMP с плагинами Web STOMP RabbitMQ. Для вас это должно быть идеальным решением использовать их власть над WebSocket. И это дает вам сообщения в реальном времени, который всегда профессионал и, вероятно, то, что вы хотите.
Что касается работы с вечными потребителями:
Если вы используете php-amqp
расширение вы можете установить read_timeout
параметр для некоторых небольших значений, скажем, 1 (сек), поэтому, когда потребитель получит все сообщения из очереди, он будет ждать в течение 1 сек. больше для новых сообщений, а затем выбросить исключение (я думаю, AMQPConnectionException, некрасивое решение, но сейчас это так).
Кроме того, вы можете AMQPQueue::get
сообщения из очереди, пока не останется сообщений.
С php-amqplib
все должно быть одинаково, по крайней мере, идея все та же: ограничить потребителя временем ожидания новых сообщений или итеративным образом получать сообщения из очереди.