我正在学习RabbitMQ,并考虑使用它来提供动态消息"对用户的更新非常像facebook,可以为朋友提供动态提要。
我的想法是:
每当创建用户时,我将创建一个名称为user的用户ID的队列,因此队列名称可以是" 100_message_queue
" (userId_message_queue)。
制作人将推送此队列中的所有更新。
从客户端(javascript),它将调用REST API,如" GET http://example.com/getliveupdates/100
" ,然后我将从100_message_queue
获取所有新更新并将其作为回复发送。
我阅读了RabbitMQ php教程,但无法弄清楚这是怎么回事?此外,消费者永远运行,所以我似乎无法提出任何REST请求。它给了我超时。
知道如何实现这种结构吗?
由于
答案 0 :(得分:1)
当您计划将这些消息发送到Web客户端时,我建议您使用MQTT RabbitMQ插件查看STOMP和Web STOMP。对于你来说,它应该是通过WebSocket使用它们的完美解决方案。它为您提供实时消息传递,这始终是专业人士,也可能是您想要的。
关于处理永远消费者的问题:
如果您正在使用php-amqp
扩展名,则可以将read_timeout
选项设置为一些较小的值,例如1(秒),因此当消费者从队列中获取所有消息时,它将等待1秒。更多的新消息,然后抛出一个异常(我猜AMQPConnectionException,丑陋的解决方案,但这就是它现在的做法)。
或者,您可以AMQPQueue::get
来自队列的消息,直到没有消息为止。
php-amqplib
事情应该是相同的,至少想法仍然相同:限制消费者按时间等待新消息或以迭代方式从队列中获取消息。