初始RabbitMQ
RabbitMq 项目开源地址:https://gitee.com/zyyx2020_zhangsan/mq-test.git
1.Message Queue(MQ)
- 消息队列(Message Queue),是一种跨进程的通信机制,用于上下游传递消息
- MQ作为消息中间件,最主要的作用系统之间的信息传递进行"解耦",MQ是数据可靠性的重要保障
- List item
2.什么是RabbitMQ
- RabbitMQ是全世界最火的开源消息代理服务器,在全世界拥有超过35000个项目部署在RabbitMQ
- RabbitMQ支持几乎所有的操作系统与编程语言。
- Rabbit提供了高并发、高可用的成熟方案,支持多种消息协议,易于部署与使用。
- 官文文档地址:https://www.rabbitmq.com/
3.RabbitMQ与其他MQ的对比
4. RabbitMQ的应用场景
- 异构系统的数据传递
- 高并发程序的流量控制
- 基于P2P,P2PPP的程序
- 分布式系统的事务一致性TCC
- 高可靠性的交易系统
5. RabbitMQ使用Erlang开发
- Erlang(['e:laen])是一种通用的面同开友的拥任后日,Erlang是一个结构化,动态类型编程语言,内建并行计算支持。
- 使用Erlang来编写分布式应用要简单的多,Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。
6. AMQP
- AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
7.MQ的基本概念
- Producer:生产者,消息的提供者
- Consumer:消费者,消息的使用者
- Message:消息,程序间的通信的数据
- Queue:队列,消息存放的容器,消息先进先出
- Vhost:虚拟主机,相当于MQ的“数据库” 用于存储队列
8.消息的状态
- Ready
- 消息已被送入队列等到消费
- Unacked
- 消息已经被消费者认领,但还未被确认已被消费
- Unacked状态下,消费者断开连接则消息回到Ready
- 没有确认,客户有没有断开连接,则一直处于Unacked
- Finished
- 调用basicAck()方法后,表示已被消费,从队列中移除
9.RabbitMQ六种工作模式
9.1 Work Queue 工作队列
- 在多个消息的情况下,Work Queue 会将消息分派给不同的消费者,每个消费者都会接收到不同的消息,并且可以根据处理消息的速度来接收消息的数量,进而让消费者程序发挥最大性能
- Work Queue特别适合在集群环境中做异步处理,能最大发挥每一台服务器的性能
9.2 发布(Publish)订阅(Subscribe)模式
- 发布/订阅模式中,生产者不再直接与队列绑定,而是将数据发送至“交换机Exchange”
- 交换机Exchange用于将数据按某种规则送入与之绑定的队列,进而供消费者使用
- 发布/订阅模式中,交换机将无差别的将所有消息送入与之绑定的队列,所有消费者拿到的消息完全相同,交换机的类型被称为fanout。
9.3 路由Routing模式
- 路由(Routing)模式是在发布订阅模式基础上的编制弄
- 发布订阅模式是无条件将所有消息分发给所有消费者队列
- 路由模式则是交换机根据Routing Key有条件的将数据筛选后发给消费者队列
- 路由模式下交换机的类型被称为direct
9.4 主题Topic模式
- 主题Topic模式是在Rounting模式基础上提供了对RouteKey模糊匹配的功能,可以简化程序的编写
- 主题模式下,模糊匹配表达式规则为
- *匹配单个关键字
- #匹配所有关键字
- 主题模式下交换机的类型被称为topic
10.RabbitMQ消息确认机制
- RabbitMQ在传递消息的过程中充当了代理人(Broker)的角色,那生产者(Pooducer)怎样知道消息被正确投递到Broker了呢
- RabbitMQ提供了监听器(Listener)来接收消息投递的状态。
- 消息确认涉及两种状态:Confrim与 Return
10.1 Confirm&Return
- Confirm代表生产者将消息送到Broker时产生的状态,后续会出现两种情况
- ack 代表Broker已经将数据接收
- nack 代表Broker拒收消息,原因有很多种,队列已满、限流、IO异常
- Retuen代表消息被Broker正常接收(ack)后,但Broker没有对应的队列进行投递时产生的状态,消息被退回给生产者
- 注意:上面两种状态只代表生产者与Broker之间消息投递的情况。与消费者是否接收/确认消息无关
11.Exchange模式
- Exchange模式的特点是生产者与消费者之间通信需要通过交换机(Exchange)绑定队列(Queue)进行分发
- Exchange对应Fanout、Direct、Topic三种类型
本文作者:张三Blog
本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503282.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步