zoukankan      html  css  js  c++  java
  • 微服务中服务间feign调用header传参

    1.说明

    现有二个服务,一个会员服务(member),一个微信服务(wechat)。现有浏览器访问member服务,member服务在调用wechat服务,并在wechat服务中获取请求头中传递的token,flag参数信息。该例子设置的固定的请求头信息,token、flag 做为演示。

    2.member 新增过滤器类

     1 @Configuration
     2 public class FeignConfiguration implements RequestInterceptor {
     3 
     4     /**
     5      * 打印日志
     6      */
     7     private Logger logger = LoggerFactory.getLogger(getClass());
     8 
     9     @Override
    10     public void apply(RequestTemplate template) {
    11         template.header("token", UUID.randomUUID().toString());
    12         template.header("flag", "3");
    13         logger.info("headerInfo:{}", template);
    14     }
    15 }

    feign客户端调用接口新增属性配置 configuration = FeignConfiguration.class

     1 @FeignClient(value = "sp-weixin",configuration = FeignConfiguration.class)
     2 public interface WeChatServiceFeign {
     3 
     4     /**
     5      * 如果不加@RequestParam( feign 客户端调用 可能会报405
     6      *
     7      * @param s
     8      * @return
     9      */
    10     @GetMapping("/getWeChat")
    11     String getWeChat(@RequestParam("s") String s);
    12 
    13 }

    3.member服务配置文件新增(亲测:只有开启了Hystrix的时候需要新增,因为Hystrix的默认隔离策略是线程池隔离)

    1 hystrix:
    2   command:
    3     default:
    4       execution:
    5         isolation:
    6           strategy: SEMAPHORE

    Feign集成Hystrix默认是关闭Hystrix的,只有在配置文件中设置feign.hystrix.enabled=true才会开启Hystrix。

    execution.isolation.strategy
    表示HystrixCommand.run()的执行时的隔离策略,有以下两种策略

    hystrixCommand线程
       线程池隔离:
          1、调用线程和hystrixCommand线程不是同一个线程,并发请求数受到线程池(不是容器tomcat的线程池,而是hystrixCommand所属于线程组的线程池)中的线程数限制,默认是10。
          2、这个是默认的隔离机制
          3、hystrixCommand线程无法获取到调用线程中的ThreadLocal中的值
       信号量隔离:
          1、调用线程和hystrixCommand线程是同一个线程,默认最大并发请求数是10
          2、调用数度快,开销小,由于和调用线程是处于同一个线程,所以必须确保调用的微服务可用性足够高并且返回快才用

    4.wechat 服务接口代码 获取浏览器传递header参数

     1 @RestController
     2 public class WeChatServiceImpl implements WeChatService {
     3 
     4     /**
     5      * 打印日志
     6      */
     7     private Logger logger = LoggerFactory.getLogger(getClass());
     8 
     9     @Override
    10     public String getWeChat(String a) {
    11         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    12         String token = request.getHeader("token");
    13         String flag = request.getHeader("flag");
    14         logger.info("token:{},flag:{}", token, flag);
    15         return "微信服务,param:" + a + ",token:" + token + "," + "flag:" + flag;
    16     }
    17 }
  • 相关阅读:
    pytorch torchversion标准化数据
    pytorch 中HWC转CHW
    pytorch torchversion自带的数据集
    pytorch Dataset数据集和Dataloader迭代数据集
    pytorch Model Linear实现线性回归CUDA版本
    pytorch实现手动线性回归
    pytorch中的前项计算和反向传播
    pytorch中CUDA类型的转换
    pytorch中tensor的属性 类型转换 形状变换 转置 最大值
    LightOJ 1074 spfa判断负环
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/14596064.html
Copyright © 2011-2022 走看看