Есть ли способ получить Hystrix Stream с помощью клиентов Java SSE?

Есть ли способ получить потоки Hystrix (которые производят метрики), поскольку это поток событий на стороне сервера, поэтому его невозможно получить с помощью обычного http-клиента.

Я пытался использовать SSE на основе Джерси, однако он не смог этого сделать.

Всякий раз, когда hystrix делает вызов, он создает некоторые данные метрик, к которым можно получить доступ через сервлет (пример URL-адреса для которого выглядит так: ::/hystrix.stream).

Я хочу зафиксировать ответ этого потока в определенное время.

Любой способ сделать это?

Благодарю вас.


person Lovey    schedule 04.07.2016    source источник


Ответы (1)


Вы можете ловить любые события SSE с помощью клиента Джерси. Вот пример чтения из событий SSE в качестве источника и транслировать его всем клиентам, которые вызывают метод ресурса consumeEvent:

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

}

Статическая часть вызывает производителя событий SSE и получает события с помощью EventListener. Обратите внимание, что EventSource только зарегистрировал этот прослушиватель событий SSE с именем "event". Вы должны зарегистрировать его с именем имени события hystrix.
Каждый раз, когда клиент вызывает метод ресурса consumeEvent, он будет получать события hystrix.

person Alireza    schedule 13.07.2016
comment
Спасибо, я пытался сделать то же самое, но он падает, так как мы не знаем точного названия. - person Lovey; 09.08.2016