◉◡◉ 您好,欢迎到访伊成个人站!

springboot整合rabbitmq实现几种模式

写在前面

如何使用springboot整合rabbitmq的几种模式,这篇就给出了对应的demo,地址放在文章后面。

前提条件需要搭建好对应的rabbitmq服务,具体搭建可以参考我的上一篇 《centos7中安装rabbitmq》

7种模式

1.简单模式

一个生产者,一个消费者,一个队列。

对应代码,请查看下列几个类:

1
2
3
SimpleQueueConfig.java
SimpleQueueProducer.java
SimpleQueueConsumer.java

2.工作模式

一个生产者,多个消费者,每个消费者获取到的消息唯一,平均消费。

消息确认: 分两种自动确认 (易丢失数据)和手动确认 (不易丢失数据)

手动确认: 我们通过autoAck = true 标志明确地将它们关闭。一旦我们完成任务,就应该将此标志设置为false并从工作人员发送适当的确认。若忘记返回确认会造成消息无法释放,内存堆积。

消息持久性: 分消息持久化与消息非持久化

消息持久化: 数据写入磁盘,数据不易丢失(队列和消息都标记为持久)

消息非持久化: 数据写入内存,数据存储速度快

对应代码,请查看下列几个类:

1
2
3
4
WorkQueueConfig.java
WorkQueueProducer.java
WorkQueueConsumer1.java
WorkQueueConsumer2.java

3.发布订阅模式

相比于上面两种模式多了一个交换机角色。

Exchange有常见以下3种类型:

Fanout:广播,将消息交给所有绑定到交换机的队列。

Direct:定向,把消息交给符合指定routing key 的队列。

Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列。

!注意:Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!

对应代码,请查看下列几个类:

1
2
3
4
PublishSubscribeConfig.java
PublishSubscribeProducer.java
PublishSubscribeConsumer1.java
PublishSubscribeConsumer2.java

4.路由模式

交换机类型: direct

直接交换背后的路由算法很简单 - 消息进入队列,其 绑定密与消息的路由密完全匹配。

对应代码,请查看下列几个类:

1
2
3
4
RoutingQueueConfig.java
RoutingQueueProducer.java
RoutingQueueConsumer1.java
RoutingQueueConsumer2.java

5.主题模式

交换机类型:topic

发送到主题交换的消息不能具有任意 routing_key 它必须是由点分隔的单词列表。

单词可以是任何内容,但通常它们指定与消息相关的一些功能。

路由密钥中可以包含任意数量的单词,最多可达255个字节。

绑定密钥也必须采用相同的形式。

主题交换背后的逻辑 类似于直接交换 使用特定路由密钥发送的消息将被传递到与匹配绑定密钥绑定的所有队列。

但是,绑定键有两个重要的特殊情况:

*(星号)可以替代一个单词。

#(#号)可以替换零个或多个单词。

6.RPC模式

客户端向一个队列中发送消息,并注册一个回调的队列用于接收服务端返回的消息,该消息需要声明一个叫做correaltionId的属性,

该属性将是该次请求的唯一标识。服务端在接受到消息(在需要时可以验证correaltionId)后,处理消息,并将消息发送到客户端注册的回调队列中。

对应代码,请查看下列几个类:

1
2
3
RPCQueueConfig.java
RPCQueueProducer.java
RPCQueueConsumer.java

7.发布确认模式

与发布者进行可靠的发布确认,发布者确认是RabbitMQ扩展,可以实现可靠的发布。在通道上启用发布者确认后,RabbitMQ将异步确认发送者发布的消息,这意味着它们已在服务器端处理。

代码地址

点我获取代码


The end.

支付宝打赏 微信打赏