Próbuję użyć spring-cloud-starter-zuul. Mam konfigurację Eureka i zarejestrowałem prostą usługę, którą napisałem jako klient Eureka. Rejestruję dwa wystąpienia na dwóch różnych hostach z dwoma różnymi nazwami aplikacji, więc są to dwie różne usługi w Eureka. Moim celem jest zapewnienie, że jeśli usługa A działa dobrze, a usługa B osiąga słabe wyniki, to nie ma wpływu na proxy dla usługiB.Jak zdobyć wiosenną chmurę zuul, aby użyć innego obwodu dla różnych usług
Jeśli sam uruchomię usługę loadAutAA przez zuul, będę w stanie utrzymać przepustowość 400 TPS bez problemu. Jeśli następnie wyrzucę serviceB i całkowicie go przeładuję i będę miał czas na wszystko, to oczekuję, że serviceA będzie kontynuował przy 400, podczas gdy serviceB flounders, ale zamiast serviceA spadnie do mniej niż 50 TPS i ma kilka błędów dobrze.
Wygląda na to, że wszystkie RibbonCommands spawned przez RibbonRoutingFilter mają ten sam obwód w hystrix, co nie ma dla mnie żadnego sensu. Patrząc w RibbonRoutingFilter, gdzie tworzy RibbonCommand, nie widzę sposobu, aby skonfigurować go do korzystania z innego.
W RibbonRoutingFilter:
RibbonCommand command = new RibbonCommand(restClient, verb, uri,
convertHeaders(headers), convertHeaders(params), requestEntity);
I potwierdziły, że restClient jest różna dla serviceA i serviceB, więc są one za pomocą własnej konfiguracji puli połączeń jak już podano w pliku application.yml, ale nie wciąż jest mnóstwo zanieczyszczeń krzyżowych w jakości usług między usługą A i usługą B.
Wygląda na to, że istnieje inny konstruktor dla RibbonCommand, który jako pierwszy parametr przyjmuje parametr "commandKey", a ten, do którego się odwołuję, po prostu przekazuje go z wartością komendyKlucz "default". Nie widzę żadnych przełączników ani opcji, które mogłyby to zmienić w RibbonRoutingFilter. Według mnie poważnie zagraża to żywotności Zuul, gdy jest wykorzystywany w projekcie wiosenno-chmurze.
Czy istnieje sposób, aby skonfigurować to po wyjęciu z pudełka, aby każda usługa miała swój własny obwód?
Obowiązujące porcje moim pom:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>1.0.0.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
application.yml:
ribbon:
ConnectTimeout: 5000
ReadTimeout: 5000
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 0
OkToRetryOnAllOperations: false
MaxHttpConnectionsPerHost: 200
MaxTotalHttpConnections: 1000
echo1:
ribbon:
ActiveConnectionsLimit: 200
echo2:
ribbon:
ActiveConnectionsLimit: 400
spring:
application:
name: SpringCloudProxywall
server:
port: 8080
zuul:
routes:
echo1:
path: /echo1/**
serviceId: echo1
stripPrefix: false
echo2:
path: /echo2/**
serviceId: echo2
stripPrefix: false
Moja klasa aplikacja:
@Configuration
@ComponentScan
//@EnableCircuitBreaker <-- is already included in EnableZuulProxy
@EnableZuulProxy
@EnableTurbine
@EnableHystrixDashboard
@EnableAutoConfiguration
public class SpringCloudProxywallApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudProxywallApplication.class, args);
}
}
Dziękuję za odpowiedź. Próbuję to potwierdzić. Zaktualizowano do migawki, musiałem jawnie dodać zależność rozrusznika rozruchowego-rozruchowego-uruchamiającego (nie musiałem w RC1.) Bez żadnych innych zmian w kodzie lub konfiguracji nie będzie delegować do mojej usługi niższego rzędu z wyjątkiem "com.netflix.client .ClientException: Load Balancer nie ma dostępnego serwera dla klienta: echo2 ". Eureka jest uruchomiona (nawet zrestartowana) i pokazuje wszystkie usługi z zarejestrowaną instancją i mogę samodzielnie wykonywać usługi. Będę dalej z nim grać. – digitaljoel
Czy masz zależności eureka? Potrzebne są te, aby '@ EnableDiscoveryClient' wiedział, jakie wykrywanie usługi zrobić. –
duh, drugi raz to mnie ugryzło. Nie potrzebowałem żadnej z tych zależności wprost z RC1, więc nawet o tym nie pomyślałem. Dzięki. – digitaljoel