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

一个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框架)(第二篇)的更多相关文章
- php如何使用rabbitmq实现发布消息和消费消息(tp框架)(第一篇)
1,默认已经安装好了rabbitmq: 参考 http://www.cnblogs.com/spicy/p/7017603.html 2,安装rabbitmq客户端: 方法1: pecl 扩展安装 ...
- java操作RabbitMQ添加队列、消费队列和三个交换机
假设已经在服务器上安装完RabbitMQ.我写的教程 一.发送消息到队列(生产者) 新建一个maven项目,在pom.xml文件加入以下依赖 <dependencies> <depe ...
- 2.RABBITMQ 入门 - WINDOWS - 生产和消费消息 一个完整案例
关于安装和配置,见上一篇 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置 公司有需求,要求使用winform开发这个东西(消息中间件),另外还要求开发一个日志中间件,但是也是要求 ...
- RabbitMQ 消费消息
1, 创建一个 springboot 项目, 导入依赖(和生产者一致) 2, application.properties (基础配置和生产者一致, 消费者需要再额外配置一些) # rabbitmq ...
- RabbitMQ入门_05_多线程消费同一队列
A. 多线程消费同一队列 参考资料:https://www.rabbitmq.com/tutorials/tutorial-two-java.html 消费一条消息往往比产生一条消息慢很多,为了防止消 ...
- rabbitMQ应用,laravel生产广播消息,springboot消费消息
最近做一个新需求,用户发布了动态,前台需要查询,为了用户读取信息响应速度更快(MySQL很难实现或者说实现起来很慢),所以在用户动态发布成功后,利用消息机制异步构建 redis缓存 和 elastic ...
- SpringBoot 整合 RabbitMQ(包含三种消息确认机制以及消费端限流)
目录 说明 生产端 消费端 说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同 ...
- Python操作rabbitmq系列(二):多个接收端消费消息
今天,我们要逐步开始讨论rabbitmq稍微高级点的耍法了.了解这一步,对我们设计高并发的系统非常有用.当然,还可以使用kafka.不过还是算了,有几个硬性条件不支持,还是用rabbitmq吧. 循环 ...
- RabbitMQ多消费者顺序性消费消息实现
最近起了个项目消息中心,用来中转各个系统中产生的消息,用到的是RabbitMQ,由于UAT环境.生产环境每台消费者服务都是多台,有些消息要求按顺序消费,所以需要采取一定的措施保证消息的顺序消费,下面讲 ...
随机推荐
- @Autowired 和 @Qualifier
一 无冲突 bean工厂 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 休息,考完了MCSD
终于考完了~这次的证书签名居然还是鲍尔默的.
- Windows10+Python3下安装NumPy+SciPy+Matplotlib
Numpy.SciPy.MatplotLib是Python下从事科学计算必不可少的库.我在用其他的方法安装时出现各种问题,发现直接安装.whl包是最快且不报错的方法. 1.下载.whl包在下面的网站中 ...
- Visual C++中的ADO编程
摘 要:本文介绍了微软推出的以ActiveX技术为基础的ADO数据存取技术,分析了ADO的工作原理,并用Visual C++说明了ADO数据访问技术的实现方法. 关键字:ADO:连接对象:OLE D ...
- (转)mmap和shm共享内存的区别和联系
共享内存的创建 根据理论: 1. 共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制.共享内存可以通过mmap()映射普通文件 (特殊情况下还可以采用 ...
- 一个CTO谈自己的技术架构体系
理解算法背后的世界观 我比较擅长的领域可能是数据和架构两个方面吧. 大数据方面就是数据挖掘.数据分析等领域,我现在带着极光推送整个的数据团队,需要把握数据团队的技术方向,还需要做很多算法方面的研究. ...
- Jack Clark 的几句名言
Grateful for everything; entitled to nothing. 沒有任何事情是你不该感激的:沒有任何东西是你该派得到的. Leadership is the ability ...
- 一起学习MVC(1)初步了解MVC
MVC 即模型视图控制器(Model View Controller) 利于团队开发.便于管理与维护.代码易读性强.未来的主流开发框架结构. 当然,缺点也显而易见,与传统开发框架相比有很大的不 ...
- Checkpoint--在Tempdb上的特殊性
由于Checkpoint的目的是为减少数据库恢复时间,而每次实例重启都会创建新的tempdb,而不需要恢复,因此checkpoint在Tempdb上行为与其他用户数据库上略微不同. 1. 系统引发的c ...
- Newtonsoft.Json日常用法
原文链接:https://www.cnblogs.com/ZengJiaLin/p/9578794.html