博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
feign接口调用使用header
阅读量:4161 次
发布时间:2019-05-26

本文共 1630 字,大约阅读时间需要 5 分钟。

场景:

在做运营平台调用AIID项目接口,需要将header里面的语言传递给AIID项目。但是AIID里面取不到header里面的数据

解决:

1、修改hytrix配置,配置hytrix的 strategy为 SEMAPHORE。

Hystrix 提供两种执行隔离策略( ExecutionIsolationStrategy ) :SEMAPHORE 、THREAD

  • SEMAPHORE :信号量,命令在调用线程执行。
  • THREAD :线程池,命令在线程池执行

如果不修改配置,默认配置的为THREAD,因为不在同一个线程中,无法获得请求的上下文对象,无法执行第二步操作

feign:  httpclient:    enabled: false  okhttp:    enabled: true  hystrix:    enabled: truehystrix:  command:    default:      execution:        timeout:          enabled: true        isolation:          strategy: SEMAPHORE          thread:            timeoutInMilliseconds: 30000

2、增加拦截器

feign提供的 RequestInterceptor 接口会默认拦截feign发出去所有请求,所以在这里拦截运营平台的服务operation发送给AIID服务的请求,然后再请求头中添加language

如果再第一步没有修改 hystrix 的 strategy,则这一步中 RequestContextHolder.getRequestAttributes()的结果无法获取到,结果为null

拦截器写在operation项目中

@Slf4j@Componentpublic class FeignTokenInterceptor implements RequestInterceptor {     @Override    public void apply(RequestTemplate template) {        HttpServletRequest request = getServletRequest();        if (null == request){            return;        }        template.header("language", getHeaders(request));    }     private HttpServletRequest getServletRequest() {        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();        return ((ServletRequestAttributes) requestAttributes).getRequest();    }     private String getHeaders(HttpServletRequest request){        String lang = request.getHeader("lang");        if("cn".equals(lang)){            lang="zh";        }        log.info("lang:{}",lang);        return lang;    }}
这样 在运营平台operation项目里面添加了拦截器并且更改Hystrix策略,这样B项目里面就可以直接取到header里面的参数了。

 

转载地址:http://vfjxi.baihongyu.com/

你可能感兴趣的文章
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
第十一章 - 直接内存
查看>>
Single Number II --出现一次的数(重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
python循环语句与C语言的区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
laravel 修改api返回默认的异常处理
查看>>