小弟最近在项目中用了rabbitmq,我的处理方式是,在各个操作方法中往队列中插入消息。单独写一个脚本,用脚本循环消费消息。测试的过程中发现,这样消耗的系统资源优点太多了,而且通过和java部门的同事聊天发现,他们能够用侦听的方式而不是轮询的方式来处罚消费。可是我在网上搜了很久都没找到,请教大神们,有没有能够触发消费的方式,而不是脚本轮询?
多谢大家

解决方案 »

  1.   

    java 与RabbitMQ 也是通过类型socket 的方式请求: http://blog.163.com/guohuan88328@126/blog/static/69430778201381551841433/
    java 对于多线程处理肯定比php强,所以瓶颈:php 大部分处理在cpu,而java 大部分在于内存 。php在RabbitMQ使用目前只能用脚本循环来消费消息,当然应该还有其他方式。php想要到达最优,消费端需要降低处理业务所消耗的时间减少对cpu压力,
    能做异步的就做异步,
    能做分布式计算的就做分布式计算
      

  2.   

    rabbitmq 应该也可以自己实现一个生产者消费者模式的队列吧。比如你可以轮询去消费队列, 当队列中没有数据的时候消费者就阻塞住。当有新的数据进入时,提醒一下消费者。
      

  3.   

    对啊,我现在用的就是轮询加阻塞。问题在于这种还是需要定时去请求队列,而我想要做的是,由rabbitmq在有消息的时候主动推送到消费者,这样就不需要轮询
      

  4.   

    php只能开一个进程轮询问
    例如 
    do.php<?php
    while(1){
    // 出队处理
    }
    ?>
    然后在cli模式下执行 php do.php 2>&1 &
    就可以了
      

  5.   

    我们目前是实用 luwak 进行消息代理。实质上就是定时任务触发PHP脚本,当PHP脚本查询到 mq 中存在数据,则进行后续处理,不存在则直接结束。luwak 当未发现数据时 3秒一次触发  当有数据则 1秒一次触发,这个可也自行配置,好像是支持毫秒级的。