一个publisher发布消息  多个个customer接受消息

1:准备工作参照:

  http://www.cnblogs.com/spicy/p/7886820.html

2,:路由:

3: 方法:”

 public function callFunc($msg) {
echo " [x] Received ", $msg->body, "\n";
if($msg->body==2){
sleep(50);
}else{
sleep($msg->body);
} // sleep(substr_count($msg->body, '.'));
echo " [x] Done", "\n"; } public function worker()
{
set_time_limit(0);
$connection = new AMQPStreamConnection('localhost', 5672, 'bitch', 'bitch');
$channel = $connection->channel();
$channel->queue_declare('hello', false, true); $receiver = new self();
#下面第四个参数如果为true表示开启确认模式,也就是消费以后会告知rabbitmq服务器该条消息已经处理完毕,这样可以方式消息处理一半挂掉了,结果服务器也删除了这条未处理完毕的消息
$channel->basic_consume('hello', '', false, true, false, false, [$receiver, 'callFunc']); while(true) {
$channel->wait();
}
$channel->close();
$connection->close();
} public function task()
{
$re = input('uid'); $connection = new AMQPStreamConnection('localhost', 5672, 'bitch', 'bitch');
$channel = $connection->channel();
$channel->queue_declare('hello', false, true); for($i=1; $i<11; $i++){
$msg = new AMQPMessage($i);
$channel->basic_publish($msg, '', 'hello');
echo "第".$i.'发送完毕';
}
$channel->close();
$connection->close();
}

4:在命令行启动三个worker

发布10条消息:

结果:

结论一: rabbitmq服务器会依次把消息分发给每个worker, 不关每个消息会执行多久

 结论二: 如果其中一个worker在执行过程中挂掉了,那么分给它的消息就丢失了,这个在下面的例子解决

解决结论二现象: 其中一个消费worker挂掉以后,分发给这个worker的消息就全部丢失掉了

第一步:

第二步:

第三步实验:启动2个worker,然后强制退出第一个,就会发现本来给worker1 的消息最后重新分发给了 worker2

  

php如何使用rabbitmq实现发布消息和消费消息(一对多)(tp框架)(第二篇)的更多相关文章

  1. php如何使用rabbitmq实现发布消息和消费消息(tp框架)(第一篇)

    1,默认已经安装好了rabbitmq: 参考 http://www.cnblogs.com/spicy/p/7017603.html 2,安装rabbitmq客户端: 方法1: pecl 扩展安装  ...

  2. java操作RabbitMQ添加队列、消费队列和三个交换机

    假设已经在服务器上安装完RabbitMQ.我写的教程 一.发送消息到队列(生产者) 新建一个maven项目,在pom.xml文件加入以下依赖 <dependencies> <depe ...

  3. 2.RABBITMQ 入门 - WINDOWS - 生产和消费消息 一个完整案例

    关于安装和配置,见上一篇 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置 公司有需求,要求使用winform开发这个东西(消息中间件),另外还要求开发一个日志中间件,但是也是要求 ...

  4. RabbitMQ 消费消息

    1, 创建一个 springboot 项目, 导入依赖(和生产者一致) 2, application.properties (基础配置和生产者一致, 消费者需要再额外配置一些) # rabbitmq ...

  5. RabbitMQ入门_05_多线程消费同一队列

    A. 多线程消费同一队列 参考资料:https://www.rabbitmq.com/tutorials/tutorial-two-java.html 消费一条消息往往比产生一条消息慢很多,为了防止消 ...

  6. rabbitMQ应用,laravel生产广播消息,springboot消费消息

    最近做一个新需求,用户发布了动态,前台需要查询,为了用户读取信息响应速度更快(MySQL很难实现或者说实现起来很慢),所以在用户动态发布成功后,利用消息机制异步构建 redis缓存 和 elastic ...

  7. SpringBoot 整合 RabbitMQ(包含三种消息确认机制以及消费端限流)

    目录 说明 生产端 消费端 说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同 ...

  8. Python操作rabbitmq系列(二):多个接收端消费消息

    今天,我们要逐步开始讨论rabbitmq稍微高级点的耍法了.了解这一步,对我们设计高并发的系统非常有用.当然,还可以使用kafka.不过还是算了,有几个硬性条件不支持,还是用rabbitmq吧. 循环 ...

  9. RabbitMQ多消费者顺序性消费消息实现

    最近起了个项目消息中心,用来中转各个系统中产生的消息,用到的是RabbitMQ,由于UAT环境.生产环境每台消费者服务都是多台,有些消息要求按顺序消费,所以需要采取一定的措施保证消息的顺序消费,下面讲 ...

随机推荐

  1. qmake-how to

    简单例子 假设已经实现如下程序: hello.cpphello.hmain.cpp 首先,使用编辑器,在上述文件目录下创建文件hello.pro.然后加入几行语句告诉qmake项目中的源文件和头文件. ...

  2. SSH整合 第二篇 工程初建

    SSH整合,第二篇. 创建工程 这里只是测试和理解hibernate.建立Java工程就好了. 1.hibernate-4.2.21.jar hibernate包下的required,即\hibern ...

  3. hdu 4995 离线处理+模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=4995 给定一维坐标下的n个点,以及每个点的权值,有m次查询,每次将查询的x点上的权值修改为离x最近的k个点权值的 ...

  4. Spring cache 缓存

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  5. java实现WC项目

    个人项目:WC   wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单 ...

  6. JAVA服务器与C#客户端的通信技术调研

    JAVA服务器与C#客户端的通信技术调研 研究背景及目的: ARPG项目的需求:需要将现有的服务器从C++的编写平台换为java语言.在对需求进行分析的过程中,发现几点需要研究实现的问题 java与c ...

  7. Python学习-1.安装Python

    到Python的官方网站 https://www.python.org/downloads/ 下载官方的安装包 https://www.python.org/ftp/python/3.4.1/pyth ...

  8. boot分区剩余空间不足

      Linux boot分区用于存放内核文件以及Linux一些启动配置文件,一般情况下分区大小为500M足够使用,如果出现空间不足的问题可以使用以下方法来解决. 查看已经安装的内核 dpkg --ge ...

  9. Gitlab搭建安装及使用中遇到的问题。

    一.CentOS7安装gitlab-ce 1.下载及安装rpm软件包. 下载RPM包 curl -LJO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ ...

  10. VS2010+Oracle11+Entity Framework4.1环境搭建及常见问题

    在微软的实体数据模型中存在四种查询方式: SQL字符串:Linq:Linq to SQL:Linq to Entity(ESQL) 对于Linq SQL目前微软虽然仍在支持,但微软已经声明不再推荐. ...