0

我正在学习 RabbitMQ,并考虑使用它为用户提供“动态消息”更新,就像 facebook 提供来自朋友的动态消息一样。

我的想法是:

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

  2. 生产者将推送此队列中的所有更新。

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

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

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

谢谢

4

1 回答 1

1

当您计划将该消息传递到 Web 客户端时,我建议您使用Web STOMP RabbitMQ 插件查看MQTTSTOMP 。对您来说,在 WebSocket 上使用它们的能力应该是完美的解决方案。它为您提供实时消息传递,这始终是专业的,可能是您想要的。

至于处理永远运行的消费者:

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

或者,您可以AMQPQueue::get从队列中发送消息,直到没有消息为止。

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

于 2014-10-03T09:02:13.853 回答