php实战RabbitMQ一(RabbitMQ介绍)
什么是消息队列【小白必看】
emmmm,举个大栗子。
比如我今天加班,给我儿子在家留了个纸条,让他记得干几件事。
- 记得吃饭
- 记得锁门
- 记得去学校后带爸爸问英语老师好[^ 0 ^]
然后我可爱的儿子根据我的留言干完了所有事情,嘎嘎嘎~~~~
例子解读
纸条 : 消息队列中间件,此处便可当作RabbitMQ。
我 : 咳咳~~~也就是爸爸,就是消息生产者。
我儿子 : 消息的消费者。
总结: 消息生产者通过消息队列让消息消费者去做事。
消息队列的由来
- 分布式系统已成为当前系统架构的主流,而消息队列在分布式系统中作为消息中间件,能为分布式系统中各个应用提供会话平台,比如连接php与go语言。
- 使用多进程异步操作取代单进程同步操作,从而满足高性能系统架构需求。比如在上面的故事中,我的儿子看着纸条将事情都做了,我可以在这期间干其它的事情,提高工作效率。
- 可以防止服务器一下子做很多事情,消息队列采用队列的形式,消费者读取队列里面的消息的时候是一条一条的读取,服务器不会超负载。比如在故事中,儿子一条一条看完,一件一件事情干。
消息队列的概念
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。
消息队列的种类
目前使用较多的消息队列有ActiveMQ、Redis的liest和订阅、ZeroMQ、kafka、RockerMQ,在这个重点介绍应用较广泛部署较容易的一种ReabbitMQ。
RabbitMQ的AMQP协议
RabbitMQ采用了AMQP协议,即(Advanced Message Queuing Protocol),一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
基于此协议的客户端与消息中间件可传递消息,并且不受产品、开发语言等条件限制。
AMQP基本组成及基本概念
流程:生产者(Producer)生产具有指定路由键(Routing Key)的的消息将其发布给消息代理(Broker,此处为RabbitMQ)中的交换机(Exchange),交换机将消息中的路由键与队列(Queue)绑定(Binding)信息到存储的路由键对比,将消息路由到匹配的队列中。队列再将信息通过连接(Connection)中的通道(Channel)推送给订阅了消息的消费者(Consumer)。
- 生产者(Producer):发送消息的应用。
- 消费者(Consumer):接受消息的应用。
- 消息代理(Broker):代理的职能就是接收发布者发布的消息并将消息推送给订阅了消息的消费者。rabbitmq就相当于一个代理。
- 队列(Quere):存储消息的缓存,一个队列存储多条消息。
- 消息(Message):由生产者通过RabbitMQ发送给消费者的信息。
- 连接(Connection):上图中收发消息前都必须建立连接,在这里是连接RabbitMQ和应用服务器的TCP连接。
- 通道(Channel):通过消息队列收发消息,都是通过通道完成。
- 交换机(Exchange):生产者先将消息发送到交换机,再由交换机发送到队列里面,并最终保存在队列里面。
- 绑定(Binding):是队列与交换机的关联连接。
- 路由键(Routing Key):提供交换机查看并根据路由键来决定如何分发消息到队列的一个键,可以认为是消息的目的地址。
- 用户(Users):RabbitMQ可以通过账号密码连接,每个用户拥有不同权限。