Mam aplikacji Wiosna Chmura i ja dostosowywania klienta taśmą jak wyjaśniono here in section Customizing the Ribbon Client mój IRule wygląda następująco:nagłówki żądania podaje do Ribbon IRule kluczowym parametrem
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
}
Mam kontroler rekreacyjne:
@RequestMapping("/")
public String hello(HttpServletRequest request, HttpServletResponse response) {
//here I want to pass the key parameter to ribbon
return result;
}
Chcę w moim IRule wybrać następny serwer według wartości jednego z nagłówków. Jak mogę przejść do mojego nagłówki zwyczaj IRule parametru klucza? (Przez RestTemplate lub udawać, lub jeśli masz inną opcję, która używa Ribbon ...)
Edycja możliwego kierunku
w klasie AbstractLoadBalancerAwareClient
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();
budynku komendy LoadBalancer i pomijając:
.withServerLocator(request)
zrobiłby to zadanie! mogę zastąpić tę metodę od konfiguracji, na wiosnę RibbonClientConfiguration klasa mogę skonfigurować:
@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;
}
Problemem jest to, że coś z nazwą nie działa:
@Value("${ribbon.client.name}")
private String name = "client";
Wydaje się, że niektóre konfiguracje, które powinny być wykonane z tą nazwą, ponieważ widzę, że moja lista serwerów loadbalancer jest zawsze pusty z jakiegoś powodu, jeśli ktoś wie, jak skonfigurować tę właściwość Wierzę, że może rozwiązać problem ...
Wstążka nie ma informacji o bieżącym żądaniu. Działa również w innym wątku. – spencergibb
Gdybym mógł przekazać kluczowy parametr IRule, wybrałbym funkcję do reszty szablonu i przerzuci go do podstawowej wstążki, która rozwiąże problem, po prostu nie wiem jak ...(być może dodanie niestandardowego przechwytywacza do szablonu odpoczynku lub nadpisanie innej klasy, takiej jak moduł równoważenia obciążenia ...) –
Może to być wzór do naśladowania: https://github.com/jmnarloch/ribbon-discovery-filter-spring-cloud- starter – spencergibb