我已经使用Spring Cloud (Camden.SR7)
,Eureka (1.3.5.RELEASE)
和几个Config server
微服务设置了Spring Boot (1.5.7.RELEASE)
。微服务之间的通信是通过Feign
客户端执行的(Hystrix
被禁用)。尽管这在开发过程中可以正常工作,但我注意到在相同的微服务之间进行多个同时调用的情况下,在高流量的情况下,线程将陷入死锁,并且未收到任何响应。似乎Feign客户端在多线程中的行为不正确。
我目前使用SEMAPHORE
隔离策略。我还尝试将隔离策略更改为THREAD
并指定一个线程池,但是在这种情况下,我的所有调用都收到403错误。我还尝试了feign-httpclient
作为替代方案,尽管这似乎可以改善这种情况,但它需要使用硬编码的URL,而不是从Eureka
中检索它们,因此我没有继续使用此解决方案。
有什么办法解决此问题吗?我的代码如下
bootstrap.yml:
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE
semaphore:
maxConcurrentRequests: 100000 # basically 'unlimited'
timeout:
enabled: false
circuitBreaker:
enabled: false
fallback:
enabled: false
ribbon:
ConnectTimeout: 180000
ReadTimeout: 180000
FeignClientConfiguration:
@Configuration
public class FeignClientConfiguration {
@Bean
public Retryer retryer() {
return new Retryer() {
@Override
public void continueOrPropagate(RetryableException e) {
throw e;
}
@Override
public Retryer clone() {
return this;
}
};
}
@Bean
public RequestInterceptor requestTokenBearerInterceptor() {
return requestTemplate -> {
requestTemplate.header("Authorization",JWTUtil.getAuthorizationToken());
};
}
FeignClient:
@FeignClient(name = "audit-log-service", configuration = FeignClientConfiguration.class)
public interface AuditLogFeignClient {
@RequestMapping("/audit-log-ms/audit/save")
void saveEntityToDatabase(@RequestBody Object object);
}
答案 0 :(得分:0)
您可以在yml配置文件中添加属性sharedSecurityContext:true。
使用隔离策略THREAD
。 参见here。