Spring Cloud 云原生应用(二)
4. 弹簧云断路器
4.1. 简介
春云断路器提供了跨不同断路器实现的抽象。 它提供了可在应用程序中使用的一致 API,使开发人员能够选择最适合应用程序需求的断路器实现。
4.1.1. 支持的实现
Spring Cloud 支持以下断路器实现:
- 弹性4J
- 哨兵
- 春季重试
4.2. 核心概念
若要在代码中创建断路器,可以使用 API。当您在类路径中包含 Spring Cloud Breaker 启动器时,将自动为您创建实现此 API 的 Bean。 以下示例显示了如何使用此 API 的简单示例:CircuitBreakerFactory
API 创建调用的类的实例。 该方法需要a和a。 这是您要包装在断路器中的代码。 这是断路器跳闸时运行的回退。 传递的函数导致触发回退。 如果不想提供回退,可以选择排除回退。CircuitBreakerFactory.create
CircuitBreaker
run
Supplier
Function
Supplier
Function
Throwable
4.2.1. 反应式代码中的断路器
如果 Project Reactor 位于类路径上,则还可以将响应式代码用于响应式代码。 以下示例演示如何执行此操作:ReactiveCircuitBreakerFactory
API 创建调用的类的实例。 该方法采用aor a并将其包裹在断路器中。 您可以选择分析回退,如果断路器跳闸并通过导致故障,将调用回退。ReactiveCircuitBreakerFactory.create
ReactiveCircuitBreaker
run
Mono
Flux
Function
Throwable
4.3. 配置
您可以通过创建类型的 bean 来配置断路器。 该接口有一个方法(称为),该方法采用自定义。Customizer
Customizer
customize
Object
有关如何自定义给定实现的详细信息,请参阅 以下文档:
- 弹性4J
- 哨兵
- 春季重试
每次调用一些实现,例如调用方法。 它可能效率低下。在这种情况下,您可以使用方法。在多次调用没有意义的情况下很有用, 例如,在使用 Resilience4j 的事件的情况下。CircuitBreaker
Resilience4JCircuitBreaker
customize
CircuitBreaker#run
CircuitBreaker#once
customize
以下示例显示了每个事件使用事件的方式。io.github.resilience4j.circuitbreaker.CircuitBreaker
5. 缓存随机属性源
Spring Cloud 上下文提供基于键缓存随机值的功能。缓存之外 功能它的工作方式与Spring Boot的RandomValuePropertySource相同。 此随机值在您希望即使在 Spring 应用程序之后也保持一致的随机值的情况下可能很有用 上下文将重新启动。属性值采用缓存中的键 where is 的形式。该值可以 是Spring Boot支持的任何类型。PropertySource
cachedrandom.[yourkey].[type]
yourkey
type
RandomValuePropertySource
6. 安全
6.1. 单点登录
所有 OAuth2 SSO 和资源服务器功能都迁移到 Spring Boot 在 1.3 版中。您可以在Spring 引导用户指南中找到文档。 |
6.1.1. 客户端令牌中继
如果您的应用程序是面向 OAuth2 客户端的用户(即具有声明者),那么它具有来自 Spring Boot 的请求范围。您可以 从此上下文创建自己的上下文和 自动连线,然后上下文将 始终将访问令牌转发到下游,同时刷新访问 令牌在过期时自动。(这些是春天的特点 安全性和春季启动。@EnableOAuth2Sso
@EnableOAuth2Client
OAuth2ClientContext
OAuth2RestTemplate
OAuth2ProtectedResourceDetails
6.1.2. 资源服务器令牌中继
如果您的应用程序有您可能想要中继 传入令牌下游到其他服务。如果您使用 ato 联系下游服务,那么这只是一个 如何创建具有正确上下文的模板的问题。@EnableResourceServer
RestTemplate
如果您的服务用于对传入进行身份验证 令牌(即它正在使用配置),然后您可以简单地创建一个使用自动连线(它将由 在到达后端代码之前进行身份验证过程)。等效 (使用 Spring Boot 1.4),您可以注入 a并抓取它的 您的配置。例如:UserInfoTokenServices
security.oauth2.user-info-uri
OAuth2RestTemplate
OAuth2ClientContext
UserInfoRestTemplateFactory
OAuth2RestTemplate
我的配置.java
然后,此 rest 模板将具有身份验证过滤器使用的相同(请求范围),因此您可以 使用它来发送具有相同访问令牌的请求。OAuth2ClientContext
如果您的应用未使用但仍是客户端 (即它声明者),然后 与 弹簧安全云 任何用户 从安威尔也向前创建 令 牌。默认情况下,此功能作为 MVC 处理程序实现 拦截器,所以它只在Spring MVC中工作。如果您没有使用 MVC 您可以使用自定义过滤器或 AOP 拦截器包装 ANTO 提供相同的功能。UserInfoTokenServices
@EnableOAuth2Client
@EnableOAuth2Sso
OAuth2RestOperations
@Autowired
OAuth2Context
AccessTokenContextRelay
这是一个基本的 显示使用已创建的自动连线 REST 模板的示例 其他地方(“foo.com”是接受与 周围的应用程序):
我的控制器.java
如果您不想转发令牌(这是一个有效的 选择,因为您可能想扮演自己,而不是 向您发送令牌的客户端),那么您只需要创建自己的令牌而不是自动连接默认令牌。OAuth2Context
Feign 客户端还将选取一个拦截器,该拦截器使用 if 它可用,因此他们也应该做一个 令牌中继任何地方。OAuth2ClientContext
RestTemplate