PHP和ActiveMQ集成
来源:互联网 发布:蓝鸥unity3d培训多少钱 编辑:程序博客网 时间:2024/05/01 11:38
假设你喜欢用PHP构建WEB应用,然后还有一些外围的应用,包括移动终端APP,mobile web等,
由于mobile app等是非PHP语言所编写如ObjectiveC、Java等,然后你想在这些客户端应用程序之间共享某些基础服务,
希望这些基础服务以一种松耦合,高扩展性,高性能的方式来提供,那么一个比较好的解决方案是使用跨平台的消息中间件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 一书。
参考资料:
Apache ActiveMQ - Enterprise messaging in actionstomp进阶说明-prefetchSize、ack header
ActiveMQ extensions to Stomp
stomping-with-php-intergration-with-activemq
- PHP和ActiveMQ集成
- ActiveMQ和spring集成
- Spring 和activemq集成
- Spring JMS和ActiveMQ集成
- activeMq集成
- activeMQ和spring集成的配置文件讲解
- ActiveMQ(二) ActiveMQ + spring 集成
- php activemq
- ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志
- Spring集成ActiveMQ配置
- Spring集成ActiveMQ配置
- spring activemq集成封装
- activemq serviceMix集成学习
- Spring集成ActiveMQ
- Spring集成ActiveMQ
- Tomcat集成ActiveMQ
- Spring集成ActiveMQ
- Spring集成ActiveMQ
- ubuntu 安装qq2012
- ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)
- 递归实现打靶问题
- GetWindowRect和GetClientRect的使用对比
- Fab CEO:创办四家公司教给我的90件事
- PHP和ActiveMQ集成
- 黑莓9900 只能用WIFI登录qq 不能用手机网络登录qq
- oracle查询所有表名
- LeetCode: Minimum Window Substring
- 修改网页编码出现的问题
- android之使用get和post方式向服务器提交请求
- hdu~2795~线段树
- MyEclipse连接数据库异常解决
- XML(1)