ActiveMQ消息中间件

  ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现
  JMS:Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

一、安装
下载apache-activemq-5.0.0.tar.gz
tar zxvf apache-activemq-5.0.0.tar.gz
cd 到bin下执行 ./activemq start

61616是给java用的tcp端口
8161是后台管理端口
activemq
二、支持的语言
Java,C,C ++,C#,Ruby,Perl,Python,PHP

三、应用协议
OpenWire,Stomp REST,WS Notification,XMPP,AMQP

四、应用场景及问题
https://blog.csdn.net/dly1580854879/article/details/68486367

五、队列名称定义

/queue/email,对应后台管理页面的email队列
/topic/query

六、activemq+stomp协议+php实现
stomp,php扩展安装
下载,编译安装,然后把生成的stomp.so加入php.ini文件中
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/stomp.so
使用命令php -m 查看是否成功

生产者,不断的向队列投递消息

#publisher.php
<?php

date_default_timezone_set('Asia/Shanghai');

$queue  = '/queue/email';
$msg    = 'bar';
 
try {
    $stomp = new Stomp('tcp://10.16.77.246:61613');
 
    while (true) {
      $stomp->send($queue, $msg." ". date("Y-m-d H:i:s"));
      sleep(1);
    }
 
} catch(StompException $e) {
    die('Connection failed: ' . $e->getMessage());
}

消费者,当检测到队列非空,就取出消息进行消费
消费有两种模式:推模式、拉模式

#consumer.php
<?php
date_default_timezone_set('Asia/Shanghai');

$queue  = '/queue/email';
 
try {
    $stomp = new Stomp('tcp://10.16.77.246:61613');
    $stomp->subscribe($queue);
 
    while (true) {
       if ($stomp->hasFrame()) {
           $frame = $stomp->readFrame();
           if ($frame != NULL) {
               print "Received: " . $frame->body . " - time now is " . date("Y-m-d H:i:s"). "\n";
               $stomp->ack($frame);
           }
       } else {
           print "No frames to read\n";
       }
    }
 
} catch(StompException $e) {
    die('Connection failed: ' . $e->getMessage());
}

php publisher.php
可以看到有消息进入email队列
publisher
php consumer.php
可以看到email队列中的消息被消费了
consumer1
consumer

七、使用supervisor监控activemq

[program:activemq]
command=/var/www/softwares/activemq/bin/activemq
;pprocess_name=%(program_name)s_%(process_num)02d
process_name=%(program_name)s
numprocs=1
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
startsecs=1

supervisor
当activemq进程挂了会自动重启。
后续讲一些关于activemq相关的一些高级应用,以前如要使用的是rabbitmq,不过了解过后,消息中间件本质上是相似的。欢迎一起讨论学习。

参考文档
1 http://activemq.apache.org/
2 http://php.net/manual/zh/book.stomp.php
3 https://blog.csdn.net/dly1580854879/article/details/68486367

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值