一.引入RabbitMQ依赖
<!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!-- jackson消息转换器--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
消息发送方和消费方都需要这个依赖
二.完成RabbitMQ相关配置
地址配置在yaml文件中,或者nacos中
同样,发送方和消费方都需要配置
三.消息转换器配置
消息转换器在发送方和消费方都需要,可以直接在共同的父类包中配置,
这个配置需要被扫描到,如果抽取出来配置在父类包中,包名不一样,微服务程序启动时候无法正常扫描到;可以采用springboot自动装配的原理,在spring.factories文件里添加MQ的配置文件所在包
四.编写消息消费者
新建listener包,使用@RabbitListener注解监听消息,而其中的业务代码,是从原来的程序中,将同步调用,修改为基于MQ发消息的模式调用
交换机默认类型是direct,默认持久化,这两个参数为设置,采用默认值;
orderService通过构造函数注解@RequiredArgsConstructor注入
此处的Long orderId对应的就是消息发送者发送过来的message;
五.编写消息生产者
将直接调用微服务,修改为向微服务发送消息,发送的消息需要带有必要的参数,参数包含在message中.
在PayController对应的serciveImpl中:
基于构造函数注入RabbitTemplate,不再需要远程调用
将需要发送到RabbitMQ的代码用try-catch包起来,防止因为发消息失败影响到核心业务
六.运行
程序重新启动后,队列和交换机就自动创建完成,并可以完成相应操作