簡體   English   中英

消息隊列:當消息進入隊列時,我們可以觸發事件嗎?

[英]Message Queue: Can we trigger events when a message enters the queue?

在工作中,我們正在討論是否為我們的PHP應用程序實現消息隊列。 目前,我們正在研究Apache的ActiveMQ。 我們尚不完全清楚的一件事是,是否有可能基於隊列中的消息觸發流程。

到目前為止,我們發現的文獻似乎表明消息隊列是基於拉的機制:該進程定期運行(作為守護程序或cron),並從隊列中提取其傳入消息。 有可能將其轉變為推動機制嗎? 也就是說,有沒有辦法讓消息隊列在消息到達時實際啟動HTTP請求(或進程)? 我們發現的一個選項是“發布/訂閱”模型,但這需要在無限循環中運行我們的PHP應用程序,以維持與ActiveMQ實例的開放(TCP)連接,這似乎有點麻煩。

任何輸入將不勝感激。

您設計的用於監視隊列的應用程序的設計概念是觸發外部應用程序運行的行業方法。 看一下IBM Websphere“ Trigger Monitor Applications”。 在其實現中,您可以有多個觸發器監視器來啟動處理隊列中消息的應用程序,因此它可以很好地擴展,因為觸發器監視器在安裝了應用程序的服務器上運行(如果您設計用於擴展性,則應該能夠有多個應用服務器(如果需要)。

一個明顯的解決方案是讓發布者在存儲消息之后立即啟動HTTP請求,但這引出了一個問題,為什么要使用消息隊列?

讓一組消費者在隊列中偵聽並在收到消息時完成工作並不是一件容易的事,這是一個很好的可擴展設計。 (盡管我同意在無限循環中運行PHP進程有其缺點。)

為什么選擇一個消息隊列,而不是選擇一個存儲消息的數據庫? “生產者”可以將消息作為一行存儲在表中,然后使用消息的PK觸發“消費者”。

考慮創建一個駱駝路由,該路由從隊列(JMS組件)中提取消息並轉發到HTTP端點(HTTP組件)。 您甚至可以決定在ActiveMQ代理進程上托管駱駝路由-創建一種智能路由代理。 ActiveMQ通過捆綁ActiveMQ發行版中的Camel Core庫,使此操作變得容易。

這是最近相關的相關文章:

使用Camel從ActiveMQ發送HTTP帖子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM