Inhaltsverzeichnis
1. MQ简介:
2. JMS基本概念
2.1 P2P模型 - 打电话模型
2.2 Pub/Sub模型 - 订报纸模型
3. 支持JMS的开源MQ - ActiveMQ
Heim Backend-Entwicklung PHP-Tutorial JMS中的讯息通信模型

JMS中的讯息通信模型

Jun 13, 2016 pm 12:17 PM
link queue quot stomp

JMS中的消息通信模型

1. MQ简介:

JMS中的讯息通信模型

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

JMS中的讯息通信模型

2.2 Pub/Sub模型 - 订报纸模型

与P2P模型不同,Pub/Sub模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。

JMS中的讯息通信模型

3. 支持JMS的开源MQ - ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。

主要特点:

  1. 多种语言和协议编写客户端。语言: Java、 C、 C++、 C#、 Ruby、 Perl、 Python、 PHP。应用协议: OpenWire、Stomp、Rest、WSNotification、XMPP、AMQP
  2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
  3. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  4. 支持高速的消息持久化
  5. 从设计上保证了高性能的集群,客户端-服务器,点对点
  6. 支持Ajax

注:

在查询资料的过程中发现,PHP与ActiveMQ整合的方式可以直接使用Rest接口调用,但更高效的方式应该是安装Stomp协议的PHP扩展。

Stomp 提供了客户端和代理之间进行广泛消息传输的框架。Stomp 是一个非常简单而且易用的通讯协议实现,尽管代理端的编写可能非常复杂,但是编写一个 Stomp 客户端却是很简单的事情,另外你可以使用 Telnet 来与你的 Stomp 代理进行交互。

PHP可以通过PECL编译安装Stomp扩展。

stomp_common.php

<code>//connection ActiveMQ    function openMQ(&$queue=FALSE) {    $amq = array(        &#39;url&#39; => &#39;tcp://127.0.0.1:61613&#39;,        &#39;id&#39; => &#39;xxx&#39;,        &#39;pswd&#39; => &#39;xxx&#39;,        &#39;queue&#39; => &#39;/queue/mytest&#39;,        &#39;enable&#39; => TRUE    );    $link = stomp_connect($amq[&#39;url&#39;], $amq[&#39;id&#39;], $amq[&#39;pswd&#39;]);    if (!$link) {        die("Can&#39;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[&#39;queue&#39;], $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[&#39;headers&#39;][&#39;message-id&#39;]);             } else {                //do something                break;                }            } else {                break;            }        }        stomp_unsubscribe($link, $queue);        stomp_close($link);    }    </code>
Nach dem Login kopieren

stomp_sender.php

<code>// 消息发送服务</code>
Nach dem Login kopieren

stomp_consumer.php

<code>// 消息消费服务</code>
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Laravel-Entwicklung: Wie verwende ich die Laravel-Warteschlange, um asynchrone Aufgaben zu erledigen? Laravel-Entwicklung: Wie verwende ich die Laravel-Warteschlange, um asynchrone Aufgaben zu erledigen? Jun 13, 2023 pm 08:32 PM

Da Anwendungen immer komplexer werden, ist die Handhabung und Verwaltung großer Daten- und Prozessmengen eine Herausforderung. Um mit dieser Situation umzugehen, stellt Laravel den Benutzern ein sehr leistungsfähiges Tool zur Verfügung, die Laravel Queue (Queue). Es ermöglicht Entwicklern, Aufgaben wie das Versenden von E-Mails, das Erstellen von PDFs, das Zuschneiden von Bildern usw. im Hintergrund auszuführen, ohne dass dies Auswirkungen auf die Benutzeroberfläche hat. In diesem Artikel befassen wir uns mit der Verwendung von Laravel-Warteschlangen. Was ist die LaravelQueue-Warteschlange?

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Sicherheitsprobleme und Lösungen für Java Queue in Multithread-Umgebungen Sicherheitsprobleme und Lösungen für Java Queue in Multithread-Umgebungen Jan 13, 2024 pm 03:04 PM

Sicherheitsprobleme und Lösungen für JavaQueue-Warteschlangen in Multithread-Umgebungen Einführung: Bei der Multithread-Programmierung können gemeinsam genutzte Ressourcen im Programm Race Conditions ausgesetzt sein, die zu Dateninkonsistenzen oder Fehlern führen können. In Java ist die Warteschlange eine häufig verwendete Datenstruktur. Wenn mehrere Threads gleichzeitig die Warteschlange betreiben, treten Sicherheitsprobleme auf. In diesem Artikel werden die Sicherheitsprobleme von JavaQueue-Warteschlangen in Multithread-Umgebungen erörtert und verschiedene Lösungen vorgestellt, wobei der Schwerpunkt auf Erklärungen in Form von Codebeispielen liegt. eins

