JMS中的讯息通信模型
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
<code>//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); } </code>
stomp_sender.php
<code>// 消息发送服务</code>
stomp_consumer.php
<code>// 消息消费服务</code>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Apabila aplikasi menjadi lebih kompleks, pengendalian dan mengurus sejumlah besar data dan proses adalah satu cabaran. Untuk menangani situasi ini, Laravel menyediakan pengguna dengan alat yang sangat berkuasa, Laravel Queue (Queue). Ia membolehkan pembangun menjalankan tugas seperti menghantar e-mel, menjana PDF, mengendalikan pemangkasan imej, dsb. di latar belakang tanpa sebarang kesan pada antara muka pengguna. Dalam artikel ini, kami akan mendalami cara menggunakan baris gilir Laravel. Apakah giliran LaravelQueue

Isu keselamatan dan penyelesaian untuk baris gilir JavaQueue dalam persekitaran berbilang benang Pengenalan: Dalam pengaturcaraan berbilang benang, sumber yang dikongsi dalam program mungkin menghadapi keadaan perlumbaan, yang mungkin membawa kepada ketidakkonsistenan atau ralat data. Di Java, Queue ialah struktur data yang biasa digunakan Apabila berbilang benang mengendalikan baris gilir pada masa yang sama, terdapat isu keselamatan. Artikel ini akan membincangkan isu keselamatan baris gilir JavaQueue dalam persekitaran berbilang benang, dan memperkenalkan beberapa penyelesaian, memfokuskan pada penjelasan dalam bentuk contoh kod. satu

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

Penggunaan Queue dalam Java Dalam Java, Queue (baris gilir) ialah struktur data yang biasa digunakan yang mengikut prinsip first-in, first-out (FIFO). Baris gilir boleh digunakan untuk melaksanakan baris gilir mesej, penjadualan tugas dan senario lain, dan boleh mengurus susunan dan pemprosesan data dengan baik. Artikel ini akan memperkenalkan penggunaan Queue dan memberikan contoh kod khusus. Definisi dan kaedah biasa Queue adalah dalam Java Queue ialah antara muka dalam JavaCollectionsFramework

Analisis mendalam: Apakah perbezaan antara pautan dan import? Apabila membangunkan halaman web atau aplikasi, kami selalunya perlu memperkenalkan fail CSS luaran atau perpustakaan JavaScript untuk meningkatkan atau menyesuaikan kod kami. Dalam proses ini, pautan dan import adalah dua kaedah yang biasa digunakan. Walaupun tujuan mereka adalah untuk memperkenalkan sumber luaran, terdapat beberapa perbezaan dalam penggunaan khusus. Sintaks dan lokasi: pautan: Gunakan teg pautan untuk memautkan sumber luaran ke dalam fail HTML, biasanya terletak di kepala dokumen HTML

Perbezaan antara teg pautan dan import termasuk sintaks dan penggunaan, fungsi dan ciri, masa pemuatan, keserasian dan sokongan, dsb. Pengenalan terperinci: 1. Sintaks dan penggunaan Teg pautan ialah teg HTML, digunakan untuk memperkenalkan sumber luaran ke dalam dokumen HTML, seperti helaian gaya CSS, skrip JavaScript, ikon, dsb. import ialah sintaks import modul dalam ES6, digunakan dalam Fail JavaScript. Memperkenalkan modul luaran;

Teg pautan dan teg adalah dua teg yang biasa digunakan dalam HTML. Teg ini mempunyai fungsi dan kegunaan yang berbeza. tag pautan Teg pautan digunakan terutamanya untuk memperkenalkan sumber luaran ke dalam dokumen HTML Ia biasanya digunakan untuk memperkenalkan helaian gaya luaran (fail CSS Ia juga boleh digunakan untuk memperkenalkan jenis fail lain, seperti fail imej, fail audio). dan lain-lain. Teg pautan terletak dalam teg, biasanya ditulis selepas metadata lain (seperti teg). Format tatabahasa asas teg pautan

Konsep asas dan operasi JavaQueue Queue (Queue) ialah struktur data biasa yang beroperasi mengikut prinsip first-in-first-out (FIFO). Dalam pengaturcaraan Java, kita boleh menggunakan antara muka Queue dan kelas pelaksanaannya untuk melaksanakan fungsi queue. Artikel ini akan memperkenalkan konsep asas dan operasi biasa Queue, dan memberikan contoh kod khusus. 1. Konsep asas baris gilir ialah struktur data linear Ia mempunyai dua operasi asas: enqueue dan deq.
