erlang v19.2
rabbitmq_server v3.6.6
与Spring集成
具体代码实现,参见rq-spring-with和rq-spring-with-consumer模块
pom文件
统一配置
配置文件中增加命名空间
连接相关配置
生产者端
RabbitTemplate
或下面这种声明方式也是可以的。
队列和交换器
可以在生产者配置文件中增加队列和交换器
代码
发送消息时,使用rabbitTemplate即可。同时还可以给消息配置属性MessageProperties。
消费者端
队列和交换器
消费者中也可配置队列和交换器,以及指定队列和交换器绑定的路由键
消费者bean
或
监听容器
将消费者bean和队列联系起来
代码
消费者实现MessageListener接口即可。
实战-应用解耦
场景
用户下订单买商品,订单处理成功后,去扣减库存,在这个场景里,订单系统是生产者,库存系统是消费者。
库存是必须扣减的,在业务上来说,有库存直接扣减即可,没库存或者低于某个阈值,可以扣减成功,不过要通知其他系统(如通知采购系统尽快采购,通知用户订单系统我们会尽快调货)。
RPC实现
通过RPC的实现,可以看到RPC会造成耦合。一旦库存系统失败,订单系统也会跟着失败。我们希望库存系统本身的失败,不影响订单系统的继续执行,在业务流程上,进行订单系统和库存系统的解耦。
消息中间件的实现
对于我们消息模式的实现,为保证库存必须有扣减,我们要考虑几个问题:
- 订单系统发给Mq服务器的扣减库存的消息必须要被Mq服务器接收到,意味着需要使用发送者确认。
- Mq服务器在扣减库存的消息被库存服务正确处理前必须一直保存,那么需要消息进行持久化。
- 某个库存服务器出了问题,扣减库存的消息要能够被其他正常的库存服务处理,需要我们自行对消费进行确认,意味着不能使用消费者自动确认,而应该使用手动确认。
所以生产者订单系统这边需要 ,配置文件中队列和交换器进行持久化,消息发送时的持久化,发送者确认的相关配置和代码。
所以消费者库存系统这边要进行手动确认。
总结:与Spring集成时的更多配置
发送者确认
设置发送消息时的mandatory以及接收RabbitMQ中间件的应答
交换器持久化配置
消息持久化
队列参数(包括持久化)配置
消费者手动确认消息
处理库存类要实现ChannelAwareMessageListener。
和对消息确认或拒绝
SpringBoot整合RabbitMQ
- maven依赖
- application.properties文件
- 基本的配置,如声明RabbitTemplate、队列、各种交换器如fanout,topic等、队列和交换器绑定的使用
- 发送者确认模式的使用
- 消费者确认模式的使用,类UserReceiver
访问方法:http://localhost:8080/rabbit/hello等
相关源码
链接:https://pan.baidu.com/s/1Np6LmlTqMr3LaLNPpnf2-g 密码:me35