在工作中,我们正在讨论是否为我们的PHP应用程序实现消息队列。目前我们正在研究Apache的ActiveMQ。我们还不完全清楚的一件事是,是否可以根据到达队列的消息触发进程。
到目前为止我们发现的文献似乎表明消息队列是一种基于拉取的机制:进程定期运行(作为守护进程或cron),并从队列中提取其传入消息。是否可以将其转变为推动机制?也就是说,当消息到达时,有没有办法让Message Queue实际启动HTTP请求(或进程)?我们发现的一个选项是发布/订阅模型,但这需要在无限循环中运行我们的PHP应用程序以维持与ActiveMQ实例的开放(TCP)连接,这感觉就像是一个kludge。
非常感谢任何意见。
答案 0 :(得分:1)
一个显而易见的解决方案是让发布者在存储消息后立即发起HTTP请求,但这就引出了一个问题,为什么你要使用消息队列?
让一群消费者在队列中聆听,并按照消息来做他们的工作并不是一个好处,它是一个好的,可扩展的设计。 (虽然我同意在无限循环中运行PHP进程有其缺点。)
为什么选择了一个消息队列而不是一个存储消息的数据库呢? “生产者”可以将消息存储为表格中的一行,然后使用消息的PK触发“消费者”。
答案 1 :(得分:1)
考虑创建一个Camel路由,该路由从队列(JMS组件)中提取消息并转发到HTTP端点(HTTP组件)。您甚至可以决定在ActiveMQ代理进程上托管Camel路由 - 创建一种智能路由代理。 ActiveMQ通过将Camel Core库捆绑在ActiveMQ发行版中来实现这一目标。
这是最近的相关/相关帖子:
答案 2 :(得分:1)
您监控队列的应用程序的设计概念是触发外部应用程序运行的行业方式。 查看IBM Websphere“触发器监视器应用程序”。在它们的实现中,您可以使用多个触发器监视器来启动处理队列中消息的应用程序,因此当触发器监视器在安装了应用程序的服务器上运行时,它可以很好地扩展(如果您设计可伸缩性,您应该能够如果需要,有几个应用服务器。)