php下rabbitmq怎么实现消费者自动触发

lilihuyu2010 2016-11-04 04:17:44
小弟最近在项目中用了rabbitmq,我的处理方式是,在各个操作方法中往队列中插入消息。单独写一个脚本,用脚本循环消费消息。测试的过程中发现,这样消耗的系统资源优点太多了,而且通过和java部门的同事聊天发现,他们能够用侦听的方式而不是轮询的方式来处罚消费。可是我在网上搜了很久都没找到,请教大神们,有没有能够触发消费的方式,而不是脚本轮询?
多谢大家
...全文
1567 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mattoids 2018-08-01
  • 打赏
  • 举报
回复
我们目前是实用 luwak 进行消息代理。

实质上就是定时任务触发PHP脚本,当PHP脚本查询到 mq 中存在数据,则进行后续处理,不存在则直接结束。

luwak 当未发现数据时 3秒一次触发 当有数据则 1秒一次触发,这个可也自行配置,好像是支持毫秒级的。
傲雪星枫 2016-11-04
  • 打赏
  • 举报
回复
php只能开一个进程轮询问 例如 do.php

<?php
while(1){
// 出队处理
}
?>
然后在cli模式下执行 php do.php 2>&1 & 就可以了
lilihuyu2010 2016-11-04
  • 打赏
  • 举报
回复
引用 3 楼 ivyvae 的回复:
rabbitmq 应该也可以自己实现一个生产者消费者模式的队列吧。比如你可以轮询去消费队列, 当队列中没有数据的时候消费者就阻塞住。当有新的数据进入时,提醒一下消费者。
对啊,我现在用的就是轮询加阻塞。问题在于这种还是需要定时去请求队列,而我想要做的是,由rabbitmq在有消息的时候主动推送到消费者,这样就不需要轮询
lilihuyu2010 2016-11-04
  • 打赏
  • 举报
回复
引用 2 楼 ihefe 的回复:
java 与RabbitMQ 也是通过类型socket 的方式请求: http://blog.163.com/guohuan88328@126/blog/static/69430778201381551841433/ java 对于多线程处理肯定比php强,所以瓶颈:php 大部分处理在cpu,而java 大部分在于内存 。 php在RabbitMQ使用目前只能用脚本循环来消费消息,当然应该还有其他方式。 php想要到达最优,消费端需要降低处理业务所消耗的时间减少对cpu压力, 能做异步的就做异步, 能做分布式计算的就做分布式计算
现在的问题就在于此,我比较不喜欢轮询的方式,这样确实对服务器压力太大了。如果有一种触发模式就能够省很多事
风吹得好舒服 2016-11-04
  • 打赏
  • 举报
回复
rabbitmq 应该也可以自己实现一个生产者消费者模式的队列吧。比如你可以轮询去消费队列, 当队列中没有数据的时候消费者就阻塞住。当有新的数据进入时,提醒一下消费者。
ihefe 2016-11-04
  • 打赏
  • 举报
回复
java 与RabbitMQ 也是通过类型socket 的方式请求: http://blog.163.com/guohuan88328@126/blog/static/69430778201381551841433/ java 对于多线程处理肯定比php强,所以瓶颈:php 大部分处理在cpu,而java 大部分在于内存 。 php在RabbitMQ使用目前只能用脚本循环来消费消息,当然应该还有其他方式。 php想要到达最优,消费端需要降低处理业务所消耗的时间减少对cpu压力, 能做异步的就做异步, 能做分布式计算的就做分布式计算
xuzuning 2016-11-04
  • 打赏
  • 举报
回复
没用过,不知道

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