微服务中跨服务传递参数

本文介绍了在微服务架构中如何跨服务传递参数,如auth信息和语言信息。通过使用ThreadLocal、Filter和RequestInterceptor,实现参数在多个服务间的传递。首先封装请求相关数据的保存工具,接着在Filter中获取并保存请求参数,最后配置Feign调用时传递这些参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

在微服务架构中,有比较的服务,如果我们需要把一个参数在多个服务中传递,如:auth信息、语言信息、请求ID等等,那么我们可以通过下面的方式进行处理

相关技术

  • ThreadLocal
  • Filter
  • RequestInterceptor

实战

一、封装请求相关数据保存工具

我们可以利用ThreadLocal来保存数据,这里推荐使用InheritableThreadLocal,因为这个类可以让子线程以及子子线程同样可以拿到数据,而且即使主线程已经做了移除,也不影响。

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;

@Slf4j
public class RequestDataThreadLocal {
   

    private static final InheritableThreadLocal<ThreadBindData> threadLocal = new InheritableThreadLocal<>();

    /**
     * 设置数据
     * @param data
     */
    public static void set(ThreadBindData data) {
   
        threadLocal.set(newData);
    }

    /**
     * 删除数据
     */
    public static void remove() {
   
        threadLocal.remove();
    }


    /**
     * 获取数据
     * @return
     */
    public static ThreadBindData get(){
   
        return threadLocal.get();
    }
}

其中ThreadBindData是用来保存数据的实体类,具体根据自己的需要来处理既可以,比如我这里要放入语言信息和auth信息,则内容如下:


/**
 * 线程绑定的数据
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ThreadBindData {
   

    /**
     * 语言
     */
    private String lang;

    /**
     * auth信息
     */
    private String authorization;
}

二、获取并保存请求参数

我们可以通过Filter把所有请求的参数获取起来,然后保存在ThreadLocal之中,供后续使用。同时在请求结束的时候移除掉数据。

package com.megvii.aipark.common.web;


import com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值