RabbitMQ PHP用于动态消息更新

时间:2014-10-03 04:06:38

标签: php rabbitmq amqp rabbitmq-exchange php-amqp

我正在学习RabbitMQ,并考虑使用它来提供动态消息"对用户的更新非常像facebook,可以为朋友提供动态提要。

我的想法是:

  1. 每当创建用户时,我将创建一个名称为user的用户ID的队列,因此队列名称可以是" 100_message_queue" (userId_message_queue)。

  2. 制作人将推送此队列中的所有更新。

  3. 从客户端(javascript),它将调用REST API,如" GET http://example.com/getliveupdates/100" ,然后我将从100_message_queue获取所有新更新并将其作为回复发送。

  4. 我阅读了RabbitMQ php教程,但无法弄清楚这是怎么回事?此外,消费者永远运行,所以我似乎无法提出任何REST请求。它给了我超时。

    知道如何实现这种结构吗?

    由于

1 个答案:

答案 0 :(得分:1)

当您计划将这些消息发送到Web客户端时,我建议您使用MQTT RabbitMQ插件查看STOMPWeb STOMP。对于你来说,它应该是通过WebSocket使用它们的完美解决方案。它为您提供实时消息传递,这始终是专业人士,也可能是您想要的。

关于处理永远消费者的问题:

如果您正在使用php-amqp扩展名,则可以将read_timeout选项设置为一些较小的值,例如1(秒),因此当消费者从队列中获取所有消息时,它将等待1秒。更多的新消息,然后抛出一个异常(我猜AMQPConnectionException,丑陋的解决方案,但这就是它现在的做法)。

或者,您可以AMQPQueue::get来自队列的消息,直到没有消息为止。

php-amqplib事情应该是相同的,至少想法仍然相同:限制消费者按时间等待新消息或以迭代方式从队列中获取消息。