2015-01-21 9 views
8

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); 
    } 
} 

Odpowiedz

5

Myślę, że jeśli używasz migawkę, która jest już domyślny (inny obwód na jeden backend): https://github.com/spring-cloud/spring-cloud-netflix/issues/160.

+0

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

+0

Czy masz zależności eureka? Potrzebne są te, aby '@ EnableDiscoveryClient' wiedział, jakie wykrywanie usługi zrobić. –

+0

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

Powiązane problemy