Есть ли способ получить Hystrix Stream с использованием клиентов Java SSE
Есть ли какой-нибудь способ, которым я могу получить потоки Hystrix (которые производят метрики), так как это поток событий на стороне сервера, поэтому невозможно получить его с помощью обычного http-клиента.
Я пытался использовать SSE на основе Джерси, но он не смог этого сделать.
Всякий раз, когда Hystrix выполняет вызов, он создает некоторые данные метрик, к которым можно получить доступ через сервлет (примерный URL-адрес для которого имеет вид:::/hystrix.stream).
Я хочу захватить ответ этого потока в определенное время.
Есть ли способ сделать это?
Благодарю вас.
1 ответ
Вы можете ловить любые события SSE с клиентом джерси. Вот пример, который читает из событий SSE в качестве источника и передает его всем клиентам, которые вызывают метод ресурса takeEvent:
@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.
Каждый раз, когда клиент вызывает метод ресурса receiveEvent, он будет получать события hystrix.