Anwendung der Warteschlange in Java Anwendung der Warteschlange in Java Feb 18, 2024 pm 03:52 PM

Verwendung von Queue in Java In Java ist Queue (Warteschlange) eine häufig verwendete Datenstruktur, die dem First-In-First-Out-Prinzip (FIFO) folgt. Mit der Warteschlange können Nachrichtenwarteschlangen, Aufgabenplanung und andere Szenarien implementiert und die Anordnung und Verarbeitungsreihenfolge von Daten gut verwaltet werden. In diesem Artikel wird die Verwendung von Queue vorgestellt und spezifische Codebeispiele bereitgestellt. Die Definition und die allgemeinen Methoden von Queue sind in Java. Queue ist eine Schnittstelle im JavaCollectionsFramework

Der Unterschied zwischen Link und Import wird im Detail erklärt: Was sind die Unterschiede zwischen ihnen? Der Unterschied zwischen Link und Import wird im Detail erklärt: Was sind die Unterschiede zwischen ihnen? Jan 06, 2024 am 08:19 AM

Eingehende Analyse: Was ist der Unterschied zwischen Link und Import? Bei der Entwicklung von Webseiten oder Anwendungen müssen wir häufig externe CSS-Dateien oder JavaScript-Bibliotheken einführen, um unseren Code zu verbessern oder anzupassen. In diesem Prozess sind Verknüpfung und Import zwei häufig verwendete Methoden. Obwohl ihr Zweck darin besteht, externe Ressourcen einzuführen, gibt es einige Unterschiede in der spezifischen Verwendung. Syntax und Speicherort: Link: Verwenden Sie das Link-Tag, um externe Ressourcen in die HTML-Datei zu verlinken, die sich normalerweise am Kopf des HTML-Dokuments befindet

Was ist der Unterschied zwischen Link-Tag und Import? Was ist der Unterschied zwischen Link-Tag und Import? Aug 28, 2023 am 11:19 AM

Zu den Unterschieden zwischen Link-Tags und Import gehören Syntax und Verwendung, Funktionen und Features, Ladezeitpunkt, Kompatibilität und Support usw. Detaillierte Einführung: 1. Syntax und Verwendung. Das Link-Tag ist ein HTML-Tag, das zum Einfügen externer Ressourcen in HTML-Dokumente verwendet wird, z. B. CSS-Stylesheets, JavaScript-Skripte, Symbole usw. import ist die Modulimportsyntax in ES6, die in verwendet wird JavaScript-Dateien. Einführung externer Module; 2. Funktionen und Features. Das Link-Tag kann eine Vielzahl von Ressourcen einführen, z. B. CSS-Stylesheets, Symbole usw.

Was sind die Unterschiede zwischen Import und Link? Was sind die Unterschiede zwischen Import und Link? Nov 24, 2023 pm 02:15 PM

Der Unterschied zwischen Import und Link: 2. Lademethode; 5. Medientyp; 8. Einbettungssatz; Standardstil; 10. Überlegungen zur Kompatibilität; 11. Überlegungen zur Leistung; Detaillierte Einführung: 1. Zweck und Semantik. Link ist ein HTML-Tag, das zum Verlinken auf externe CSS-Dateien oder Stylesheets verwendet wird. Es befindet sich normalerweise im Kopfteil des HTML-Dokuments, der Import ist Teil von CSS usw.

Vergleich von Link und Import: Was sind ihre Unterschiede? Vergleich von Link und Import: Was sind ihre Unterschiede? Jan 06, 2024 pm 08:23 PM

Die Debatte zwischen Link und Import: Was ist der Unterschied? Bei der Entwicklung und Programmierung müssen wir häufig mit anderen Dateien oder Modulen interagieren. Um diese Interaktion zu erreichen, sind Verknüpfen und Importieren zwei häufig verwendete Methoden. Viele Menschen kennen jedoch möglicherweise nicht den Unterschied zwischen Link und Import und wissen nicht, wann sie verwendet werden sollen. In diesem Artikel wird der Unterschied zwischen Link und Import ausführlich vorgestellt und Codebeispiele bereitgestellt. Lassen Sie uns zunächst das Konzept des Links verstehen. Verknüpfung

See all articles