首页 > 编程 > PHP > 正文

PHP和ActiveMQ集成

2020-03-22 16:59:47
字体:
来源:转载
供稿:网友
  • 假设你喜欢用PHP构建WEB应用,然后还有一些外围的应用,包括移动终端APP,mobile web等,由于mobile app等是非PHP语言所编写如ObjectiveC、Java等,然后你想在这些客户端html' target='_blank'>应用程序之间共享某些基础服务,希望这些基础服务以一种松耦合,高扩展性,高性能的方式来提供,那么一个比较好的解决方案是使用跨平台的消息中间件ActiveMQ。

    对于PHP客户端而言,要使用ActiveMQ,可以使用两种方式,一种是rest方式(基于HTTP),一种是借助Stomp:

    http://en.wikipedia.org/wiki/Streaming_Text_Orientated_Messaging_Protocol

    基于rest是无状态的,而基于Stomp则要求保持连接(Stomp基于TCP协议)。

    基于rest方式,可阅读如下链接,本文不做详解:

    http://activemq.apache.org/rest.html

    下面具体示例PHP如何使用Stomp:


    //send a message to the queue function sendMQ($data) {     $link = openMQ();     foreach ($data as $pitem) {         //使用 persistent message         $result = stomp_send($link, $amq['queue'], $pitem, array("persistent" => "true"));         if (FALSE === $result) {             //do something         }     } }    //receive message function receiveMQ() {     $link = openMQ($queue);     stomp_subscribe($link, $queue);        while (1) {         if (TRUE === stomp_has_frame($link)) {             $frame = stomp_read_frame($link);                if (FALSE !== $frame) {                 stomp_ack($link, $frame['headers']['message-id']);             } else {                 //do something                 break;             }         } else {             break;         }     }     stomp_unsubscribe($link, $queue);     stomp_close($link); }    //connection ActiveMQ function openMQ(&$queue=FALSE) {     $amq = array(         'url' => 'tcp://127.0.0.1:61613',         'id' => 'xxx',         'pswd' => 'xxx',         'queue' => '/queue/mytest',         'enable' => TRUE     );     $link = stomp_connect($amq['url'], $amq['id'], $amq['pswd']);     if (!$link) {         die("Can't connect MQ !!");     } else {         return $link;     } } 

    注意Stomp读取方需要调整prefetchSize,如下:

    stomp_subscribe($link, $queue, array("activemq.prefetchSize" => 1000));

    否则可能会发现读取消息非常缓慢。prefetchSize字段含义如下:

    Specifies the maximum number of pending messages that will be dispatched to the client.

    Once this maximum is reached no more messages are dispatched until the client acknowledges a message.

    Set to 1 for very fair distribution of messages across consumers where processing messages can be slow.

    详细原因可仔细阅读:ActiveMQ In Action 一书。

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表