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 治理后盾
默认账号:guest
明码:guest
我这里用的是 php thinkphp6 框架
用 compose 解决依赖治理
composer require php-amqplib/php-amqplib
Rabbit 外面有几个概念须要先理解的
生产者:发送音讯端
消费者:音讯生产端
信通:信道是生产消费者与 rabbit 通信的渠道,生产者 publish 或是消费者 subscribe 一个队列都是通过信道来通信的。
信道是建设在 TCP 连贯上的虚构连贯,就是说 rabbitmq 在一条 TCP 上建设成千盈百个信道来达到多个线程解决,这个 TCP 被多个线程共享,每个线程对应一个信道,信道在 rabbit 都有惟一的 ID , 保障了信道公有性,对应上惟一的线程应用。
RabbitMQ 为什么须要信道?为什么不是 TCP 间接通信?
- TCP 的创立和销毁,开销大,创立须要三次握手,销毁须要四次离别
- 如果不应用信道,那么援用程序就会应用 TCP 的形式连贯到 rabbitmq,顶峰时每秒成千上万条连贯会造成资源的微小节约(一条 tcp 耗费资源,成千上万的 tcp 会十分耗费资源),而且操作系统每秒解决 TCP 连贯数量也是无限的,必定会造成性能瓶颈
3. 信道的原理是一条线程一条信道,多条线程多条信道独特应用一条 TCP 连贯。一条 TCP 连贯能够包容有限的信道,及时每秒造成成千上万的申请也不会造成性能瓶颈
这里咱们先实现简略的 hello world 模式
实现生产者:
实现消费者:
运行消费者脚本
申请生产者连贯
此时消费者脚本打印消息: