我正在测试在启用AppMesh和服务发现的情况下部署在AWS上的Spring服务的服务间通信。为了能够将消息从服务a发送到服务b,我必须使用OpenFeign客户机来生成代理类。
技术栈
XRay
期望行为
在AWS XRay中,它应该显示一个调用跟踪:
Client -> ServiceA -> ServiceB
实际行为
在AWS XRay中,我可以看到调用跟踪:
Client -> ServiceA Client -> ServiceB

另一个问题是如何告诉OpenFeign使用AWS中的HttpClient?
其他信息
存储库可在:https://github.com/czetsuya/lab-microservice-spring-aws上获得
发布于 2022-05-17 11:59:08
我能够通过在dynamicNamingStrategy中使用tracingFilter来解决这个问题。
@Bean
public Filter tracingFilter(final AWSXRayRecorder awsxRayRecorder) {
log.info("Setting up AWS Xray tracing filter");
return new AWSXRayServletFilter(SegmentNamingStrategy.dynamic(Optional.ofNullable(AWS_XRAY_SEGMENT_NAME).orElse(
"xray-filter")));
}并创建一个HttpClientBuilder bean。
@Bean
public HttpClientBuilder xrayHttpClientBuilder() {
log.info("Setting up AWS xray http client configuration");
return HttpClientBuilder.create();
}AWS XRay现在应该在跟踪中显示HTTP请求:

项目代码可在https://github.com/czetsuya/lab-microservice-spring-aws上使用。
发布于 2022-05-16 06:19:32
还不确定是否找到了解决方案,下面的代码片段可以帮助您:
首先,您需要使用虚拟Http客户端:
implementation 'io.github.openfeign:feign-httpclient:9.5.0'创建使用来自aws x射线的apache http客户端的
@Bean
public Feign.Builder feignBuilder() {
//aws xray http client
CloseableHttpClient client = HttpClientBuilder.create().build();
return Feign.builder()
.retryer(Retryer.NEVER_RETRY)
.client(new ApacheHttpClient(client));
}初始化客户端:
@Bean
CallingService TestSnsPushNotificationApis(@Autowired Feign.Builder builder) {
return builder.target(CallingService.class, "http://localhost:8081");
}https://stackoverflow.com/questions/71565605
复制相似问题