当前位置: 首页 > 后端技术 > PHP

php-Rabbit简单队列实现

时间:2023-03-29 16:08:22 PHP

RabbitMQ介绍RabbitMQ是一个开源的消息代理和队列服务器,用于通过通用协议在完全不同的应用程序之间共享数据,或者简单地对分布式服务器处理的作业进行排队。1.安装RabbitMQ我是用docker安装dockerrun-d--namesome-rabbit-p5672:5672-p15672:5672-eRABBITMQ_DEFAULT_USER=user-eRABBITMQ_DEFAULT_PASS=passwordrabbitmq:3-management运行后可以进入http://localhost:15672登录RabbitMQweb管理后台默认账号:guest密码:guest我使用phpthinkphp6框架,使用compose解决依赖管理composerrequirephp-amqplib/php-amqplibRabbit中有几个概念,首先需要了解Producer:发送消息consumer:消息consumercommunication:channel是producer和rabbit之间的通讯通道,producer发布或者consumer订阅一个queue通过channel进行通讯。通道是建立在一个TCP连接上的虚拟连接,也就是说rabbitmq在一个TCP上建立了上百个通道来实现多线程处理。这个TCP是多个线程共享的,每个线程对应一个channel。通道在rabbit中每一个都有唯一的ID,保证了通道的隐私性,对应唯一线程的使用。为什么RabbitMQ需要通道?为什么不用TCP直接通信?TCP的创建和销毁是昂贵的。创造需要三次握手,破坏需要四次分手。如果不使用通道,参考程序将使用TCP连接到rabbitmq。高峰时每秒几千个连接会造成资源的巨大浪费(一个tcp消耗资源,几千个tcp会消耗资源),而且操作系统每秒处理的TCP连接数也是有限的,这肯定会造成性能瓶颈。3、通道的原则是一个线程一个通道,多个线程多个通道共享一个TCP连接。一个TCP连接可以容纳无限的通道,即使每秒发出数千个请求也不会造成性能瓶颈这里我们先实现一个简单的helloworld模式实现生产者:实现消费者:运行消费者脚本请求生产者connection此时消费者脚本打印消息: