【问题标题】:How to expose Hystrix Stream on Spring Actuator port?如何在 Spring Actuator 端口上公开 Hystrix Stream?
【发布时间】:2016-11-06 10:14:22
【问题描述】:

我在 Spring Boot 应用程序中使用 Jetty 嵌入式服务器。

为了处理请求,我提供了这样的自定义处理程序。

@Slf4j
@Configuration
@EnableWebMvc
@SpringBootApplication
public class Main {
    public static void main(String... args) {
        new SpringApplicationBuilder().sources(Main.class).run(args);
    }

    @Bean
    public EmbeddedServletContainerCustomizer customizer(JettyRequestHandler myCustomHandler) throws MalformedURLException {
        return new EmbeddedServletContainerCustomizer() {

            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
                if (container instanceof JettyEmbeddedServletContainerFactory) {
                    customizeJetty((JettyEmbeddedServletContainerFactory) container);
                }
            }

            private void customizeJetty(JettyEmbeddedServletContainerFactory jetty) {
                jetty.addServerCustomizers((JettyServerCustomizer) server -> {
                    HandlerCollection handlerCollection = new HandlerCollection();
                    handlerCollection.setHandlers(new Handler[]{myCustomHandler, server.getHandler()});
                    server.setHandler(handlerCollection);
                });
            }
        };
    }
}

我正在标准8080 端口上侦听请求。我还将Spring Boot Actuator 包含在我的项目中以获取一些生产端点(健康等)。它从另一个端口开始:8181

另外,我将 Hystrix 用于断路。

我的问题是如何让 Hystrix Stream 暴露在执行器端口上?

目前我只能通过以下代码在标准端口8080 上公开它:

@Bean
public ServletRegistrationBean hystrixStreamServlet(){
    return new ServletRegistrationBean(new HystrixMetricsStreamServlet(), "/hystrix.stream");
}

但我想在另一个上公开它,让默认的仅用于应用目的。

这些是我的一些依赖:

compile 'com.netflix.hystrix:hystrix-core:1.5.3'
compile 'com.netflix.hystrix:hystrix-metrics-event-stream:1.5.3' 
compile 'org.springframework.boot:spring-boot-starter-actuator:1.3.5.RELEASE' 

我不想使用 Spring Cloud,@EnableHystrix 实际上在执行器端口上提供流。

【问题讨论】:

  • 为什么不用Spring Cloud?这已经提供了您所要求的一切?您至少可以查看该组件的自动配置以获得灵感(它只不过是围绕 netflix 歇斯底里的一些配置)。

标签: spring spring-boot jetty hystrix


【解决方案1】:

实际上,我按照@m-deinum 的建议做了,并且奏效了。我使用了 Spring Cloud Stack。

为了在执行器上实现 Hystrix Stream,我添加了依赖项:

compile group: 'org.springframework.cloud', name: 'spring-cloud-starter', version: '1.1.1.RELEASE'          // spring cloud starter
compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-hystrix', version: '1.1.3.RELEASE'  // spring cloud hystrix starter
compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-ribbon', version: '1.1.3.RELEASE'   // spring ribbon starter

以及Main类上的注解:

@EnableCircuitBreaker
@SpringBootApplication
public class Main {
    public static void main(String... args) {
        new SpringApplicationBuilder().sources(Main.class).run(args);
    }
    // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2016-12-08
    • 2020-05-16
    • 2017-09-26
    • 2017-07-19
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多