有什么方法可以获取 Hystrix 流(产生度量),因为它是服务器端事件流,因此无法使用普通的 http 客户端获取它。
我试图使用基于泽西岛的 SSE,但它无法这样做。
每当 hystrix 进行调用时,它会生成一些可以通过 servlet 访问的指标数据(示例 url 类似于:::/hystrix.stream)。
我想在特定时间捕获此流的响应。
有什么办法可以做到这一点?
谢谢你。
有什么方法可以获取 Hystrix 流(产生度量),因为它是服务器端事件流,因此无法使用普通的 http 客户端获取它。
我试图使用基于泽西岛的 SSE,但它无法这样做。
每当 hystrix 进行调用时,它会生成一些可以通过 servlet 访问的指标数据(示例 url 类似于:::/hystrix.stream)。
我想在特定时间捕获此流的响应。
有什么办法可以做到这一点?
谢谢你。
您可以使用 jersey 客户端捕获任何 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 事件。您必须使用 hystrix 事件名称的名称注册它。
客户端每次调用consumeEvent资源方法,都会收到hystrix事件。