2016-07-04 30 views
0

Gibt es eine Möglichkeit, wie ich Hystrix-Streams abrufen kann (was metrices erzeugt), da es ein serverseitiger Ereignis-Stream ist, also nicht mit normalem http abzurufen Klient.Gibt es eine Möglichkeit, Hystrix Stream mit Hilfe von Java SSE-Clients zu holen?

Ich habe versucht, Jersey basierte SSE zu verwenden, aber es ist nicht in der Lage, dies zu tun.

Wann auch immer Hystrix einen Anruf macht, produziert es einige metrics Daten, auf die durch ein Servlet zugegriffen werden kann (Beispielurl für das ist wie: ::/hystrix.stream).

Ich möchte Antwort von diesem Stream zu einer bestimmten Zeit erfassen.

Jeder Weg, dies zu tun?

Vielen Dank.

Antwort

0

Sie können alle SSE-Ereignisse mit dem Trikot-Client abfangen. Hier ist ein Beispiel, das von einer SSE Ereignisse als Quelle und broadcast es zu irgendwelchen Kunden lesen, die consumeEvent Ressource-Methode aufrufen:

@Path("ssetest") 
@Singleton 
public class SSETest { 
private static final SseBroadcaster sseBroadcaster = new SseBroadcaster(); 

private static OutboundEvent convert(InboundEvent in){ 
    OutboundEvent.Builder eventBuilder = new OutboundEvent.Builder(); 
    OutboundEvent out = eventBuilder.comment(in.getComment()) 
      .data(in.readData()) 
      .id(in.getId()) 
      .name(in.getName()) 
      .build(); 
    return out; 
} 

static { 
    Client client = ClientBuilder.newBuilder().register(SseFeature.class).build(); 
    WebTarget target = client.target("http://path/to/the/any/sse/event/producer/such/as/hystrix"); 
    EventSource eventSource = EventSource.target(target).build(); 
    EventListener listener = new EventListener() { 
     @Override 
     public void onEvent(InboundEvent inboundEvent) { 
      sseBroadcaster.broadcast(convert(inboundEvent)); 
     } 
    }; 
    eventSource.register(listener, "event"); 
    eventSource.open(); 
} 

@GET 
@Path("consumeEvent") 
@Produces(SseFeature.SERVER_SENT_EVENTS) 
public EventOutput consumeEvent(){ 
    EventOutput output = new EventOutput(); 
    sseBroadcaster.add(output); 
    return output; 
} 

}

Der statische Teil ein Aufruf an SSE Event-Produzent machen und es Ruft Ereignisse mit EventListener ab. Bitte beachten Sie, dass EventSource diesen Listener nur für die SSE-Ereignisse mit dem Namen "event" registriert hat. Sie müssen es mit dem Namen des hystrix-Ereignisnamens registrieren.
Jedes Mal, wenn ein Client consumeEvent Ressourcenmethode aufruft, wird er die hysttrix Ereignisse erhalten.

+0

Danke, ich habe versucht, das gleiche zu tun, aber es fällt, da wir nicht den genauen Namen kennen. – Lovey