当前位置: 首页 > wzjs >正文

太原医院网站建设网页动态设计软件

太原医院网站建设,网页动态设计软件,wordpress 改变滑页,网页设计导航栏尺寸深入探讨:异步调用和MQ消费者场景下请求上下文缺失问题及解决方案 在微服务开发过程中,我们常常会遇到各种复杂的场景,其中异步调用和MQ消费者场景下的请求上下文缺失问题,是一个值得深入探讨的技术点。本文将结合具体的代码示例…

深入探讨:异步调用和MQ消费者场景下请求上下文缺失问题及解决方案

在微服务开发过程中,我们常常会遇到各种复杂的场景,其中异步调用和MQ消费者场景下的请求上下文缺失问题,是一个值得深入探讨的技术点。本文将结合具体的代码示例,详细分析这两个场景下问题产生的原因,并给出相应的解决方案。

一、背景引入

在微服务架构中,我们使用OpenFeign实现服务间的HTTP通信。为了确保服务间通信的安全性,通常需要在请求头中携带诸如token等认证信息。以下是一个用于在Feign请求中添加token的拦截器配置类代码:

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;/*** @author : 胡浩* @version 1.0* @description: Feign 配置类,用于在请求头中添加 Token* @date 2022/11/15 18:37*/
@Configuration
public class FeignConfig implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();requestTemplate.header("token", request.getHeader("token"));}
}

该代码通过RequestContextHolder获取当前请求的上下文,进而从HttpServletRequest对象中提取token,并添加到Feign的请求头中。然而,在异步调用和MQ消费者场景下,RequestContextHolder.getRequestAttributes()却会返回null,这就导致Feign调用无法携带必要的认证信息。

二、异步调用场景下的问题剖析

(一)问题原因

在异步编排过程中,RequestAttributes存储在ThreadLocal中。由于主线程的ThreadLocal变量不会自动传递给子线程,所以当我们在子线程中执行异步任务并调用Feign客户端时,拦截器无法获取到主线程的请求上下文,也就无法获取到原有的请求头信息,例如token。这就导致Feign调用缺失必要的认证信息,可能引发服务调用失败或权限不足等问题。

(二)解决方案

  1. 启用异步支持:在Spring Boot应用中,首先需要在配置类上添加@EnableAsync注解来启用异步支持。
  2. 手动传递上下文:由于Spring的@Async异步处理默认不会传递线程本地变量,所以我们需要手动将父线程的上下文传递给子线程。可以通过以下代码实现:
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(sra, true);

这里的第二个参数true表示该属性是可继承的,这样设置后,子线程就能够访问到父线程的请求属性,从而在Feign调用时可以正确携带token等信息。

三、MQ消费者场景下的问题剖析

(一)问题原因

当消息队列的消费者处理消息时,通常是在一个独立的线程中执行的。这个线程并非由HTTP请求触发,因此不存在与HTTP请求关联的RequestAttributes。所以,RequestContextHolder无法获取到原有的请求上下文,导致Feign调用时无法携带token等信息。这就使得MQ消费者在调用其他服务时,可能因为缺少认证信息而无法正常访问受保护的接口。

(二)解决方案

  1. 手动设置请求上下文:在消费者处理消息的逻辑中,手动设置请求上下文。可以从消息体中提取必要的信息,构建一个模拟的请求上下文,并将其设置到RequestContextHolder中。
  2. 在消息体中包含认证信息:在发送消息时,将必要的认证信息,如token,包含在消息体中。这样在消费者处理消息并进行Feign调用时,可以直接从消息体中获取认证信息,并添加到Feign请求头中。

四、总结

无论是异步调用还是MQ消费者场景,出现请求上下文缺失问题的根本原因在于ThreadLocal的线程隔离特性。这一特性使得在跨线程或非HTTP请求触发的场景下,无法自动获取上下文。为了解决这一问题,我们需要在这些场景中手动处理上下文的传递或设置,确保Feign调用能够正确携带所需的请求头信息,从而保证微服务间通信的安全性和稳定性。通过对这些问题的深入理解和有效解决,我们能够更好地构建健壮的微服务架构应用。


文章转载自:

http://MgdadQal.Lgtcg.cn
http://NykT2vCs.Lgtcg.cn
http://Nz9vUXy9.Lgtcg.cn
http://cal55I9b.Lgtcg.cn
http://MEZ4jCe0.Lgtcg.cn
http://3FOv7AmE.Lgtcg.cn
http://Bs5pYJDZ.Lgtcg.cn
http://v5mdfoNL.Lgtcg.cn
http://JVYJ9U6u.Lgtcg.cn
http://8uyJp8lX.Lgtcg.cn
http://ALLUKaia.Lgtcg.cn
http://6yDAGkDK.Lgtcg.cn
http://KzM4GDGh.Lgtcg.cn
http://pDGP8n4Z.Lgtcg.cn
http://Maf9yJE3.Lgtcg.cn
http://cJlEwZCh.Lgtcg.cn
http://DEkGajpf.Lgtcg.cn
http://WxpnrPTw.Lgtcg.cn
http://u5pVphX3.Lgtcg.cn
http://y4soRHMy.Lgtcg.cn
http://wwr3fmMz.Lgtcg.cn
http://PTMdQwcm.Lgtcg.cn
http://8EwG2yOL.Lgtcg.cn
http://33LLcou9.Lgtcg.cn
http://YUmF8x6b.Lgtcg.cn
http://Ll95uMWU.Lgtcg.cn
http://2wHn8jAF.Lgtcg.cn
http://aEdZUFsM.Lgtcg.cn
http://0XfvzBIm.Lgtcg.cn
http://UaWjFuDw.Lgtcg.cn
http://www.dtcms.com/wzjs/675466.html

相关文章:

  • 美术馆网站建设要求网站用户体验优化方案
  • 网站排名推广软件南宁专业做网站方案
  • 庐江魅力网做网站号码wordpress memcached命中率
  • 雍熙网站建设用wordpress做微博
  • 网站建设的局限性工厂外贸网站建设
  • 华为手机网站建设策划书南山出名的互联网公司
  • php完整电商网站开发源码深圳网站制作公司怎么样
  • 北京 广告 手机网站模板建站教程
  • 家装商城系统网站建设大连网站开发哪家好
  • 西安建设手机网站wordpress获取当前文章分类
  • 烟台门户网站购物网站前台功能
  • 电脑网站搜索如何做做游戏网站需要哪些许可
  • 用vs代码做网站行业排名查询网站
  • 福建联美建设集团有限公司网站网站开发项目实例
  • 网站qq临时会话网站编程代码大全
  • 厦门响应式网站建设扬州手机网站建设
  • 西安做网站魔盒网络服务提供者接到通知后
  • 自己如何建设个网站网站正在建设 mp4
  • 深圳中国电信网站备案网站资源做外链
  • 网站建设合同属于什么印花税舆情分析系统
  • 成立公司怎么做网站wordpress首页导航添加
  • 国内 扁平化 网站上海网站建设咨询
  • 网页网站建设的步骤流程app制作网站制作完
  • 吉林学校网站建设沈阳建信建设工程有限公司位置
  • 广州市网站公司adsl服务器建网站
  • 县区网站建设运行汇报罗湖网站建设
  • 班级优化大师官方网站微信小程序开发教程pdf
  • 怎样做销售水蜜桃网站怎么自己做论坛网站吗
  • 网站建设公司的方案米 建设网站
  • 少儿教育网站建设价格集团网站建设行业现状