1

在工作中,我们正在讨论是否为我们的 PHP 应用程序实现消息队列。目前我们正在研究 Apache 的 ActiveMQ。我们不完全清楚的一件事是是否可以根据到达队列的消息触发进程。

到目前为止,我们发现的文献似乎表明消息队列是一种基于拉取的机制:进程定期运行(作为守护进程或 cron),并从队列中拉取传入的消息。有没有可能把它变成一个推送机制?也就是说,有没有办法让消息队列在消息到达时实际发起 HTTP 请求(或进程)?我们发现的一个选项是发布/订阅模型,但这需要在无限循环中运行我们的 PHP 应用程序,以保持与 ActiveMQ 实例的开放 (TCP) 连接,这感觉有点杂乱无章。

任何输入将不胜感激。

4

3 回答 3

1

一个明显的解决方案是让发布者在存储消息后立即发起 HTTP 请求,但这引出了一个问题,那你为什么要使用消息队列?

让一组消费者在队列上侦听并在消息到来时完成他们的工作并不是一个杂乱无章的事情,它是一个很好的、可扩展的设计。(虽然我同意在无限循环中运行 PHP 进程有其缺点。)

为什么选择消息队列而不是存储消息的数据库?“生产者”可以将消息作为一行存储在表中,然后使用消息的 PK 触发“消费者”。

于 2010-11-23T12:31:20.807 回答
1

考虑创建一个从队列(JMS 组件)中提取消息并转发到 HTTP 端点(HTTP 组件)的 Camel 路由。您甚至可以决定在 ActiveMQ 代理进程上托管 Camel 路由——创建一种智能路由代理。ActiveMQ 通过在 ActiveMQ 发行版中捆绑 Camel Core 库使这变得容易。

这是最近的相关/相关帖子:

使用 Camel 来自 ActiveMQ 的 HTTP 发布

于 2010-12-16T02:54:36.637 回答
1

您的应用程序监控队列的设计理念是触发外部应用程序运行的行业方式。看看 IBM Websphere“触发器监视器应用程序”。在他们的实现中,您可以有多个触发器监视器来启动处理队列中的消息的应用程序,因此当触发器监视器在安装应用程序的服务器上运行时它可以很好地扩展(如果您设计可伸缩性,您应该能够如果需要,有多个应用服务器)。

于 2013-12-10T03:56:16.670 回答