本文中的相关环境:

操作系统版本:CentOS Linux release 7.8.2003 (Core)

php版本:PHP 7.1.33 ( NTS )

Stomp扩展版本: 2.0.1

php在操作activemq的时候需要借助一个叫Stomp的扩展,所以要先安装一下该扩展。PS:准确来说,php的Stomp扩展是基于Stomp协议来开发的,而activemq支持多种协议(其中就包括 Stomp协议),所以 php也是通过Stomp协议(php的Stomp扩展)来和activemq进行交互的

安装php的Stomp扩展(pecl一键安装方式)pecl install https://pecl.php.net/get/stomp-2.0.1.tgz -y

# 安装过程中出现

OpenSSL install prefix (no to disable SSL support) [/usr] :  # 这里输入yes 按回车继续安装,不输入yes直接按回车 在接下来的编译中会报错 导致安装失败

# 安装完毕后可以在 cli模式使用 php -m | grep Stomp 来查看扩展是否已安装 或 在web模式下使用 phpinfo() 函数来查看是否已安装该扩展

创建队列,并往队列中写入数据:/***************** 队列类型是:queue *************************/

$broker = 'tcp://192.168.13.119:61613'; //61613是默认的端口,在activemq目录下的conf/activemq.xml文件可查看到

$queue  = '/queue/userreg'; //创建一个queue类型的队列,队列名字是userreg 注意 这里是queue!这里是queue!这里是queue!

$user_data = array('user_name' => 'zhangsan');

$stomp = new Stomp($broker);

$stomp->send($queue, json_encode($user_data));

/***************** 队列类型是:topic *************************/

$broker = 'tcp://192.168.13.119:61613';

$topic_order = '/topic/order'; //创建一个topic类型的队列,队列名字是order 注意 这里是topic!这里是topic!这里是topic!

$order_data = array('order_sn' => '20201125155856');

$stomp = new Stomp($broker);

$stomp->send($topic_order, json_encode($order_data));

//queue和topic队列类型的区别 是在于读取队列的时候,queue用于点对点模型(一个生产者,一个消费者 是1对1的关系), topic用于发布/订阅模型(一个生产者,多个消费者 是1对多的关系)

普通队列读取(点对点(Point To Point)模型),使用示例:$broker = 'tcp://192.168.13.119:61613';

$queue  = '/queue/userreg';  //注意 这里是queue!这里是queue!这里是queue!

try {

$stomp = new Stomp($broker);

$stomp->subscribe($queue); 订阅了一个queue类型的队列 队列名字是userreg

$frame = $stomp->readFrame();  //读取队列

echo $frame->body.PHP_EOL;  //输出队列中的具体消息内容

$stomp->ack($frame);  //给activemq服务发送ack通知,activemq服务收到ack通知后会把该消息从队列中移除

} catch(StompException $e) {

echo $e->getMessage();

}

//一个队列中可能会有很多个数据,一般都是循环读取,示例代码如下:

$broker = 'tcp://192.168.13.119:61613';

$queue  = '/queue/userreg'; //注意 这里是queue!这里是queue!这里是queue!

try{

$stomp = new Stomp($broker);

$stomp->subscribe($queue);

//hasFrame()方法:判断队列中是否有数据, false:队列中没有数据  true:队列中有数据

while($stomp->hasFrame() !== false)

{

$frame = $stomp->readFrame();

echo $frame->body.PHP_EOL;

$stomp->ack($frame);

usleep(5000000); //休眠5000毫秒

}

}catch(StompException $e) {

echo $e->getMessage();

}

点对点消息模型特点:只有一个消费者可以接收到消息,并且不能进行重复消费。

发布/订阅(Publish/Subscribe)模型,使用示例:$broker = 'tcp://192.168.13.119:61613';

$topic= '/topic/order'; //注意 这里是topic!这里是topic!这里是topic!

try{

$stomp = new Stomp($broker);

$stomp->subscribe($topic);   //订阅了一个topic类型的队列 队列名字是order

//hasFrame()方法:判断队列中是否有数据, false:队列中没有数据  true:队列中有数据

while($stomp->hasFrame() !== false)

{

$frame = $stomp->readFrame();

echo $frame->body.PHP_EOL;

$stomp->ack($frame);

usleep(5000000); //休眠5000毫秒

}

}catch(StompException $e) {

echo $e->getMessage();

}

//假如说下面还有1、2...N份代码都订阅了 /topic/order 队列,那么只要往/topic/order 发送消息后,1、2...N份代码都会同时读取到 /topic/order 队列中的内容,前提是 1、2...N份代码都在实时监听 /topic/order 队列才能收到

发布/订阅模型特点:消息是1对多的、多个消费者可以收到消息、可以重复消费消息

activemq中的事物处理$broker = 'tcp://192.168.13.119:61613';

$queue1 = '/queue/sendsms';

$queue2 = '/queue/search';

$stomp = new Stomp($broker);

$stomp->subscribe($queue);

$stomp->begin("news");

if($stomp->send($queue1, 'sendsms队列中的内容', array('transaction' => 'news')) &&

$stomp->send($queue2, 'search队列中的内容', array('transaction' => 'news'))

)

