你可以用泽西客户端捕捉任何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事件。
谢谢,我正在尝试做同样的事情,但是由于我们不知道确切的名字,所以我们就这样做了。 – Lovey