MQ传递用户信息


theme: nico

你们好,我是金金金。

image.png

场景

购物车里面有5个商品,用户勾选了并且提交订单了,此时需要删除购物车对应勾选的商品,mq的话涉及到传递用户信息~因为删除对应的购物车商品是需要传递用户信息来知晓对应用户的

  • 生产者
    在这里插入图片描述
  • 消费者
    在这里插入图片描述

排查

看报错很明显就是参数不支持,点击convertAndSend方法,可以看到第四个参数是MessagePostProcessor类型,我们传递的类型不对当然报错了
在这里插入图片描述

  • 我们在看一下MessagePostProcessor是啥
    在这里插入图片描述

这个函数是一个函数式接口,用于处理消息。其中,postProcessMessage(Message var1) 是一个必需的方法,用于对消息进行处理。另外,还提供了两个默认方法 postProcessMessage(Message message, Correlation correlation) 和 postProcessMessage(Message message, Correlation correlation, String exchange, String routingKey),用于在处理消息时提供额外的参数,但最终都会调用 postProcessMessage(Message var1) 方法进行实际的消息处理。

解决

  1. 生产者第四个参数new MessagePostProcessor接口重写postProcessMessage方法
    在这里插入图片描述

  2. 消费者使用Message接收数据
    在这里插入图片描述

测试

在这里插入图片描述

  • 可以看到用户id已经拿到了,说明用户信息传递成功

优化

监听器逻辑优化

  1. 为了避免在每个Listener都加同样的setUserId的方法,考虑在公用模块里加。因为无论哪个listener接受,都需要经过消息转换器,因此考虑在启动类里面里重写消息转化器的fromMessage方法。
    在这里插入图片描述
  2. 监听器里面的set逻辑就不用写了,还是很方便的
    在这里插入图片描述

优化消息转换器

  • 现在我在生产者和消费者的启动类上都写了消息转换器,意味着消息咱们使用的JSON消息转换器 需要在每个模块的启动类里面都定义一个方法并且注入到spring容器当中才能使用,假设微服务有十个模块 都需要,难不成咱们写十遍吗?太繁琐了
  • 咱们可以把这个bean放在一个全局模块当中,这个全局模块配置文件里面把定义的方法注入到spring容器里面就可以,需要使用的模块引入这个全局模块依赖坐标就行了。
  1. 咱们把逻辑放在一个公共模块的配置文件里面
    在这里插入图片描述
    在这里插入图片描述
  2. 我的公共模块资源里面有一个spring.factories文件
    在这里插入图片描述
    在这里插入图片描述

意味着Spring Boot在启动时会扫描并激活这些配置类(MyBatisConfig、JsonConfig、MvcConfig)。如果这些配置类中包含@Bean注解的方法,那么这些方法将会被调用,它们的返回值会被注册到Spring容器中作为一个Bean,从而可以被其他组件依赖注入和使用。

  1. 需要使用的服务只要导入了common这个公共模块的依赖即可,相当于也就有了公共模块里面的bean
    在这里插入图片描述
  2. 记得公共模块引入如下依赖
    在这里插入图片描述

总结

生产者使用MessagePostProcessor在消息发送前设置消息属性头,消费者使用Message参数接收即可

  • 编写有误还请大佬指正,万分感谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/383044.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022真题-架构师案例(二)

1、某大型电商平台建立了一个在线B2B商店系统,并在全匡多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率。但是在运营过程中,发现会出现很多跨仓储中心调货从而延误货物运送的情况。为此,该企业计划新建立一个全国…

Pytorch 6

罗切斯特回归模型 加了激活函数 加了激活函数之后类 class LogisticRegressionModel(torch.nn.Module):def __init__(self):super(LogisticRegressionModel, self).__init__()self.linear torch.nn.Linear(1,1)def forward(self, x):# y_pred F.sigmoid(self.linear(x))y_p…

Python 教程(二):语法与数据结构

目录 前言专栏列表语法特点实例代码基本数据类型变量命名规则赋值动态类型作用域示例代码 运算符list、set和dict 数据结构 区别1. list(列表)2. set(集合)3. dict(字典) 总结 前言 Python 是一种计算机编…

虚拟机OP的LAN网口设置

问题:unraid通过虚拟机安装OP,然而一个网口连接路由器,总是无法为其他设备提供DHCP,导致无法使用。 一、虚拟机OP配置 二、OP内部配置 对于Lan网口,启用强制,这样可以防止OP被网口接的路由器产生冲突 三、…

第八讲 视觉里程计2

不提取特征点计算VO: 一是通过其他方式寻找配对点(光流法,跟踪特征点的运动),仍然使用特征点,只是把匹配描述子替换成了光流跟踪,估计相机运动仍使用对极几何、PnP或ICP算法。依然要求提取到的关…

