php-Rabbit简单队列实现

RabbitMQ介绍


RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,或者简单的将作业排队以便让分布式服务器进行处理。

1.安装RabbitMQ
我这里使用的是docker安装

docker run -d  --name some-rabbit -p 5672:5672 -p 15672:5672 -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management

运行后可输入http://localhost:15672登录RabbitMQ web管理后台
php-Rabbit简单队列实现_第1张图片
默认账号:guest
密码:guest
php-Rabbit简单队列实现_第2张图片
我这里用的是php thinkphp6框架
用compose解决依赖管理

composer require php-amqplib/php-amqplib

Rabbit里面有几个概念需要先了解的
生产者:发送消息端
消费者:消息消费端
信通:信道是生产消费者与rabbit通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。

信道是建立在TCP连接上的虚拟连接,就是说rabbitmq在一条TCP上建立成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID ,保证了信道私有性,对应上唯一的线程使用。

RabbitMQ 为什么需要信道?为什么不是TCP直接通信?

  1. TCP的创建和销毁,开销大,创建需要三次握手,销毁需要四次分手
  2. 如果不使用信道,那么引用程序就会使用TCP的方式连接到rabbitmq,高峰时每秒成千上万条连接会造成资源的巨大浪费(一条tcp消耗资源,成千上万的tcp会非常消耗资源),而且操作系统每秒处理TCP连接数量也是有限的,必定会造成性能瓶颈

3.信道的原理是一条线程一条信道,多条线程多条信道共同使用一条TCP连接。一条TCP连接可以容纳无限的信道,及时每秒造成成千上万的请求也不会造成性能瓶颈

这里我们先实现简单的hello world模式
实现生产者:
php-Rabbit简单队列实现_第3张图片
实现消费者:
php-Rabbit简单队列实现_第4张图片
运行消费者脚本
php-Rabbit简单队列实现_第5张图片
请求生产者连接
此时消费者脚本打印消息:
php-Rabbit简单队列实现_第6张图片

你可能感兴趣的:(php)