erlang v19.2
rabbitmq_server v3.6.6

与Spring集成

具体代码实现,参见rq-spring-with和rq-spring-with-consumer模块

pom文件

【RabbitMQ】集成和实战

统一配置

配置文件中增加命名空间

【RabbitMQ】集成和实战

连接相关配置

【RabbitMQ】集成和实战

生产者端

RabbitTemplate

【RabbitMQ】集成和实战

或下面这种声明方式也是可以的。

【RabbitMQ】集成和实战

队列和交换器

可以在生产者配置文件中增加队列和交换器

【RabbitMQ】集成和实战

代码

发送消息时,使用rabbitTemplate即可。同时还可以给消息配置属性MessageProperties

消费者端

队列和交换器

消费者中也可配置队列和交换器,以及指定队列和交换器绑定的路由键

【RabbitMQ】集成和实战

【RabbitMQ】集成和实战

消费者bean

【RabbitMQ】集成和实战

【RabbitMQ】集成和实战

监听容器

将消费者bean和队列联系起来

【RabbitMQ】集成和实战

代码

消费者实现MessageListener接口即可。

实战-应用解耦

场景

用户下订单买商品,订单处理成功后,去扣减库存,在这个场景里,订单系统是生产者,库存系统是消费者。

库存是必须扣减的,在业务上来说,有库存直接扣减即可,没库存或者低于某个阈值,可以扣减成功,不过要通知其他系统(如通知采购系统尽快采购,通知用户订单系统我们会尽快调货)。

RPC实现

通过RPC的实现,可以看到RPC会造成耦合。一旦库存系统失败,订单系统也会跟着失败。我们希望库存系统本身的失败,不影响订单系统的继续执行,在业务流程上,进行订单系统和库存系统的解耦。

消息中间件的实现

对于我们消息模式的实现,为保证库存必须有扣减,我们要考虑几个问题:

  1. 订单系统发给Mq服务器的扣减库存的消息必须要被Mq服务器接收到,意味着需要使用发送者确认。
  2. Mq服务器在扣减库存的消息被库存服务正确处理前必须一直保存,那么需要消息进行持久化。
  3. 某个库存服务器出了问题,扣减库存的消息要能够被其他正常的库存服务处理,需要我们自行对消费进行确认,意味着不能使用消费者自动确认,而应该使用手动确认。

所以生产者订单系统这边需要 ,配置文件中队列和交换器进行持久化,消息发送时的持久化,发送者确认的相关配置和代码。

所以消费者库存系统这边要进行手动确认。

总结:与Spring集成时的更多配置

发送者确认

【RabbitMQ】集成和实战

设置发送消息时的mandatory以及接收RabbitMQ中间件的应答

【RabbitMQ】集成和实战

交换器持久化配置

【RabbitMQ】集成和实战

消息持久化

【RabbitMQ】集成和实战

队列参数(包括持久化)配置

【RabbitMQ】集成和实战

消费者手动确认消息

【RabbitMQ】集成和实战

处理库存类要实现ChannelAwareMessageListener。

【RabbitMQ】集成和实战

和对消息确认或拒绝

【RabbitMQ】集成和实战

SpringBoot整合RabbitMQ

  1. maven依赖
  2. application.properties文件
  3. 基本的配置,如声明RabbitTemplate、队列、各种交换器如fanout,topic等、队列和交换器绑定的使用
  4. 发送者确认模式的使用
  5. 消费者确认模式的使用,类UserReceiver

访问方法:http://localhost:8080/rabbit/hello等

相关源码

链接:https://pan.baidu.com/s/1Np6LmlTqMr3LaLNPpnf2-g 密码:me35


声明:本文技术学习于享学教育的老师们,后期由博主整理分享,未得博主同意禁止转载!!!

相关文章:

  • 2021-09-02
  • 2021-04-16
  • 2022-12-23
  • 2021-08-22
  • 2021-07-23
  • 2021-08-18
猜你喜欢
  • 2021-11-12
  • 2021-07-28
  • 2021-09-06
  • 2021-04-23
  • 2022-12-23
  • 2021-08-31
  • 2022-12-23
相关资源
相似解决方案