CefSharp音视频编译与免费下载

注:Cefharp 音频和视频播放编译,生成相应的dll文件,从而支持项目开发。 建议编译至少 16G 的 RAM和至少 250G 的 SSD。该脚本以 E 盘为例,您需要在 E 盘上手动创建 cef 文件夹。禁止在转载后通过发布其他平台向用户收取下载费用。…

TypeScript中Interface接口的深度探索与实践

定义接口 在TypeScript中,interface是一个强有力的概念,它用于定义类型签名,特别是对象的结构。接口可以用来描述对象应该有哪些属性、方法,以及这些成员的类型。它们是实现类型系统中“鸭子类型”(duck typing&#…

vue3实现在新标签中打开指定的网址

有一个文件列表,如下图: 我希望点击查看按钮的时候,能够在新的标签页面打开这个文件的地址进行预览,该如何实现呢? 比如: 实际上要实现这个并不难,参考demo如下: 首先&#x…

网络安全等级保护解决方案的主打产品

网络安全等级保护解决方案的主打产品: HiSec Insight安全态势感知系统、 FireHunter6000沙箱、 SecoManager安全控制器、 HiSecEngine USG系列防火墙和HiSecEngine AntiDDoS防御系统。 华为HiSec Insight安全态势感知系统是基于商用大数据平台FusionInsight的A…

浅谈C语言整型类数据在内存中的存储

1、整型类数据 C语言中的整型类数据都归类在整型家族中,其中包括:char、short、int、long、long long这5个大类,而每个大类中又分为两类signed和unsigned,这些都是C语言中的内置类型。以下重点基于char和int这两种类型的数据进行阐述&#x…

dsa加训

refs: OI Wiki - OI Wiki (oi-wiki.org) 1. 枚举 POJ 2811 熄灯问题 refs : OpenJudge - 2811:熄灯问题 如果要枚举每个灯开或者不开的情况,总计2^30种情况,显然T。 不过我们可以发现:若第i行的某个灯亮了,那么有且仅有第i行和第…

springcloud接入skywalking作为应用监控

下载安装包 需要下载SkyWalking APM 和 Java Agent 链接: skywalking 安装 下载JDK17(可不配置环境变量) 目前skywalking 9.0及以上版本基本都不支持JDK8,需要JDK11-21,具体版本要求在官网查看。 我这里使用的是skywalking9.…

德国云手机:企业移动办公解决方案

在现代商业环境中,移动办公已经成为一种趋势。德国云手机作为一种高效的解决方案,为企业提供了强大的支持。本文将探讨德国云手机如何优化企业的移动办公环境。 一、德国云手机的主要优势 高灵活性 德国云手机具有高度的灵活性,能够根据用户需…

链式法则和自动求导

向量链式法则 说明: 1.第一个式子, y是标量,u是标量,x是n维向量 2.第二个式子,y是标量,u是k维向量,x是n维向量,所以y对u求导是k维的行向量,u对x求导是k行n列的矩阵&…

Spark实时(三):Structured Streaming入门案例

文章目录 Structured Streaming入门案例 一、Scala代码如下 二、Java 代码如下 三、以上代码注意点如下 Structured Streaming入门案例 我们使用Structured Streaming来监控socket数据统计WordCount。这里我们使用Spark版本为3.4.3版本,首先在Maven pom文件中导…

Android中Service学习记录

目录 一 概述二 生命周期2.1 启动服务startService()2.2 绑定服务bindService()2.3 先启动后绑定2.4 先绑定后启动 三 使用3.1 本地服务(启动式)3.2 可通信的服务(绑定式)3.3 前台服务3.4 IntentService 总结参考 一 概述 Servic…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十章 Linux设备树

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Springboot 开发之 RestTemplate 简介

一、什么是RestTemplate RestTemplate 是Spring框架提供的一个用于应用中调用REST服务的类。它简化了与HTTP服务的通信,统一了RESTFul的标准,并封装了HTTP连接,我们只需要传入URL及其返回值类型即可。RestTemplate的设计原则与许多其他Sprin…

spring boot(学习笔记第十四课)

spring boot(学习笔记第十四课) Spring Security的密码加密,基于数据库认证 学习内容: Spring Security的密码加密基于数据库认证 1. Spring Security的密码加密 如果用户的密码保存在数据库中是以明文保存,对于公司的安全将是灾难性的&…

【PyTorch】图像多分类项目部署

【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 如果需要在独立于训练脚本的新脚本中部署模型,这种情况模型和权重在内存中不存在,因此需要构造一个模型类的对象,然后将存储的权重加载到模型中。 加载模型参数,验证模型…