有没有办法使用java SSE客户端获取Hystrix Stream

时间:2016-07-04 12:39:22

标签: jersey hystrix turbine event-stream resiliency

有没有办法可以获取Hystrix流(产生metrices),因为它是服务器端事件流,因此无法使用普通的http客户端获取它。

我试图使用基于泽西岛的SSE,但它无法这样做。

每当hystrix进行调用时,它会生成一些度量数据,这些数据可以通过servlet访问(样本URL如下::: / hystrix.stream)。

我想在特定时间捕获此流的响应。

有什么办法吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用泽西客户端捕获任何SSE事件。下面是一个从SSE事件读取为源的示例,并将broadcast读取到调用 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仅使用“ event ”名称将此侦听器注册到SSE事件。您必须使用hystrix事件名称注册它 每次客户端调用 consumeEvent 资源方法时,它都会收到 hystrix 事件。