activemq
来源:互联网 发布:网络平台招商加盟 编辑:程序博客网 时间:2024/05/21 18:39
假设你喜欢用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
- ActiveMQ
- ACtiveMQ
- ACtiveMQ
- activeMQ
- ActiveMQ
- activeMQ
- activeMQ
- activemq
- ActiveMQ
- ActiveMQ
- ActiveMQ
- ActiveMQ
- activeMQ
- activemq
- ActiveMQ
- ActiveMQ
- ActiveMQ
- ActiveMQ
- Java String中若干问题
- 集合中的其他类
- 使用Ruby On Rails15分钟打造一个博客系统
- struct的内存对齐方式
- Android中使用Makefile编译程序和库的方法
- activemq
- linux驱动ioctl
- 2013杭州站C - Zhuge Liang's Password(模拟)
- Basic Calculator II
- unix学习笔记------套接字-----王保明老师的笔记
- iOS巅峰之键盘回收方法
- c语言之野指针理解
- 动态显示文件名之ListView
- iOS开发-Certificates、Identifiers和Profiles详解