该项目通过自动配置为 Spring Boot 应用程序提供 OpenFeign 集成 并绑定到 Spring 环境和其他 Spring 编程模型习语。
1. 声明式 REST 客户端:假装
Feign是一个声明式 Web 服务客户端。 它使编写 Web 服务客户端变得更加容易。 要使用Feign创建一个接口并对其进行注释。 它具有可插拔的注释支持,包括Feign注释和JAX-RS注释。 Feign还支持可插拔编码器和解码器。 Spring Cloud 增加了对 Spring MVC 注释的支持,并支持在 Spring Web 中默认使用相同注释。 Spring Cloud 集成了 Eureka、Spring Cloud Breaker 以及 Spring Cloud LoadBalancer,以便在使用 Feign 时提供负载平衡的 http 客户端。HttpMessageConverters
1.1. 如何包含假装
要将 Feign 包含在项目中,请使用带有组和工件 ID 的初学者。有关使用当前 Spring 云发布系列设置构建系统的详细信息,请参阅Spring 云项目页面。org.springframework.cloud
spring-cloud-starter-openfeign
示例弹簧启动应用
@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
商店客户端.java
@FeignClient("stores")
public interface StoreClient {
@RequestMapping(method = RequestMethod.GET, value = "/stores")
List<Store> getStores();
@RequestMapping(method = RequestMethod.GET, value = "/stores")
Page<Store> getStores(Pageable pageable);
@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
Store update(@PathVariable("storeId") Long storeId, Store store);
@RequestMapping(method = RequestMethod.DELETE, value = "/stores/{storeId:\\d+}")
void delete(@PathVariable Long storeId);
}
在注释中,字符串值(上面的“stores”)是一个任意的客户端名称,用于创建Spring Cloud LoadBalancer客户端。 您还可以使用属性指定 URL (绝对值或只是一个主机名)。豆子在 应用程序上下文是接口的完全限定名称。 要指定您自己的别名值,您可以使用该值 的注释。@FeignClienturlqualifiers@FeignClient
上面的负载均衡器客户端需要发现物理地址 对于“商店”服务。如果您的应用程序是 Eureka 客户端,则 它将解析 Eureka 服务注册表中的服务。如果你 不想使用尤里卡,可以配置服务器列表 在外部配置中使用简单发现客户端。
Spring Cloud OpenFeign支持Spring Cloud LoadBalancer阻塞模式可用的所有功能。您可以在项目文档中阅读有关它们的更多信息。
要使用注释类,请确保指定客户端所在的位置,例如:或显式列出它们: |
1.2. 覆盖假装默认值
Spring Cloud 的 Feign 支持中的核心概念是指定客户端的概念。每个假装客户端都是组件集合的一部分,这些组件协同工作以按需联系远程服务器,并且集合有一个名称,您作为应用程序开发人员使用注释为其指定。Spring Cloud 为每个命名客户端创建一个新的融合作为匿名需求。它包含(除其他事项外)an、a 和 a。 可以使用注释的属性来覆盖该融合的名称。@FeignClient
ApplicationContext
FeignClientsConfiguration
feign.Decoder
feign.Encoder
feign.Contract
contextId
@FeignClient
Spring Cloud 允许您通过使用声明其他配置(在顶部)来完全控制假客户端。例:FeignClientsConfiguration
@FeignClient
@FeignClient(name = "stores", configuration = FooConfiguration.class)
public interface StoreClient {
//..
}
在这种情况下,客户端由已经与任何 in(后者将覆盖前者)的组件组成。FeignClientsConfiguration
FooConfiguration
|
使用注释的属性,除了更改名称 集合,它将覆盖客户端名称的别名 它将用作为该客户机创建的配置 Bean 名称的一部分。 |
以前,使用属性,不需要属性。使用是现在必需的。 |
占位符在属性中受支持。name
url
@FeignClient(name = "${feign.name}", url = "${feign.url}")
public interface StoreClient {
//..
}
Spring Cloud OpenFeign 默认为 feign 提供以下 bean(beanName:):BeanType
ClassName
-
Decoder
feignDecoder:(它包装了一个ResponseEntityDecoder
SpringDecoder
) -
Encoder
feignEncoder:SpringEncoder
-
Logger
feignLogger:Slf4jLogger
-
MicrometerCapability
千分尺功能:类路径上的 Ifis 并且可用feign-micrometer
MeterRegistry
-
CachingCapability
缓存功能:使用Ifannotation。可以通过以下方式禁用。@EnableCaching
feign.cache.enabled
-
Contract
假装合约:SpringMvcContract
-
Feign.Builder
feignBuilder:FeignCircuitBreaker.Builder
-
Client
feignClient:如果 Spring Cloud LoadBalancer 在类路径上,则使用。 如果类路径上没有它们,则使用缺省假装客户端。FeignBlockingLoadBalancerClient
|
OkHttpClient 和 ApacheHttpClient 和 ApacheHC5 假装客户端可以分别由 setororto 使用,并将它们放在类路径上。 您可以通过提供 bean 来自定义使用的 HTTP 客户端,当使用 Apache 或使用 OK HTTP 或使用 Apache HC5 时。feign.okhttp.enabled
feign.httpclient.enabled
feign.httpclient.hc5.enabled
true
org.apache.http.impl.client.CloseableHttpClient
okhttp3.OkHttpClient
org.apache.hc.client5.http.impl.classic.CloseableHttpClient
Spring Cloud OpenFeign默认不提供以下 bean 用于 feign,但仍会从应用程序上下文中查找这些类型的 bean 来创建 feign 客户端:
-
Logger.Level
-
Retryer
-
ErrorDecoder
-
Request.Options
-
Collection<RequestInterceptor>
-
SetterFactory
-
QueryMapEncoder
-
Capability
(MicrometerCapability
默认提供)CachingCapability
默认情况下会创建具有该类型的 bean,这将禁用重试。 请注意,此重试行为与 Feign 默认行为不同,后者将自动重试 IOExceptions, 将它们视为与网络相关的暂时性异常,以及从错误解码器引发的任何可重试异常。Retryer.NEVER_RETRY
Retryer
创建其中一种类型的 bean 并将其放置在 aconfig(如上面)中,允许您覆盖所描述的每个 bean。例:@FeignClient
FooConfiguration
@Configuration
public class FooConfiguration {
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("user", "password");
}
}
这替换了 thewith,并添加了 ato 的集合。SpringMvcContract
feign.Contract.Default
RequestInterceptor
RequestInterceptor
@FeignClient
也可以使用配置属性进行配置。
应用程序.yml
feign:
client:
config:
feignName:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: full
errorDecoder: com.example.SimpleErrorDecoder
retryer: com.example.SimpleRetryer
defaultQueryParameters:
query: queryValue
defaultRequestHeaders:
header: headerValue
requestInterceptors:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
decode404: false
encoder: com.example.SimpleEncoder
decoder: com.example.SimpleDecoder
contract: com.example.SimpleContract
capabilities:
- com.example.FooCapability
- com.example.BarCapability
queryMapEncoder: com.example.SimpleQueryMapEncoder
metrics.enabled: false
默认配置可以在属性中以类似于上述的方式指定。不同之处在于此配置将应用于所有假客户端。@EnableFeignClients
defaultConfiguration
如果您希望使用配置属性来配置所有属性,则可以使用假装名称创建配置属性。@FeignClient
default
您可以使用 and 指定查询参数和标头,这些参数和标头将与命名的客户端的每个请求一起发送。feign.client.config.feignName.defaultQueryParameters
feign.client.config.feignName.defaultRequestHeaders
feignName
应用程序.yml
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic
如果我们同时创建 Bean 和配置属性,则配置属性将获胜。 它将覆盖值。但是,如果要将优先级更改为, 你可以换成。@Configuration
@Configuration
@Configuration
feign.client.default-to-properties
false
如果我们想创建多个具有相同名称或 url 的假客户端 这样它们就会指向同一台服务器,但每个服务器都有不同的自定义配置 我们必须使用属性的为了避免名称 这些配置豆的冲突。contextId
@FeignClient
@FeignClient(contextId = "fooClient", name = "stores", configuration = FooConfiguration.class)
public interface FooClient {
//..
}
@FeignClient(contextId = "barClient", name = "stores", configuration = BarConfiguration.class)
public interface BarClient {
//..
}
也可以将 FeignClient 配置为不从父上下文继承 bean。 您可以通过覆盖 abean 返回来执行此操作:inheritParentConfiguration()
FeignClientConfigurer
false
@Configuration
public class CustomConfiguration{
@Bean
public FeignClientConfigurer feignClientConfigurer() {
return new FeignClientConfigurer() {
@Override
public boolean inheritParentConfiguration() {
return false;
}
};
}
}
默认情况下,Feign 客户端不对斜杠字符进行编码。您可以通过设置 ofto 值来更改此行为。 |
1.2.1.弹簧编码器配置
在我们提供的中,我们为二进制内容类型和所有其他内容类型设置了字符集。SpringEncoder
null
UTF-8
您可以修改此行为以通过设置 ofto 值从标头字符集派生字符集。Content-Type
feign.encoder.charset-from-content-type
true
1.3. 超时处理
我们可以在默认客户端和命名客户端上配置超时。OpenFeign 使用两个超时参数:
-
connectTimeout
防止由于服务器处理时间过长而阻止调用方。 -
readTimeout
从建立连接时开始应用,并在返回响应时间过长时触发。
如果服务器未运行或不可用,则数据包会导致连接被拒绝。通信以错误消息或回退结束。这可能发生在之前,如果它被设置得很低。执行查找和接收此类数据包所花费的时间会导致此延迟的很大一部分。它可能会根据涉及 DNS 查找的远程主机而更改。 |
1.4. 手动创建假客户端
在某些情况下,可能需要以不 可以使用上述方法。在这种情况下,您可以使用Feign Builder API 创建客户端。下面是一个示例 它创建两个具有相同接口的 Feign 客户端,但为每个客户端配置 单独的请求拦截器。
@Import(FeignClientsConfiguration.class)
class FooController {
private FooClient fooClient;
private FooClient adminClient;
@Autowired
public FooController(Client client, Encoder encoder, Decoder decoder, Contract contract, MicrometerCapability micrometerCapability) {
this.fooClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.addCapability(micrometerCapability)
.requestInterceptor(new BasicAuthRequestInterceptor("user", "user"))
.target(FooClient.class, "https://PROD-SVC");
this.adminClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.addCapability(micrometerCapability)
.requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin"))
.target(FooClient.class, "https://PROD-SVC");
}
}
在上面的例子是默认配置 由Spring Cloud OpenFeign提供。 |
|
Feignobject 定义哪些注释和值在接口上有效。这 autowiredbean 提供对 SpringMVC 注释的支持,而不是 默认的假本机批注。 |
你也可以使用theon。Builder`to configure FeignClient not to inherit beans from the parent context. You can do this by overriding calling `inheritParentContext(false)
Builder
1.5. 假弹簧云断路器支持
如果 Spring Cloud Breaker 位于类路径上,Feign 将使用断路器包装所有方法。feign.circuitbreaker.enabled=true
要按客户端禁用 Spring Cloud Breaker 支持,请创建一个具有“原型”范围的香草,例如:Feign.Builder
@Configuration
public class FooConfiguration {
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}
断路器名称遵循此模式。当调用awithinterface和没有参数的被调用接口方法时,断路器名称将是。<feignClientClassName>#<calledMethod>(<parameterTypes>)
@FeignClient
FooClient
bar
FooClient#bar()
自 2020.0.2 起,断路器名称模式已从 更改。 使用2020.0.4中引入的断路器名称可以保留旧模式。 |
提供 bean,您可以更改断路器名称模式。CircuitBreakerNameResolver
@Configuration
public class FooConfiguration {
@Bean
public CircuitBreakerNameResolver circuitBreakerNameResolver() {
return (String feignClientName, Target<?> target, Method method) -> feignClientName + "_" + method.getName();
}
}
要启用 Spring Cloud Breaker 组,请将属性设置为 (默认情况下)。feign.circuitbreaker.group.enabled
true
false
1.6. 使用配置属性配置断路器
您可以通过配置属性配置断路器。要做setto。因为 您不能在我们需要的配置属性名称中使用诸如,,之类的字符 更改 OpenFeign 生成的断路器 ID 的命名约定。以上 酒店将为您执行此操作。feign.circuitbreaker.alphanumeric-ids.enabled
true
#
(
)
,
例如,如果你有这个Feign客户端
@FeignClient(url = "http://localhost:8080")
public interface DemoClient {
@GetMapping("demo")
String getDemo();
}
您可以通过执行以下操作来使用配置属性对其进行配置
feign:
circuitbreaker:
enabled: true
alphanumeric-ids:
enabled: true
resilience4j:
circuitbreaker:
instances:
DemoClientgetDemo:
minimumNumberOfCalls: 69
timelimiter:
instances:
DemoClientgetDemo:
timeoutDuration: 10s
1.7. 假弹簧云断路器回退
Spring Cloud Breaker支持回退的概念:电路打开或出现错误时执行的默认代码路径。为给定集启用回退,该属性到实现回退的类名。您还需要将您的实现声明为 Spring bean。@FeignClient
fallback
@FeignClient(name = "test", url = "http://localhost:${server.port}/", fallback = Fallback.class)
protected interface TestClient {
@RequestMapping(method = RequestMethod.GET, value = "/hello")
Hello getHello();
@RequestMapping(method = RequestMethod.GET, value = "/hellonotfound")
String getException();
}
@Component
static class Fallback implements TestClient {
@Override
public Hello getHello() {
throw new NoFallbackAvailableException("Boom!", new RuntimeException());
}
@Override
public String getException() {
return "Fixed response";
}
}
如果需要访问进行回退触发器的原因,则可以在内部使用该属性。fallbackFactory
@FeignClient
@FeignClient(name = "testClientWithFactory", url = "http://localhost:${server.port}/",
fallbackFactory = TestFallbackFactory.class)
protected interface TestClientWithFactory {
@RequestMapping(method = RequestMethod.GET, value = "/hello")
Hello getHello();
@RequestMapping(method = RequestMethod.GET, value = "/hellonotfound")
String getException();
}
@Component
static class TestFallbackFactory implements FallbackFactory<FallbackWithFactory> {
@Override
public FallbackWithFactory create(Throwable cause) {
return new FallbackWithFactory();
}
}
static class FallbackWithFactory implements TestClientWithFactory {
@Override
public Hello getHello() {
throw new NoFallbackAvailableException("Boom!", new RuntimeException());
}
@Override
public String getException() {
return "Fixed response";
}
}
1.8. 假装和@Primary
当将 Feign 与 Spring Cloud Breaker 回退一起使用时,同一类型中有多个 bean。这将导致不起作用,因为没有一个 bean,或者一个标记为主 bean。为了解决这个问题,Spring Cloud OpenFeign 将所有 Feign 实例标记为,因此 Spring Framework 将知道要注入哪个 bean。在某些情况下,这可能不可取。要关闭此行为,请将属性 of 设置为 false。ApplicationContext
@Autowired
@Primary
primary
@FeignClient
@FeignClient(name = "hello", primary = false)
public interface HelloClient {
// methods here
}
1.9. 假继承支持
Feign 通过单继承接口支持样板 API。 这允许将常见操作分组到方便的基本接口中。
用户服务.java
public interface UserService {
@RequestMapping(method = RequestMethod.GET, value ="/users/{id}")
User getUser(@PathVariable("id") long id);
}
用户资源.java
@RestController
public class UserResource implements UserService {
}
用户客户端.java
package project.user;
@FeignClient("users")
public interface UserClient extends UserService {
}
|
1.10. 假请求/响应压缩
您可以考虑为您的启用请求或响应 GZIP 压缩 佯装请求。您可以通过启用以下属性之一来执行此操作:
feign.compression.request.enabled=true
feign.compression.response.enabled=true
假请求压缩为您提供的设置类似于您可能为 Web 服务器设置的设置:
feign.compression.request.enabled=true
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=2048
这些属性允许您选择压缩媒体类型和最小请求阈值长度。
1.11. 假装日志记录
为每个创建的 Feign 客户端创建一个记录器。默认情况下,记录器的名称是用于创建 Feign 客户端的接口的完整类名。假装日志记录仅响应级别。DEBUG
应用程序.yml
logging.level.project.user.UserClient: DEBUG
您可以为每个客户端配置的对象告诉 Feign 要记录多少。选择是:Logger.Level
-
NONE
,无日志记录(默认)。 -
BASIC
,仅记录请求方法和 URL 以及响应状态代码和执行时间。 -
HEADERS
,记录基本信息以及请求和响应标头。 -
FULL
,记录请求和响应的标头、正文和元数据。
例如,以下内容将设置为:Logger.Level
FULL
@Configuration
public class FooConfiguration {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
1.12. 伪装能力支持
Feign 功能公开核心 Feign 组件,以便可以修改这些组件。例如,功能可以采用,装饰它,并将装饰的实例返回给 Feign。 对指标库的支持就是一个很好的现实示例。请参阅假装指标。Client
创建一个或多个 Bean 并将它们放置在配置中,可以注册它们并修改相关客户端的行为。Capability
@FeignClient
@Configuration
public class FooConfiguration {
@Bean
Capability customCapability() {
return new CustomCapability();
}
}
1.13. 假指标
如果满足以下所有条件,则会创建并注册 abean,以便您的 Feign 客户端将指标发布到 Micrometer:MicrometerCapability
-
feign-micrometer
位于类路径上 - 阿豆可用
MeterRegistry
- 假装指标属性设置为(默认情况下)
true
-
feign.metrics.enabled=true
(适用于所有客户) -
feign.client.config.feignName.metrics.enabled=true
(对于单个客户端)
如果您的应用程序已经使用 Micrometer,则启用指标就像放入类路径一样简单。 |
您还可以通过以下任一方式禁用该功能:
- 从类路径中排除
feign-micrometer
- 将其中一个假装指标属性设置为
false
-
feign.metrics.enabled=false
-
feign.client.config.feignName.metrics.enabled=false
|
您还可以通过注册自己的 bean 进行自定义:MicrometerCapability
@Configuration
public class FooConfiguration {
@Bean
public MicrometerCapability micrometerCapability(MeterRegistry meterRegistry) {
return new MicrometerCapability(meterRegistry);
}
}
1.14. 假缓存
使用 Ifannotation,创建并注册 abean,以便您的 Feign 客户端在其接口上识别sannotations:@EnableCaching
CachingCapability
@Cache*
public interface DemoClient {
@GetMapping("/demo/{filterParam}")
@Cacheable(cacheNames = "demo-cache", key = "#keyParam")
String demoEndpoint(String keyParam, @PathVariable String filterParam);
}
您也可以通过属性禁用该功能。feign.cache.enabled=false
1.15. 假装@QueryMap支持
OpenFeignannotation 为 POJO 提供了对用作 GET 参数映射。不幸的是,默认的OpenFeign QueryMap注释是 与春天不兼容,因为它缺乏属性。@QueryMap
value
Spring Cloud OpenFeign 提供了一个等效的注释,它 用于将 POJO 或 Map 参数注释为查询参数映射。@SpringQueryMap
例如,类定义参数和:Params
param1
param2
// Params.java
public class Params {
private String param1;
private String param2;
// [Getters and setters omitted for brevity]
}
以下假装客户端通过使用注释来使用类:Params
@SpringQueryMap
@FeignClient("demo")
public interface DemoTemplate {
@GetMapping(path = "/demo")
String demoEndpoint(@SpringQueryMap Params params);
}
如果需要对生成的查询参数映射进行更多控制,则可以实现自定义 Bean。QueryMapEncoder
1.16. 哈特亚斯支持
Spring 提供了一些 API 来创建遵循HATEOAS原则、Spring Hateoas和Spring Data REST 的 REST 表示。
如果您的项目使用入门器 或启动器,默认情况下启用 Feign HATEOAS 支持。org.springframework.boot:spring-boot-starter-hateoas
org.springframework.boot:spring-boot-starter-data-rest
启用 HATEOAS 支持后,允许 Feign 客户端序列化 并反序列化 HATEOAS 表示模型:实体模型、集合模型和分页模型。
@FeignClient("demo")
public interface DemoTemplate {
@GetMapping(path = "/stores")
CollectionModel<Store> getStores();
}
1.17. 春季@MatrixVariable支持
Spring Cloud OpenFeign 为 Springannotation 提供支持。@MatrixVariable
如果将映射作为方法参数传递,则通过将映射中的键值对与 a 联接来创建路径段。@MatrixVariable
=
如果传递了不同的对象,则在注释中提供(如果已定义)或注释的变量名称为 使用提供的方法参数连接。name
@MatrixVariable
=
重要
尽管在服务器端,Spring 不要求用户将路径段占位符命名为与矩阵变量名称相同的名称,因为它在客户端过于模糊,Spring Cloud OpenFeign 要求您添加一个路径段占位符,其名称与注释中提供的名称(如果已定义)或注释变量名称相匹配。name
@MatrixVariable
例如:
@GetMapping("/objects/links/{matrixVars}")
Map<String, List<String>> getObjects(@MatrixVariable Map<String, List<String>> matrixVars);
请注意,变量名称和路径段占位符都被调用。matrixVars
@FeignClient("demo")
public interface DemoTemplate {
@GetMapping(path = "/stores")
CollectionModel<Store> getStores();
}
1.18. 假装集合格式支持
我们通过提供注释来支持。 您可以通过传递 desiredas 注释值来注释 Feign 客户端方法(或影响所有方法的整个类)。feign.CollectionFormat
@CollectionFormat
feign.CollectionFormat
在下面的示例中,使用 format,而不是 defaultto 处理该方法。CSV
EXPLODED
@FeignClient(name = "demo")
protected interface PageableFeignClient {
@CollectionFormat(feign.CollectionFormat.CSV)
@GetMapping(path = "/page")
ResponseEntity performRequest(Pageable page);
}
设置格式发送时作为查询参数,以便正确编码。 |
1.19. 反应式支持
由于OpenFeign 项目目前不支持响应式客户端,例如 SpringWebClient,Spring Cloud OpenFeign 也不支持。
在此之前,我们建议对Spring WebClient支持使用feign-reactive。
1.19.1. 早期初始化错误
根据您使用 Feign 客户端的方式,您可能会在启动应用程序时看到初始化错误。 要变通解决此问题,您可以使用 anwhen 自动连接客户端。ObjectProvider
@Autowired
ObjectProvider<TestFeignClient> testFeignClient;
1.20. 弹簧数据支持
您可以考虑启用杰克逊模块的支持和解码。org.springframework.data.domain.Page
org.springframework.data.domain.Sort
feign.autoconfiguration.jackson.enabled=true
1.21. 弹簧@RefreshScope支持
如果启用了 Feign 客户机刷新,那么将使用刷新范围的 Bean 创建每个假客户机。这意味着可以通过任何 Feign 客户端实例刷新诸如 andand 之类的属性。feign.Request.Options
connectTimeout
readTimeout
POST /actuator/refresh
默认情况下,Feign 客户端中的刷新行为处于禁用状态。使用以下属性启用刷新行为:
feign.client.refresh-enabled=true
不要用注释注释界面。 |
1.22. OAuth2 支持
可以通过设置以下标志来启用 OAuth2 支持:
feign.oauth2.enabled=true
1.22.1. 已弃用的 OAuth2 支持
当标志设置为 and,并且存在于类路径和 oauth2 客户端上下文资源详细信息中,并且存在 andbean,则会创建类的 Bean。在每个请求之前,侦听器会解析所需的访问令牌并将其作为标头包含在内。 有时,当为 Feign 客户端启用负载均衡时,您可能还希望使用负载均衡来获取访问令牌。为此,您应该确保负载平衡器位于类路径(spring-cloud-starter-load balancer)上,并通过设置以下标志为 OAuth2FeignRequestInterceptor 显式启用负载平衡:true
spring-security-oauth2-autoconfigure
OAuth2ClientContext
OAuth2ProtectedResourceDetails
OAuth2FeignRequestInterceptor
feign.oauth2.load-balanced=true
警告
如上所述的 OAuth2 支持现已弃用,因为已达到生命周期的终点。请改用下面描述的模式。spring-security-oauth2-autoconfigure
1.22.2. 当前对 OAuth2 的支持
当标志设置为 true 时,并且存在于类路径中,则创建类的 bean。在每个请求之前,拦截器解析所需的访问令牌并将其作为标头包含在内。use theto getThat 持有一个。如果用户指定了 OAuth2using 属性,它将用于检索令牌。如果未检索令牌或尚未指定令牌,则将使用从主机段检索的令牌。feign.client.refresh-enabled
spring-security-oauth2-client
OAuth2AccessTokenInterceptor
OAuth2AccessTokenInterceptor
OAuth2AuthorizedClientManager
OAuth2AuthorizedClient
OAuth2AccessToken
clientRegistrationId
feign.oauth2.clientRegistrationId
clientRegistrationId
serviceId
url
提示
使用 OAuth2 客户端注册 ID 对于负载平衡的 Feign 客户端来说很方便。对于非负载平衡的,基于属性是一种合适的方法。serviceId
clientRegistrationId
提示
如果您不想使用 的默认设置,您可以在配置中实例化这种类型的 Bean。OAuth2AuthorizedClientManager
1.23. 转换负载均衡的 HTTP 请求
您可以使用 selected来转换负载平衡的 HTTP 请求。ServiceInstance
为此,您需要实现和定义,如下所示:Request
LoadBalancerFeignRequestTransformer
== Configuration properties标签:FeignClient,feign,OpenFeign,Spring,enabled,Feign,Cloud,客户端 From: https://blog.51cto.com/u_15326439/5906853
To see the list of all Spring Cloud OpenFeign related configuration properties please check link:appendix.html[the Appendix page].