php通过stomp调用activemq

因为php的stomp扩展需要php5.2.2以上的版本,为了方便直接rpm安装了(之前用php5.4.6通过phpize的方法怎么也装不上不知道是不是版本兼容性问题)系统centos6.5 x64,所安装php版本为5.3.3,stomp版本为1.0.5

1、安装php和stomp扩展
yum install php php-devel php-pear openssl openssl-devel
pecl install stomp

安装好之后通过命令php -i|grep -i stomp看是否有信息输入,如下:
Stomp
Stomp => enabled
stomp.default_broker => tcp://localhost:61613 => tcp://localhost:61613
stomp.default_connection_timeout_sec => 2 => 2
stomp.default_connection_timeout_usec => 0 => 0
stomp.default_read_timeout_sec => 2 => 2
stomp.default_read_timeout_usec => 0 => 0

2、activemq在配置文件activemq.xml的"transportConnectors"节点增加以下内容,重启生效;
<transportConnector name="stomp" uri="stomp://localhost:61613"/>

nestat -ntlp 查看61613端口是否监听

3、生产端和消费端示例代码

生产端producer.php

<?php
 
$queue  = '/topic/phptest';
$msg    = 'bar';
print_r($argv);
$msg = $argv[1];
 
try {
    $stomp = new Stomp('tcp://localhost: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
 
$queue  = '/topic/phptest';
 
try {
    $stomp = new Stomp('tcp://localhost: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);
           }
//       sleep(1);
       }
       else {
           print "No frames to read\n";
       }
    }
} catch(StompException $e) {
    die('Connection failed: ' . $e->getMessage());
}
 
?>

通过执行 php producer.php 和 php consumer.php来进行mq消息存取。

参考地址:http://www.supertom.com/code/activemq-php-stomp-quickstart.html

通过phpize安装扩展的方法可参考:http://xukaizijian.blog.163.com/blog/static/170433119201168105155472/