【问题标题】:Is there any way to fetch Hystrix Stream using java SSE clients有没有办法使用 java SSE 客户端获取 Hystrix Stream
【发布时间】:2016-11-06 04:51:12
【问题描述】:

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

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

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

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

有什么办法吗?

谢谢。

【问题讨论】:

    标签: jersey hystrix turbine event-stream resiliency


    【解决方案1】:

    您可以使用 jersey 客户端捕捉任何 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事件。

    【讨论】:

    • 谢谢,我也想这样做,但由于我们不知道确切的名称,所以失败了。
    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 2012-01-20
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多