day04 RabbitMQ消息队列基本使用
介绍
- RabbitMQ 是一个开源的、高度可靠的、基于 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)协议实现的消息中间件。它可以用于构建高效、可靠的分布式应用程序,支持消息的路由、持久化、发布与订阅、事务等功能。
- RabbitMQ 采用分布式架构,消息的生产者(producer)通过将消息发送到 RabbitMQ 的 Exchange(交换器),Exchange 再将消息路由到一个或多个队列(queue)中。消息的消费者(consumer)从队列中取出消息并进行处理。在 RabbitMQ 中,消息发送者和消息接收者之间是解耦的,它们不需要知道彼此的存在,也不需要关注消息是如何被处理的,这使得系统变得更加灵活和可扩展。


同步通讯和异步通讯
- 同步通讯和异步通讯是在计算机系统中常见的两种通讯方式。
- 同步通讯:指的是在发送和接收消息或数据时,发送方和接收方需要进行协同,必须在一个确定的时间点上进行通讯,只有在对方做出响应后才能进行下一步操作。在这种通讯方式下,发送方需要等待接收方响应后才能继续执行,而接收方则需要在接收到消息后立即进行处理并响应,否则会导致发送方一直处于等待状态。同步通讯通常会造成阻塞,如果接收方处理时间过长,就会影响整个系统的性能和响应速度。
- 优点:
- 时效性较强,可以立即得到结果
- 缺点:
- 耦合度高:每次加入新的需求,都需要修改代码
- 性能和吞吐能力下降:生产者需要等待消费者的响应
- 有额外的资源消耗:生产者等待时不能做其他指令,性能浪费
- 有级联失败问题:消费者出现问题,生产者也会出现问题
- 优点:
- 异步通讯(rabbitmq 就是基于此技术):则是指在发送和接收消息时,发送方和接收方可以独立进行操作,不需要进行协同,发送方发送消息后就可以继续执行其他操作,而接收方则可以在自己的时间范围内处理和响应消息。在这种通讯方式下,发送方不需要等待接收方响应,而是通过回调、轮询等方式获取接收方的处理结果。由于异步通讯不需要进行协同,因此可以大大提高系统的并发性能和响应速度。
- 优点:
- 吞吐量提升:无需等待订阅者处理完成,响应更快速
- 故障隔离:服务没有直接调用,不存在级联失败问题
- 调用间没有阻塞,不会造成无效的资源占用
- 耦合度极低,每个服务都可以灵活插拔,可替换
- 流量削峰:不管发布事件的流量波动多大,都由 Broker(中间件)接收,订阅者可以按照自己的速度去处理事件
- 缺点:
- 架构复杂了,业务没有明显的流程线,不好管理
- 需要依赖于 Broker 的可靠、安全、性能
- 优点:
- 同步通讯:指的是在发送和接收消息或数据时,发送方和接收方需要进行协同,必须在一个确定的时间点上进行通讯,只有在对方做出响应后才能进行下一步操作。在这种通讯方式下,发送方需要等待接收方响应后才能继续执行,而接收方则需要在接收到消息后立即进行处理并响应,否则会导致发送方一直处于等待状态。同步通讯通常会造成阻塞,如果接收方处理时间过长,就会影响整个系统的性能和响应速度。
rabbitmq 的 web 界面管控台
- Overview
- 查看节点信息
- Connections
- 连接:消息的生产者和消费者连接信息
- Channels
- 通道:消息的具体对象。消费者基于通道完成消息的消费,生产者基于通道完成生产
- Exchanges
- 交换机:实现路由消息到队列
- Queues
- 队列:消息的暂存
- Admin
- 管理用户信息
- 虚拟主机(virtral hosts):mq 中的逻辑划分,不同的用户可以有不同的逻辑划分。是对 queue、exchange 等的逻辑分组,实现多用户之间的工作区间不混淆。
- 管理用户信息
AMQP 协议
- AMQP(Advanced Message Queuing Protocol)是一种开放式的消息队列协议,它定义了在分布式系统中传输消息的标准格式和规范。AMQP 的设计目标是提供高效、可靠、安全、可扩展的消息传递机制,支持不同平台和语言之间的互操作性。
- 在 AMQP 协议中,消息生产者将消息发布到交换机(Exchange)中,交换机根据指定的路由键(Routing Key)将消息路由到一个或多个消息队列中,消费者从队列中订阅并消费消息。消息可以包含任意类型的数据,如文本、JSON、XML、二进制数据等。
- AMQP 协议支持多种消息传递模式,包括点对点(Point-to-Point)模式和发布/订阅(Publish/Subscribe)模式等,可以满足不同的应用场景和需求。
使用
- 使用 Rabbit 的原生 API 生产队列和消费队列 (rabbitmqAPI)
- 导入依赖 amqp-client
- 使用 Rabbit Springboot 生产队列和消费队列 (rabbitmqSpringBoot)
- 导入依赖 spring-boot-starter-amqp
- 启动类添加 @EnableRabbit
- 消息的限流(配置文件)
- 配置类的使用
- 交换机,配置队列,路由,绑定关系
- 注解的使用
- 交换机,配置队列,路由,绑定关系
- 对象序列化的方式(配置类)
5 种工作模式
- 无交换机,一个管道,一个消费者 simple queue 模式
- 无交换机,一个管道,多个消费者 work queue 模式
- publish/subscribe(发布/订阅模式)
- 有交换机,无路由,多个管道,多个消费者 fanout
- 有交换机,有路由,多个管道,多个消费者 Direct(Routing)
- 有交换机,有路由,多个管道,多个消费者 Topics 模式 (路由支持通配符)
