ActiveMQ的PHP、Python客

2023-01-31 05:01:26 python php activemq

ActiveMQ这款开源消息服务器提供了多语言支持,除了一般的Java客户端以外,还可以使用C/C++PHPpythonjavascriptajax)等语言开发客户端。最近由于项目需要,需要提供phpPython的主题订阅客户端。这里作为总结,列出这两种语言客户端的简单安装和使用。

对于PHP和Python,可以通过使用STOMP协议与消息服务器进行通讯。在ActiveMQ的配置文件activemq.xml中,需要添加以下语句,来提供基于STOMP协议的连接器。

  1. <transportConnectors> 
  2.     <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/> 
  3.     <transportConnector name="stomp" uri="stomp://0.0.0.0:61613"/><!--添加stomp连接器--> 
  4. </transportConnectors> 

Python
安装Python27,并安装stomppy(Http://code.Google.com/p/stomppy/)这一客户端库:

基于stomppy访问ActiveMQ的Python代码:

  1. import time, sys 
  2. import stomp 
  3.  
  4. #消息侦听器 
  5. class MyListener(object): 
  6.     def on_error(self, headers, message): 
  7.         print 'received an error %s' % message 
  8.  
  9.     def on_message(self, headers, message): 
  10.         print '%s' % message 
  11.          
  12. #创建连接 
  13. conn = stomp.Connection([('127.0.0.1',61613)]) 
  14.  
  15. #设置消息侦听器 
  16. conn.set_listener('', MyListener()) 
  17.  
  18. #启动连接 
  19. conn.start() 
  20. conn.connect() 
  21.  
  22. #订阅主题,并采用消息自动确认机制 
  23. conn.subscribe(destination='/topic/all_news', ack='auto') 

PHP

安装PHP5,并安装STOMP的客户端库(http://php.net/manual/zh/book.stomp.php):

tar -zxf stomp-1.0.5.tgz
cd stomp-1.0.5/
/usr/local/php/bin/phpize
./configure --enable-stomp --with-php-config=/usr/local/php/bin/php-config
make
make install

安装完成后,将生成的stomp.so移入php.ini中指定的extension_dir目录下,并在php.ini中添加该客户端库:

extension=stomp.so

访问ActiveMQ的PHP代码:

  1. <?php 
  2.  
  3. $topic  = '/topic/all_news'; 
  4.  
  5.  
  6. try { 
  7.     $stomp = new Stomp('tcp://127.0.0.1:61613'); 
  8. } catch(StompException $e) { 
  9.     die('Connection failed: ' . $e->getMessage()); 
  10.  
  11.  
  12. $stomp->subscribe($topic); 
  13.  
  14.  
  15. while(true) { 
  16.         $frame = $stomp->readFrame(); 
  17.          
  18.         if ($frame != null) { 
  19.             echo $frame->body; 
  20.  
  21.              
  22.             $stomp->ack($frame); 
  23.         } 
  24.  
  25.  
  26. unset($stomp); 
  27.  
  28. ?> 

 

相关文章