日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JMS中的消息通信模型

發布時間:2023/11/29 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMS中的消息通信模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. MQ簡介:

消息隊列(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中消失了,所以一個消息只能被一個接收者消費。

2.2 Pub/Sub模型 - 訂報紙模型

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

3. 支持JMS的開源MQ - ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規范的 JMS Provider實現。

主要特點:

  • 多種語言和協議編寫客戶端。語言: Java、 C、 C++、 C#、 Ruby、 Perl、 Python、 PHP。應用協議: OpenWire、Stomp、Rest、WSNotification、XMPP、AMQP
  • 完全支持JMS1.1和J2EE 1.4規范 (持久化,XA消息,事務)
  • 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  • 支持高速的消息持久化
  • 從設計上保證了高性能的集群,客戶端-服務器,點對點
  • 支持Ajax
  • 注:

    在查詢資料的過程中發現,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 queue function 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 message function 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 somethingbreak; } } else { break; } } stomp_unsubscribe($link, $queue); stomp_close($link); }

    stomp_sender.php

    // 消息發送服務

    stomp_consumer.php

    // 消息消費服務

    總結

    以上是生活随笔為你收集整理的JMS中的消息通信模型的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。