欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > RabbitMQ-springboot开发-应用通信

RabbitMQ-springboot开发-应用通信

2025/5/8 19:04:01 来源:https://blog.csdn.net/2302_79981885/article/details/147743294  浏览:    关键词:RabbitMQ-springboot开发-应用通信

文章目录

  • 前言
  • 工作队列-生产者
  • 消费者
  • 发布订阅-生产者
  • 消费者
  • 路由模式
  • 通配符模式
  • 常见问题
  • 应用通信-订单系统
  • 物流系统
  • 发送对象
  • 接收对象
  • 总结


前言

工作队列-生产者

工作队列就是多个消费者
1.引入依赖
1.配置
2.生产者
3.消费者
在这里插入图片描述
在这里插入图片描述
生产者代码
在这里插入图片描述
用这个

在这里插入图片描述
在这里插入图片描述

这样队列就声明好了

在这里插入图片描述
这样就成功了
先启动
在这里插入图片描述

在这里插入图片描述

消费者

就是定义一个监听类,监听有没有消息,有消息的话,就去处理
在这里插入图片描述
程序重启的话,消费者就创建好了,立马就会消费的

在这里插入图片描述
这样就OK了
在这里插入图片描述
这样就是多个消费者了

在这里插入图片描述
一个生产者一次性发送多个消息

在这里插入图片描述
这样就成功了

在这里插入图片描述
两个消费者就有两个channels
ack是消费者,publish是消费者
在这里插入图片描述
然后这里还有标签,从1开始的
每一个channel里面开始排序

在这里插入图片描述
如果监听的参数类型就是string,那么它就是消息主体
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个就是获取channel了

1.String :返回消息的内容
2. Message ( org.springframework.amqp.core.Message ): Spring AMQP的
Message 类,返回原始的消息体以及消息的属性, 如消息ID, 内容, 队列信息等.
3. Channel ( com.rabbitmq.client.Channel ):RabbitMQ的通道对象, 可以⽤于进⾏更
⾼级的操作,如⼿动确认消息

这几个参数之间顺序没有要求

发布订阅-生产者

就是要自己创建交换机,由交换机来路由

a) Fanout:⼴播,将消息交给所有绑定到交换机的队列(Publish/Subscribe模式)
b) Direct:定向,把消息交给符合指定routing key的队列(Routing模式)
c) Topic:通配符,把消息交给符合routing pattern(路由模式)的队列(Topics模式)

先声明队列,然后是交换机,然后是交换机与队列的绑定
在这里插入图片描述
先声明队列,然后是交换机、

在这里插入图片描述
但是这里绑定的参数该如何传入进来呢
FanoutExchange的类型只有一个,所以注入进来没有问题
但是Queue的类型有三个,就注入有问题了
而且Queue的类型没有一个叫queue的,所以就会报错
所以要指定名称
在这里插入图片描述
现在开始发送消息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

消费者

发布订阅模式,每一个队列都对应一个消费者
在这里插入图片描述
一般来说一个消费者一个类,但是我们在学习就不用这样
在这里插入图片描述

路由模式

交换机类型为Direct时, 会把消息交给符合指定routing key的队列.
队列和交换机的绑定, 不是任意的绑定了, ⽽是要指定⼀个RoutingKey(路由key)
消息的发送⽅在向Exchange发送消息时, 也需要指定消息的RoutingKey
Exchange也不再把消息交给每⼀个绑定的key, ⽽是根据消息的RoutingKey进⾏判断, 只有队列的
RoutingKey 和消息的RoutingKey 完全⼀致, 才会接收到消息
在这里插入图片描述
在这里插入图片描述
先写生产者代码
在这里插入图片描述

我们来完成这个图

在这里插入图片描述
在这里插入图片描述
现在开始生产者的代码

在这里插入图片描述

然后测试一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后是消费者代码了
就是监听队列了
在这里插入图片描述
在这里插入图片描述

通配符模式

Topics 和Routing模式的区别是:

  1. topics 模式使⽤的交换机类型为topic(Routing模式使⽤的交换机类型为direct)
  2. topic 类型的交换机在匹配规则上进⾏了扩展, Binding Key⽀持通配符匹配

在这里插入图片描述
先声明队列
在这里插入图片描述
在这里插入图片描述
然后是生产者
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
然后是消费者

在这里插入图片描述

在这里插入图片描述

常见问题

虚拟机的类型,和队列的持久化,都是不能修改的,如果要修改的话,就要先删除才行

就是属性不能修改

应用通信-订单系统

作为⼀个消息队列, RabbitMQ也可以⽤作应⽤程序之间的通信. 上述代码⽣产者和消费者代码放在不同的应⽤中即可完成不同应⽤程序的通信.
接下来我们来看, 基于SpringBoot+RabbitMQ完成应⽤间的通信.
需求描述:
⽤⼾下单成功之后, 通知物流系统, 进⾏发货. (只讲应⽤通信, 不做具体功能实现)

在这里插入图片描述
把两个系统都放在这个文件夹里面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后开始发送消息

在这里插入图片描述
在这里插入图片描述

我们用UUID作为订单id
然后启动
在这里插入图片描述
在这里插入图片描述

物流系统

就是消费者
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发送对象

在这里插入图片描述
这样写的话,发送的消息就接收不到了,就打印不出来内容了

在这里插入图片描述

但是这样就可以了
加上注解RabbitHandler
在这里插入图片描述
注解RabbitHandler的作用就是根据不同的参数,选择不同的方法
而这个参数可以是对象了,现在

先让生产者发送对象

先创建一个对象

在这里插入图片描述
在这里插入图片描述

这样就发送对象了

在这里插入图片描述
在这里插入图片描述
这个的原因是orderInfo没有序列化,说的是队列只支持byte数组,string和序列化信息

在这里插入图片描述
这样就可以了

在这里插入图片描述
在这里插入图片描述
这个不好看,消息内容就是patload
我们发送消息的时候,默认会把消息进行转换,就是
在这里插入图片描述
就是用这个进行转化,可读性很差
所以我们用json来进行转化
可以在rabbitTemplate设置谁来转化
我们来重新定义一个rabbitTemplate
在这里插入图片描述
选这个
我们还有有一个自己的messagecover

在这里插入图片描述
我们自己创建了一个rabbitteamplate
那么以后我们Autowired的时候,就是我们自己的teamplate了

在这里插入图片描述
这样就成功了

接收对象

注解RabbitHandler就是根据参数类型自己找方法的
在这里插入图片描述
一般来说,是把OderInfo提取出来一个单独的包,然后分别引入这个包
但是在同一个文件夹中,就可以直接引入包了,这个是不正规的
在这里插入图片描述
在这里插入图片描述

然后启动就直接报错了
因为生产者有messagecover,可以转化为json,但是消费者没有messagecover啊
所以我们在消费者这里也要搞一个自己的rabbitTemplate在这里插入图片描述
但是注意的是,虽然消费失败了,但是仍然消费了的,所以还要重新生产消息
因为我们的这个是自动确认的方式,意思就是只要消息到达了消费者,不管消费者是否消费成功,队列都会删除这个消息,这个就是自动确认,要么改成手动确认,或者自己来一个messagecover
在这里插入图片描述
在这里插入图片描述
string和对象都是可以了

RabbitListener注解加在类上表示,这个类就只监听一个队列

注意,同一个参数类型的方法只能有一个,不然会报错的

总结

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词