代码之家  ›  专栏  ›  技术社区  ›  kander

消息队列:当消息进入队列时,我们可以触发事件吗?

  •  1
  • kander  · 技术社区  · 14 年前

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

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

    如有任何意见,将不胜感激。

    3 回复  |  直到 14 年前
        1
  •  1
  •   aib    14 年前

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

    让一组消费者监听队列并在消息到达时执行他们的工作并不是一个错误,这是一个好的、可伸缩的设计。(尽管我同意在无限循环中运行PHP进程有其缺点。)

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

        2
  •  1
  •   Community CDub    8 年前

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

    以下是最近的相关帖子:

    HTTP Post From ActiveMQ using Camel

        3
  •  1
  •   z900collector    11 年前

    您的应用程序监视队列的设计理念是触发外部应用程序运行的行业方法。 查看IBM Websphere“触发器监视器应用程序”。在它们的实现中,您可以有多个触发器监视器来启动处理队列中消息的应用程序,因此它的伸缩性非常好,触发器监视器在安装应用程序的服务器上运行(如果您为可伸缩性而设计,则应能在需要时有多个应用服务器)。

    推荐文章