EnvironmentController
类是一个Spring
我在circuitbreaker
中看到了用于修饰调用、函数等的方法,但似乎没有一个适用于此。(我对Resilience4j是完全陌生的,所以我希望我没有找到一个简单的解决方案。)
一种常见的方法(不仅用于Resilience4J
,而且通常用于Spring
)是使用BeanPostProcessor
(您可以在这里看到一个不相关的示例)。
然后,在beanPostProcessor中,您可以获得EnvironmentController
的句柄,并用Resilience4J
CicrcuitBreaking逻辑环绕其实现/方法。
基本上,这种方法类似于:
如果这还不能完全清楚,我可以添加一些示例代码来让您开始,只要让我知道就行了。请记住,这可能只是解决这个问题的许多方法之一。
编辑:
有些代码(不确定它是否有效,没有经过测试,spring-boot
在MVC映射autoconfig中使用了大量AOP
是出了名的烦人,因此您可能不得不使用方面或代理配置)看起来像(请记住,为了后代,我会使用lombok来避免所有的样板):
@Configuration
@Slf4j
public class MyConfig {
// or however the heck you get your breaker config
private final CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom().build();
private final CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.of(circuitBreakerConfig);
private final CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("suchBreakerMuchWow");
@Bean
public CircuitBreakerAwarePostProcessor circuitBreakerAwarePostProcessor() {
return new CircuitBreakerAwarePostProcessor();
}
public class CircuitBreakerAwarePostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof EnvironmentController) {
return new CircuitBreakerFriendlyEnvironmentController((EnvironmentController) bean);
}
return bean;
}
}
private interface Exclude {
Environment labelled (String name, String profiles, String label);
}
@RequiredArgsConstructor
private class CircuitBreakerFriendlyEnvironmentController implements Exclude {
@Delegate(types = EnvironmentController.class, excludes = Exclude.class)
@NonNull private final EnvironmentController environmentController;
@Override
public Environment labelled(String name, String profiles, String label) {
return circuitBreaker.executeSupplier(() -> {
log.info("such wow");
return environmentController.labelled(name, profiles, label);
});
}
}
}
外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计
外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”-> “外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。按住 Control 键并点按外部服务器对象列表的任意位置,然后选择“安装 postgres_fdw 扩展”。 外
外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计
我们在产品中使用Spring引导微服务,我们有多达10个应用程序。为了记录,我们使用Log4j MDC来生成事务标识,并使用拦截器和过滤器将其传递给服务[超文本传输协议标头]。问题是我们必须在我们所有的应用程序(比如10个)中添加拦截器和过滤器来跟踪这个事务。有没有办法在我们的微服务应用程序中创建jar并注入。 我们能否在所有应用程序中使用最少的代码更改来实现这一点?
我知道如果我们想在外部服务器上部署Spring boot Web应用程序,我们应该排除嵌入式服务器,但如果我们不这样做会发生什么?假设我在jboss外部服务器上部署Spring boot war,但我没有排除tomcat服务器?在这种情况下,Spring boot使用jboss外部服务器,还是仍然使用嵌入式tomcat服务器?
我使用Swagger生成了JAX-RS服务器代码,该代码使用以下命令运行: 现在,服务器的目的之一是在ElasticSearch中索引POST请求。但是,在pom中添加弹性搜索高级rest客户端会使服务器在启动时中断。请参阅底部的错误消息。 我还会在底部附上POM文件的内容。 底部附加的Maven依赖项树。 根据Joakim Erdfelt的建议,我尝试将javax-servlet更改为3.1版和