场景:

  用户登陆后,再次访问网页,将用户信息loginToken放在request的header中,首先经过网关,然后到达A服务,然后A服务调用B服务时如何把loginToken传递给B服务

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

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

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

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

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

2.增加拦截器

feign提供的 RequestInterceptor 接口会默认拦截feign发出去所有请求,所以在这里拦截服务A发送给服务B的请求,然后再请求头中添加loginToken

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

package com.yuanian.example.feignA.config;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; /**
* @author liujy
* @date 2019/10/24 10:57
**/
@Component
public class FeignTokenInterceptor implements RequestInterceptor { @Override
public void apply(RequestTemplate template) {
HttpServletRequest request = getServletRequest();
if (null == request){
return;
}
template.header("loginToken", getHeaders(request));
} private HttpServletRequest getServletRequest() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
return ((ServletRequestAttributes) requestAttributes).getRequest();
} private String getHeaders(HttpServletRequest request){
return request.getHeader("loginToken");
}
}

 3.hytrix两种策略的区别

feign在服务间传递header的更多相关文章

  1. SpringCloud使用Feign实现服务间通信

    SpringCloud的服务间通信主要有两种办法,一种是使用Spring自带的RestTemplate,另一种是使用Feign,这里主要介绍后者的通信方式. 整个实例一共用到了四个项目,一个Eurek ...

  2. Spring Cloud netflix feign【服务间通信】

    一.简介 1,进程间通讯的本质是交换消息 2,服务间通信的两种方式 (1)RESTFul风格 (2)RPC风格 (3)两种风格的比较 3.基于RESTFul风格服务调用模型 4.基于Spring Cl ...

  3. Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录

    背景 :在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnectio ...

  4. feign实现服务间的负载均衡

    feign Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单.我们只需要使用Feign来创建一个接口并用注解来配置它既可完成.它具备可插拔的注解 ...

  5. Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录(转)

    https://blog.csdn.net/uotail/article/details/84673347

  6. spring cloud服务间调用feign

    参考文章:Spring Cloud Feign设计原理 1.feign是spring cloud服务间相互调用的组件,声明式.模板化的HTTP客户端.类似的HttpURLConnection.Apac ...

  7. ②SpringCloud 实战:引入Feign组件,完善服务间调用

    这是SpringCloud实战系列中第二篇文章,了解前面第一篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 简介 Feign 是一个声明式的 RE ...

  8. SpringCloud初体验:三、Feign 服务间调用(FeignClient)、负载均衡(Ribbon)、容错/降级处理(Hystrix)

    FeignOpenFeign Feign是一种声明式.模板化的HTTP客户端. 看了解释过后,可以理解为他是一种 客户端 配置实现的策略,它实现 服务间调用(FeignClient).负载均衡(Rib ...

  9. Android学习笔记_23_服务Service之AIDL和远程服务实现进程通信以及进程间传递自定义类型参数

    一.了解AIDL语言: 在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然, Java中是不支持跨进程内存共享的.因此要传递对象, 需要把对象解析 ...

  10. spring boot项目使用swagger-codegen生成服务间调用的jar包

    swagger-codegen的github:https://github.com/swagger-api/swagger-codegen 需要的环境:jdk > 1.7   maven > ...

随机推荐

  1. 【Project】原生JavaWeb工程 03 单表的业务功能

    年级表效果图样例: 可以看到主要分为以下这些功能: 功能一:展示年级列表 功能二:每个年级都具备修改和删除 功能三:添加一个年级 功能四:对多个年级选中删除,也可以全选删除,或者反选删除 功能五:根据 ...

  2. 【转载】 vim中常用折叠命令

    原文地址: https://www.cnblogs.com/litifeng/p/11675547.html 个人推荐的一个视频教程地址: 上古神器Vim:从恶言相向到爱不释手 - 终极Vim教程01 ...

  3. 使用TensorFlow、Pytorch等深度学习框架时如何设置对OpenCV的使用

    如题: 在使用深度学习框架时如果同时也在使用opencv那么有一些设置是需要设定的,第一个就是在python代码中设定禁止使用opencl: cv2.ocl.setUseOpenCL(False) o ...

  4. Apache DolphinScheduler 3.2.1 版本发布:增强功能与安全性的全面升级

    近期,Apache DolphinScheduler 社区激动地宣布 3.2.1 版本的发布.此次更新不仅着力解决了前一版本(3.2.0)中遗留的问题,而且引入了一系列的功能增强和优化措施. 原先的问 ...

  5. 如何用C语言操作sqlite3,一文搞懂

    sqlite3编程接口非常多,对于初学者来说,我们暂时只需要掌握常用的几个函数,其他函数自然就知道如何使用了. 数据库 本篇假设数据库为my.db,有数据表student. no name score ...

  6. 11. 基于ARM Cortex-A9中断详解

    一.中断概念 操作系统中,中断是很重要的组成部分.出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行. 有了中断系统才可以不用一直 ...

  7. MySql 字段类型长度问题理解

    mysql中字段长度理解 字符长度 设计表中设置的是字符长度,任意字符都占一个字符长度,使用char_length 函数获取 char_length(`name`) 字节长度 字节长度和数据表的字符集 ...

  8. 13 Python面向对象编程:装饰器

    本篇是 Python 系列教程第 13 篇,更多内容敬请访问我的 Python 合集 Python 装饰器是一种强大的工具,用于修改或增强函数或方法的行为,而无需更改其源代码.装饰器本质上是一个接收函 ...

  9. CSS & JS Effect – Dialog Modal

    效果 参考: Youtube – Create a Simple Popup Modal Youtube – Create a Modal (Popup) with HTML/CSS and Java ...

  10. WiFi基础(四):WiFi工作原理及WiFi接入过程

    liwen01 2024.09.16 前言 802.11 无线 WiFi 网有三类帧:数据帧.管理帧.控制帧.与有线网相比,无线 WiFi 网会复杂很多.大部分应用软件开发对 WiFi 的控制帧和管理 ...