Şeridine here in section Customizing the Ribbon Client benim IRule şöyle görünür: Geçiş istek başlıklarını Bir Bahar Bulut uygulama var ve açıklandığı gibi ben kurdele istemci özelleştirme am IRule anahtar parametre
public class HeadersRule extends AbstractLoadBalancerRule {
public HeadersRule() {
}
public HeadersRule(ILoadBalancer lb) {
this();
this.setLoadBalancer(lb);
}
public Server choose(ILoadBalancer lb, Object key) {
//I want the key to contain the headers from the request so I can decide choose the server by one of the headers
}
Bir istirahat Kontrolörü var:
@RequestMapping("/")
public String hello(HttpServletRequest request, HttpServletResponse response) {
//here I want to pass the key parameter to ribbon
return result;
}
IRule'imde bir sonraki sunucuyu başlıklardan birinin değerine göre seçmek istiyorum. nasıl? Benim özel IRule anahtar parametreye başlıklarını geçebilir sınıf AbstractLoadBalancerAwareClient içinde
Edit Olası Yön
(RestTemplate üzerinden ya feign veya Şeridi kullanan başka bir seçenek ... varsa)
public T executeWithLoadBalancer(final S request, final IClientConfig requestConfig) throws ClientException {
RequestSpecificRetryHandler handler = getRequestSpecificRetryHandler(request, requestConfig);
LoadBalancerCommand<T> command = LoadBalancerCommand.<T>builder()
.withLoadBalancerContext(this)
.withRetryHandler(handler)
.withLoadBalancerURI(request.getUri())
.build();
LoadBalancer komutunu bina ve ihmal:
.withServerLocator(request)
işi yapacaktı! Ben ilkbaharda RibbonClientConfiguration sınıf I yapılandırabilir, yapılandırmasından bu yöntemi geçersiz kılabilirsiniz:
@Bean
@Lazy
@ConditionalOnMissingBean
public RestClient ribbonRestClient(IClientConfig config, ILoadBalancer loadBalancer) {
RestClient client = new OverrideRestClient(config);
client.setLoadBalancer(loadBalancer);
Monitors.registerObject("Client_" + this.name, client);
return client;
}
sorun adıyla şey çalışmıyor olmasıdır:
@Value("${ribbon.client.name}")
private String name = "client";
var gibi görünüyor Bu adla yapılması gereken bazı yapılandırmalar, çünkü loadbalancer sunucu listemin bir nedenle her zaman boş olduğunu görüyorum, eğer birisi bu özelliği nasıl yapılandırabileceğimi biliyorsa sorunu çözebileceğine inanıyorum ...
Şerit, geçerli istek hakkında bilgi sahibi değil. Ayrıca başka bir iş parçacığında çalışır. – spencergibb
IRule anahtar parametresini geçmek için geri kalanı şablonuna geçebilir ve altta yatan Şerit'e iletirse, sorunu çözerim sadece nasıl olduğunu bilmiyorum ...(belki de dinlenme şablonuna özel önleyici ekleyebilir veya yük dengeleyici gibi başka bir sınıfı geçersiz kılar ...) –
Bu, aşağıdakilerden sonra bir şey olabilir: https://github.com/jmnarloch/ribbon-discovery-filter-spring-cloud- starter – spencergibb