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模式
实现生产者:
实现消费者:
运行消费者脚本
申请生产者连贯
此时消费者脚本打印消息: