RabbitMQ在SpringBoot中的应用

1.简单模式

P:生产者,要发送消息的程序.

C:消费者,消息的接收者.

Queue:消息队列,类似于一个邮箱,生产者向其中投递消息,消费者从其中取出消息.

特点:一个生产者P,一个消费者C,消息只能被消费一次,也成为点对点模式.

适用场景:消息只能被单个消费者处理.

设置队列的名称为simple.queue

设置一个叫simple.queue的队列

设置生产者

设置消费者

2.工作队列

一个生产者P,多个消费者C1,C2...消费者从同一个队列中获取信息,消息不会重复,会发送给不同的消费者.使用与在集群环境中做异步处理.

这里使生产者向队列发送10条消息.

设置两个消费者从指定队列中获取消息.

实现的结果如下:

可以看到消费者依次从work.queue这个队列中消费消息,且消息不会重复.

3.发布订阅模式.

这里与前面不同的是,这个图中体现出了,交换机(Exchange)

交换机:生产者首先会将消息发送到Exchange,由交换机将消息按照一定的规则路由到一个或者多个队列中.RabbitMQ交换机有四种类型,fanout,direct,topic,headers,不同类型有着不同的路由策略.Fanout :广播,将消息交给所有绑定到交换机的队列(Publish/Subscribe模式) Direct :定向,把消息交给符合指定routing key的队列(routing模式)Topic: 通配符,把消息交给符合 routing pattern(路由模式)的队列.headers 类型的交换机不依赖与路由键的匹配规则来路由消息,而是根据发送的内容中的headers属性进行匹配,性能较差,基本上不会见到它的存在.**Exchange(交换机),**只负责转发消息,不具备存储消息的能力,因此,如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,就会导致消息的丢失.

这里介绍的是Publish/Subscribe模式,一个生产者P,多个消费者C1,C2,X表示交换机,这种模式中,生产者P向交换机发送消息,经过交换机,会被路由到Q1,Q2两个队列.消费者C1,C2收到的信息完全相同.这种模式适用于相同消息需要被多个消费者接受的场景

声明队列和声明交换机以及交换机和队列的绑定

发送消息

消费消息.

路由模式:在路由模式的基础上增加路由Key.发布订阅模式是无条件将所有消息分发给所有消费者,路由模式是Exchange根据RoutingKey的规则,将数据筛选后发给对应的消费者队列.使用场景:需要根据特定规则分发消息的场景.

声明队列和声明交换机以及交换机和队列的绑定

发送消息

接收消息

通配符模式.

路由模式的升级版,在routingKey的基础上,增加了通配符的功能,Topic和Routing的基本原理相同,即:生产者将消息发给交换机,交换机根据routingKey将消息转发给与routingKey匹配的队列.不同之处是:routingKey的匹配方式不同,Routing模式是相等匹配,topics模式是通配符匹配.

声明队列和交换机以及队列和交换机的绑定.

发送消息

接收消息:

下面是一个简单的应用.一个物流系统,顾客在把订单发出之后,将订单消息暂存在RabbitMq,之后再转发到商家.

这里实现物流消息的发送与接收.为了方便演示,这里把订单系统和物流系统创建在一个项目中.发送的消息如下:这里发送了两条消息.建立物流系统,对订单消息进行消费:可以看到队列中已经没有消息了.这里尝试发送一个对象,该对象有两个属性商品名和商品ID.

相关推荐
地藏Kelvin21 分钟前
Spring Ai 从Demo到搭建套壳项目(二)实现deepseek+MCP client让高德生成昆明游玩4天攻略
人工智能·spring boot·后端
一个有女朋友的程序员29 分钟前
Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)
spring boot·redis·缓存
wh_xia_jun1 小时前
在 Spring Boot 中使用 JSP
java·前端·spring boot
yuren_xia2 小时前
在Spring Boot中集成Redis进行缓存
spring boot·redis·缓存
yuren_xia2 小时前
Spring Boot + MyBatis 集成支付宝支付流程
spring boot·tomcat·mybatis
我爱Jack3 小时前
Spring Boot统一功能处理深度解析
java·spring boot·后端
RainbowJie15 小时前
Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
spring boot·后端·单元测试
面朝大海,春不暖,花不开5 小时前
Spring Boot MVC自动配置与Web应用开发详解
前端·spring boot·mvc
发愤图强的羔羊5 小时前
SpringBoot异步导出文件
spring boot·后端
神仙别闹8 小时前
基于Java(SpringBoot、Mybatis、SpringMvc)+MySQL实现(Web)小二结账系统
java·spring boot·mybatis