2016-07-04 61 views
0

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

我正在尝试使用基于Jersey的SSE,但它无法这样做。

每当hystrix进行调用时,它都会生成一些可以通过servlet访问的度量数据(示例url为::/hystrix.stream)。

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

任何方式来做到这一点?

谢谢。

回答

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仅通过“事件”名称将此听众注册到SSE事件。您必须使用hystrix事件名称的名称进行注册。
每次客户端调用consumeEvent资源方法时,它将收到hystrix事件。

+0

谢谢,我正在尝试做同样的事情,但是由于我们不知道确切的名字,所以我们就这样做了。 – Lovey

相关问题