龙空技术网

ActiveMQ消息中间件(一)

martianboy 375

前言:

今天大家对“pythonactivemq”大体比较注意,你们都需要知道一些“pythonactivemq”的相关文章。那么小编也在网络上收集了一些有关“pythonactivemq””的相关文章,希望我们能喜欢,看官们快快来了解一下吧!

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

JMS:Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

1 下载

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

2 支持的语言

Java,C,C ++,C#,Ruby,Perl,Python,PHP

3 应用协议

OpenWire,Stomp REST,WS Notification,XMPP,AMQP

4 应用场景及问题

5 队列名称定义

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

6 activemq+stomp协议+php demo实现

stomp,php扩展安装

下载,编译安装,然后把生成的stomp.so加入php.ini文件中

	extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/stomp.so

使用命令php -m 查看是否成功

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

	#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());	}

消费者,当检测到队列非空,就取出消息进行消费

消费有两种模式:推模式、拉模式

	#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());	}

php publisher.php

不停的向email队列里发消息

publisher

php consumer.php

队列email里的消息被消费,消费者cli打印消息内容

7 使用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

当activemq进程挂了会自动重启

supervisor

参考文档

1

2

3

标签: #pythonactivemq