我在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流暴露在执行器端口上?
目前,我只在标准端口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,它实际上给出了执行器端口上的流。
实际上,我按照@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);
}
// ...
}