# springboot-rabbitmq **Repository Path**: lvoyee/springboot-rabbitmq ## Basic Information - **Project Name**: springboot-rabbitmq - **Description**: springboot-rabbitmq整合相关代码 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-12 - **Last Updated**: 2023-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot整合rabbitmq代码案列 #### 介绍 这里是一个 springboot 整合 rabbitmq的仓库,代码中包含了6种模式。 #### 简单说明 jdk版本:1.8 springboot版本:2.4.5 rabbitmq版本:3.8.8 (安装在centos7) #### 七种模式整合说明 除了发布确认模式没有整合其它的都整合了。 ![](https://s3.bmp.ovh/imgs/2023/07/19/3344f6d7f1a87687.png) 最新的模式已经7种! ##### 1.简单模式 ![](https://s3.bmp.ovh/imgs/2023/07/12/4241da63b7b23ea0.png) 一个生产者,一个消费者,一个队列。 对应代码,请查看下列几个类: ``` SimpleQueueConfig.java SimpleQueueProducer.java SimpleQueueConsumer.java ``` ##### 2.工作模式 ![](https://s3.bmp.ovh/imgs/2023/07/13/58c10a5f770eec18.png) 一个生产者,多个消费者,每个消费者获取到的消息唯一,平均消费。 消息确认: 分两种自动确认 (易丢失数据)和手动确认 (不易丢失数据) 手动确认: 我们通过autoAck = true 标志明确地将它们关闭。一旦我们完成任务,就应该将此标志设置为false并从工作人员发送适当的确认。若忘记返回确认会造成消息无法释放,内存堆积。 消息持久性: 分消息持久化与消息非持久化 消息持久化: 数据写入磁盘,数据不易丢失(队列和消息都标记为持久) 消息非持久化: 数据写入内存,数据存储速度快 对应代码,请查看下列几个类: ``` WorkQueueConfig.java WorkQueueProducer.java WorkQueueConsumer1.java WorkQueueConsumer2.java ``` ##### 3.发布订阅模式 ![](https://s3.bmp.ovh/imgs/2023/07/12/f33feff3ec43b937.png) 相比于上面两种模式多了一个交换机角色。 Exchange有常见以下3种类型: Fanout:广播,将消息交给所有绑定到交换机的队列。 Direct:定向,把消息交给符合指定routing key 的队列。 Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列。 !注意:Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失! 对应代码,请查看下列几个类: ``` PublishSubscribeConfig.java PublishSubscribeProducer.java PublishSubscribeConsumer1.java PublishSubscribeConsumer2.java ``` ##### 4.路由模式 ![](https://s3.bmp.ovh/imgs/2023/07/13/0a739ac21728b7d5.png) 交换机类型: direct 直接交换背后的路由算法很简单 - 消息进入队列,其 绑定密与消息的路由密完全匹配。 对应代码,请查看下列几个类: ``` RoutingQueueConfig.java RoutingQueueProducer.java RoutingQueueConsumer1.java RoutingQueueConsumer2.java ``` ##### 5.主题模式 ![](https://s3.bmp.ovh/imgs/2023/07/13/5dea6f7002d3d0cc.png) 交换机类型:topic 发送到主题交换的消息不能具有任意 routing_key 它必须是由点分隔的单词列表。 单词可以是任何内容,但通常它们指定与消息相关的一些功能。 路由密钥中可以包含任意数量的单词,最多可达255个字节。 绑定密钥也必须采用相同的形式。 主题交换背后的逻辑 类似于直接交换 使用特定路由密钥发送的消息将被传递到与匹配绑定密钥绑定的所有队列。 但是,绑定键有两个重要的特殊情况: *(星号)可以替代一个单词。 #(#号)可以替换零个或多个单词。 ##### 6.RPC模式 ![](https://s3.bmp.ovh/imgs/2023/07/17/adca74906769284b.png) 客户端向一个队列中发送消息,并注册一个回调的队列用于接收服务端返回的消息,该消息需要声明一个叫做correaltionId的属性, 该属性将是该次请求的唯一标识。服务端在接受到消息(在需要时可以验证correaltionId)后,处理消息,并将消息发送到客户端注册的回调队列中。 对应代码,请查看下列几个类: ``` RPCQueueConfig.java RPCQueueProducer.java RPCQueueConsumer.java ``` ##### 7.发布确认模式 与发布者进行可靠的发布确认,发布者确认是RabbitMQ扩展,可以实现可靠的发布。在通道上启用发布者确认后,RabbitMQ将异步确认发送者发布的消息,这意味着它们已在服务器端处理。 代码 略 ##### 其它 ![](https://s3.bmp.ovh/imgs/2023/07/18/38c352c62569fc80.png) --- 伊成 www.devcheng.net