{

$stomp->commit("news");

}

//begin方法中的值"news" 可以随便填写,不过下面的transaction的值和commit方法中的值必须和begin中的值是一样的

声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

php activemq实例,php操作ActiveMQ - 小周博客,小周个人博客,程序猿小王子,技术博客,个人博客模板,php博客系统,设计模式,wzyl - 黑夜遮不住光亮...相关推荐

  1. 小黄鸭调试法-程序猿修炼之道

    什么是小黄鸭调试法 小黄鸭调试法(又称橡皮鸭调试法,黄鸭除虫法)是软件工程中使用的调试代码方法之一.此概念是参照于一个来自<程序员修炼之道>书中的一个故事.传说中程序大师随身携带一只小黄鸭 ...

  2. 如何使用java程序操作ActiveMQ

    第一步:开发activeMQ要先导入activemq-all-5.14.0.jar包,因为我创建的是maven 项目,因此需要使用maven坐标导入.如果创建的是普通java项目,则应该在lib目录下 ...

  3. activemq 实例_在一台计算机上运行多个ActiveMQ实例

    activemq 实例 几周前,我再次通过Mule ESB解决方案将Apache ActiveMQ用作JMS提供程序. 由于使用ActiveMQ已经有几年了,所以我认为最好检查一些(新)功能,例如故障 ...

  4. 在一台机器上运行多个ActiveMQ实例

    几周前,我通过Mule ESB解决方案再次开始使用Apache ActiveMQ作为JMS提供程序. 由于我使用ActiveMQ已经有几年了,所以我认为最好检查一些(新)功能,例如故障转移传输和其他群 ...

  5. JMS学习二(简单的ActiveMQ实例)

    下载安装ActiveMQ服务,下载地址当然可以去官网下载 http://activemq.apache.org/download-archives.html ActiveMQ安装很简单,下载解压后到b ...

  6. 【ActiveMQ】JMS中间件ActiveMQ详解

    1.JMS介绍 Java Message Service(JMS)是SUN提出的旨在统一各种MOM(Message-Oriented Middleware )系统接口的规范,它包含点对点(Point ...

  7. 各种小长假期必备 一周精品软件汇总windows8测试版主

    本期酷软汇与大家相约愚人节,虽然这一天我们应该开点玩笑,但手机中国向来是以厚道著称,所以本期的酷软汇我们依旧会给大家带来点硬货,毕竟马上就要迎来清明小长假了嘛.虽然在清明节,我们还有一项重要的任务,但 ...

  8. adc 接收cube_官方的stm32cube软件教程实例ADC操作代码(官方自带的,可以无视

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 官方的stm32cube软件教程实例ADC操作代码(官方自带的,可以无视),看不懂怎么用的可以等本贴吧更新图片教程,现在就是凑帖子数量,完成转职的,请谅解 ...

  9. ActiveMQ入门教程(二) - ActiveMQ的安装

    为什么80%的码农都做不了架构师?>>>    要使用ActiveMQ,当然是要下载了, 咱们 去官网下载 : http://activemq.apache.org/download ...

最新文章

  1. Android图像开源视图:SmartImageView
  2. 德鲁克《管理的实践》笔记
  3. python excel绘图-Python excel 画图
  4. 闲聊Linux内存管理(1)
  5. luogu3810 【模板】三维偏序(陌上花开)
  6. 【cudnn】cudnn 安装
  7. xtext_使用Xtext为Eclipse和IntelliJ开发DSL
  8. Eclipse 答疑:Eclipse 如何设置 Java 代码自动提示和自动补全?
  9. Elasticsearch内存
  10. 如何在Angular 10中生成QR码
  11. python基于svm的异常检测_[scikit learn]:异常检测-OneClassSVM的替代方案
  12. mfc 子窗体任何消息都不触发_你不知道的 WebSocket
  13. 程序员的故事 007 程序员是吃青春饭的
  14. 量化投资学习——多因子权重组合优化问题
  15. 走进“开源SDR实验室” 一起玩转GNU Radio:LimeSDR Source/Sink模块
  16. 应用程序无法正常启动0xc000007b解决方法
  17. Windows 2016 修改密码时提示密码不符合规则
  18. gtx660 linux驱动下载,佳能 NVIDIA GeForce GTX660 GPU 驱动程序下载-更新佳能软件(显卡)...
  19. 老师自制二维码神器“扫”学生成绩
  20. 基于情感词典的python情感分析!它居然比我还懂我女友!

热门文章

  1. 交换机工作原理,收到一个数据包后交换机是如何处理的(实验加抓包详细了解)
  2. 1、 网络营销常见单词缩写
  3. 小技巧-用Python发送邮件
  4. 5GNR RIV计算
  5. 验证码研究入门必读(验证码是什么,有什么用,分类,设计,破解,未来发展)
  6. PE制作-002.UEFI和Legacy双启动之Legacy启动
  7. Keil C51中头文件INTRINS.H的作用
  8. 怕你不信,100行极简原生html现实3D雪花飘飘动效
  9. PDF格式人工转为Excel
  10. 淘宝面试的几个算法题