JMS中的消息通信模型

1. MQ简介:

img_385b9767f71019c25e6c30217fb9896c.gif

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

img_913089e3d18b52398388a00a292b211a.jpg

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

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

img_ffa484699e15915daf9f212d76e9585a.jpg

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

//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

// 消息消费服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器视觉学习笔记】最近邻插值实现图片任意角度旋转(C++)

目录原理源码RotateImage主函数效果完整源码速度优化源码优化效果平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文算法改进自图形算法与实战:6.图像运动专题(5)图像旋转-基于近邻插值的图像旋转 —— 进击的CV 原理…

UGUI的优点新UI系统

UGUI的优点新UI系统 第1章 新UI系统概述 UGUI的优点新UI系统,新的UI系统相较于旧的UI系统而言,是一个巨大的飞跃!有过旧UI系统使用体验的开发者,大部分都对它没有任何好感,以至于在过去的很长一段时间里,大…

【探索HTML5第二弹05】响应式布局(中),一步一步响应式布局

前言 前天初步探究了一次响应式布局,虽然花了一天功夫,做出来的东西还是不行,在此我还是认为要做响应式布局设计应该先行,应该先制作3个以上的设计图出来,但是对于手机来说,图片流量也是个问题,…

通过使用CSS字体阴影效果解决hover图片时显示文字看不清的问题

1.前言 最近需要加入一个小功能,在鼠标越过图片时,提示其大小和分辨率,而不想用增加属性title来提醒,不够好看。然而发现如果文字是一种颜色,然后总有概率碰到那张图上浮一层的文字会看不到,所以加入文字字…

第4章:色彩空间类型转换

第四章:色彩空间类型转换one. 色彩空间基础知识:1. GRAY色彩空间:2. XYZ色彩空间3. YCrCb色彩空间3. HSV色彩空间4. HLS 色彩空间5. CIEL * a * b *色彩空间6. CIEL * u * v *色彩空间7. Bayer色彩空间two. 类型转换函数:three. 类…

【机器视觉学习笔记】双线性插值实现图片任意角度旋转(C++)

目录原理源码RotateImage_BilinearInterpolation主函数效果与最近邻插值比较原图最近邻插值效果(局部)双线性插值效果(局部)完整源码平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 原理 如图所示&#xff0…

第5章 - 几何变换

第五章-几何变换one. 缩放:two. 翻转:three. 仿射:1. 平移:2. 旋转:3. 更多复杂的仿射变换:four. 透视:five. 重映射:1. 映射参数的理解:2. 复制:3. 绕x轴旋转&#xff1…

安装设置Android Studio Win7安装

发一下牢骚和主题无关: 让人等待已久的Google I/O 2013 大会没有给我们带来Android5.0,也没有带来Adnroid4.3等等,但带来了Android Studio,虽说是预览版,又是基于Intellij IDEA, 但是也无不让开辟者们高兴。…

【树莓派学习笔记】一、烧录系统、(无屏幕)配置Wifi和SSH服务

目录系统镜像的准备格式化TF卡烧录镜像配置Wifi开启SSH服务第一次开机平台:树莓派3B 版本: 2021-05-07-raspios-buster-armhf 系统镜像的准备 树莓派资源里有许多资源,包括我们要用到的镜像。 格式化TF卡 将TF卡格式化为FAT32格式。 …

第6章-阈值处理

第六章-阈值处理one. threshold函数:1. 二值化阈值处理(cv2.THRESH_BINARY):2. 反二值化阈值处理(cv2.THRESH_BINARY_INV)3. 截断阈值化处理(cv2.THRESH_TRUNC)4. 超阈值零处理(cv2.THRESH_TOZERO_INV)5.低阈值零处理(cv2.THRESH_…

【树莓派学习笔记】二、(无屏幕)SSH远程登录、图形界面及系统配置

目录确定树莓派LAN IP使用PuTTY登陆带图形界面的远程登陆Xming方案VNC Server 方案系统配置换源(可选)备份原文件查询系统版本编辑sources.list文件同步更新源更新软件包重启树莓派固定LAN IP平台:树莓派3B 版本: 2021-05-07-raspios-buster-armhf 确定…

Centos7完全分布式搭建Hadoop2.7.3

(一)软件准备 1,hadoop-2.7.3.tar.gz(包) 2,三台机器装有cetos7的机子 (二)安装步骤 1,给每台机子配相同的用户 进入root : su root 创建用户s: useradd s 修改用户密码:passwd s 2…

第7章:图像的平滑处理

第7章:图像的平滑处理一、均值滤波:二、方框滤波:三、高斯滤波:四、中值滤波五、双边滤波:六、2D卷积​ 图像的平滑处理是在尽量图像原有信息的情况下,过滤掉图像内部的噪声。由于图像平滑处理的同时通常伴…

【树莓派学习笔记】三、点亮一个LED灯(C语言 - WiringPi、Python - RPi.GPIO/GPIO Zero、bash脚本)

目录C语言WiringPiPythonRPi.GPIOGPIO Zerobash脚本平台:树莓派3B 版本: 2021-05-07-raspios-buster-armhf 若GPIO输出为3.3V 采用压降为1.7V的红色LED灯 设工作电流为15mA,则限流电阻取≥(3.3 - 1.7)/0.015 106.67欧较为安全。 C语言 Wi…

OpenStack 之Nova添加扩展API流程,附带资源的查找功能

例子中涉及到SQLAlchemy 得相关操作,可以参考 上一随笔 Openstack 中规定,扩展openstack得api有两种方式 创建新的WSGI 资源扩展原有得WSGI资源得控制器(我得理解是,接受到API请求后,具体得响应逻辑)这两种…

第8章:形态学操作

第8章:形态学操作one. 腐蚀操作:two. 膨胀:three. 通用形态学函数:four. 开运算:five. 闭运算:six. 形态学梯度运算:seven. 礼帽运算:eight. 黑帽运算:night. 核函数&…

【树莓派学习笔记】四、OpenCV的安装与卸载

目录安装修改host以连接上Github测试IP修改树莓派的hosts安装各种依赖包安装OpenCV只安装核心模块安装核心模块和opencv_contribC Opencv 测试编写测试源码编译测试卸载平台:树莓派3B 版本: 2021-05-07-raspios-buster-armhf 安装 修改host以连接上Git…

第9章:图像梯度

第9章:图像梯度one. Sobel理论基础1. 计算水平方向偏导数的近似值2. 计算垂直方向偏导数的近似值two. Sobel算子及函数的使用:1. 函数语法:2. 对像素取绝对值:3. 方向:three. Scharr 算子及函数使用:1. 函数语法:2. 实…

【树莓派学习笔记】五、处理、自动重命名并另存为图片

目录编写源码编译测试平台&#xff1a;树莓派3B 版本&#xff1a; 2021-05-07-raspios-buster-armhf 编写源码 所用源码修改自【机器视觉学习笔记】最近邻插值实现图片任意角度旋转&#xff08;C&#xff09; 在合适的地方编写源码 nano main.cpp#include <opencv2/openc…

第10章:Canny图像边缘检测

第10章&#xff1a;Canny图像边缘检测一、Canny边缘检测的基础&#xff1a;1. 应用高斯滤波去除图像噪声&#xff1a;2. 计算梯度3.非极大值抑制4. 应用双阈值确定边缘&#xff1a;二、Canny函数使用&#xff1a;​ Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。19…