php是怎么监控Activemq队列的?

有点雾水,有点懵b,php这种东西怎么能实时监控Activemq 消息队列的。php不是在网页中执行的嘛?怎么能一直待在那接收消息啥的。

我想了想,是不是这样的?

cmd弹出个dos窗口,然后php用命令行模式执行,搞个死循环,就一直在那轮询,看队列有没有消息,有就执行处理。

是不是这样的。

如果整个是这样,整个逻辑是不是这样的?

有个场景,用户购买产品,48小时,不确认,就自动默认好评。或者滴滴用户坐车,下车后48小时,不评价司机,默认好评。

第一步:1、php接收用户输入的购买产品参数,处理后,写入数据库订单表,形成订单。
第二步:2、用户支付->卖家发货。
第三步:3、发货的同时,把发货时间距离48小时后的秒数,还有订单id,插入消息队列。

这时候,整个web处理流程完成了。

然后我在,cmd窗口,执行一个php订单超时文件,这个文件,就在那一直循环啊,循环啊,轮询看消息队列。例如,5秒,看一次,有没有倒计时是0的过期订单,有就拿出来,把订单状态更改为 已确认。

到这整个流程就完事了。

是不是这个样子。暂时就这样理解的,对不对呢?

如果是这样的,那么好处就是,不用扫表了,改成了扫内存。因为内存快,所以比直接扫表要效率高。

或者,监控程序,用java做一个,也是像php那种循环轮询。

或者干脆做一个winform窗口文件,做同样的事情监控、执行任务。

这么理解对不对?

阅读 2.4k
4 个回答

为什么要那么高的实时性?5s?

那换个思路,每个订单发货后都存进 Redis,然后如果买家评论了,那就从 Redis 中拿掉,如果没有就每次都从队里里面拿,比对时间,处理完了之后就从 Redis 中拿掉。最好是能根据时间段进行分段存储,更高效率的执行。

其次 类似与这种需求,完全没必要做到实时,使用任务计划在每天凌晨执行一次就行了。

个人感觉这个用crontab就可以了,一分钟一次,查询发货时间距离当前时间已经超过48小时并且没有被评价的订单,然后去做你要的默认评价操作就行。

写一个PHP脚本
while (true) {
    $result = $queue->get();
    if ($result) {
        //todo something
    } else {
        sleep(3);
    }
}

在cli模式下运行,如果想常驻后台.可搭配supervisor.
这种方式,就实时性而言,个人认为比crontab,要好点

开启一个进程用supervisor监听就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题