
消息隊列(Message Queue,簡稱MQ),是應用程序與應用程序之間的一種通信方法。應用程序通過發送和檢索出入列隊的針對應用程序的數據 - 消息來通信,而無需專用連接來鏈接它們。程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用于諸如RPC遠程過程調用的技術。隊列的使用消除了接收和發送應用程序需同時執行的要求。
2. JMS基本概念JMS(java Message Service) 即Java消息服務,是由Sun開發的。它提供標準的產生、發送、接收消息的接口簡化企業應用的開發。
JMS是一系列的接口及相關語義的集合,通過這些接口和和其中的方法,JMS客戶端如何去訪問消息系統,完成創建、發送、接收和讀取企業消息系統中消息。
它支持兩種消息通信模型:點對點模型(point-to-point、P2P)和發布者/訂閱者模型(Pub/Sub)。P2P模型規定了一個消息只能有一個接收者;Pub/Sub 模型允許一個消息可以有多個接收者。
2.1 P2P模型 - 打電話模型對于P2P模型,消息生產者產生一個消息后,把這個消息發送到一個Queue(隊列)中,然后消息接收者再從這個Queue中讀取,一旦這個消息被一個接收者讀取之后,它就在這個Queue中消失了,所以一個消息只能被一個接收者消費。

與P2P模型不同,Pub/Sub模型中,消息生產者產生一個消息后,把這個消息發送到一個Topic中,這個Topic可以同時有多個接收者在監聽,當一個消息到達這個Topic之后,所有消息接收者都會收到這個消息。

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規范的 JMS PRovider實現。
主要特點:
注:
在查詢資料的過程中發現,PHP與ActiveMQ整合的方式可以直接使用Rest接口調用,但更高效的方式應該是安裝Stomp協議的PHP擴展。
Stomp 提供了客戶端和代理之間進行廣泛消息傳輸的框架。Stomp 是一個非常簡單而且易用的通訊協議實現,盡管代理端的編寫可能非常復雜,但是編寫一個 Stomp 客戶端卻是很簡單的事情,另外你可以使用 Telnet 來與你的 Stomp 代理進行交互。
PHP可以通過PECL編譯安裝Stomp擴展。
stomp_common.php
//connection ActiveMQ function openMQ(&$queue=FALSE) { $amq = array( 'url' => 'tcp://127.0.0.1:61613', 'id' => 'xxx', 'pswd' => 'xxx', 'queue' => '/queue/mytest', 'enable' => TRUE ); $link = stomp_connect($amq['url'], $amq['id'], $amq['pswd']); if (!$link) { die("Can't connect MQ !!"); } else { return $link; }}//send a message to the queuefunction sendMQ($data) { $link = openMQ(); foreach ($data as $pitem) { //使用 persistent message $result = stomp_send($link, $amq['queue'], $pitem, array("persistent" => "true")); if (FALSE === $result) { //do something } }}//receive messagefunction receiveMQ() { $link = openMQ($queue); //stomp_subscribe($link, $queue); stomp_subscribe($link, $queue, array("activemq.prefetchSize" => 1000)); while (1) { if (TRUE === stomp_has_frame($link)) { $frame = stomp_read_frame($link); if (FALSE !== $frame) { stomp_ack($link, $frame['headers']['message-id']); } else { //do something break; } } else { break; } } stomp_unsubscribe($link, $queue); stomp_close($link); } stomp_sender.php
// 消息發送服務stomp_consumer.php
// 消息消費服務
|
新聞熱點
疑難解答