在滚动升级方案中,我想知道在给定的Spring MVC容器中没有活动的HTTP请求(Spring Boot启动,在Jetty上运行)。
这将允许以下流程:
有没有办法告诉我们当前在Spring MVC或Jetty中处理了多少请求?
答案 0 :(得分:2)
您可以使用Jetty的StatisticsHandler
和JMX获取有关活动请求数的信息。
如果您将Jetty用作嵌入式容器(推荐方法),则可以使用EmbeddedServletContainerCustomizer
进行设置:
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
((JettyEmbeddedServletContainerFactory) container)
.addServerCustomizers(new JettyServerCustomizer() {
@Override
public void customize(Server server) {
MBeanContainer mbContainer = new MBeanContainer(
ManagementFactory.getPlatformMBeanServer());
server.addEventListener(mbContainer);
server.addBean(mbContainer);
StatisticsHandler statisticsHandler = new StatisticsHandler();
statisticsHandler.setHandler(server.getHandler());
server.setHandler(statisticsHandler);
}
});
}
};
}
您需要在org.eclipse.jetty:jetty-jmx
上添加依赖关系才能访问MBeanContainer
。
答案 1 :(得分:0)
您可以尝试使用弹簧套筒执行器。在端点/指标上,您应该有字段 “httpsessions.active”
答案 2 :(得分:0)
您可以考虑使用AoP。那对我有用。我项目中的代码段:
public class CommonJoinPointConfig {
@Pointcut("execution(* ru.outofrange.controller.ClaimController.searchClaims(..))")
public void searchClaims() {
}
}
@Aspect
public class CounterAspect {
public CounterAspect() {
}
public CounterAspect(MBeanService mBeanService) {
this.mBeanService = mBeanService;
}
@Before("ru.outofrange.aspect.CommonJoinPointConfig.searchClaims()")
public void beforeMethod() {
counterService.increaseNumberOfRunningRequests();
}
@After("ru.outofrange.aspect.CommonJoinPointConfig.searchClaims()")
public void afterMethod() {
counterService.decreaseNumberOfRunningRequests();
}
}
@Configuration
@ComponentScan(value = {"ru.outofrange.controller", "ru.outofrange.mbean"})
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class RestConfig extends RepositoryRestConfigurerAdapter {
@Autowired
private CounterService counterService;
@Bean
CounterAspect counterAspect(CounterService counterService){
return new CounterAspect(counterService);
}
...
}
一些笔记。在Config中,您应该使用@EnableAspectJAutoProxy(proxyTargetClass=true)
,并且应该将此注释添加到Config中,该配置会扫描包含控制器和服务的包,即,定义的方面,控制器和服务应位于同一Spring上下文中。>