Spring BootでアクティブなHTTPセッション数を取得する (改訂版)
先日書いた以下のエントリーですが、修正する内容が多かったので別エントリーとして書くことにしました。
Spring BootでアクティブなHTTPセッション数を取得する
まず、書き方が悪かったのですが、
今回知りたかったのは 現在捌いているリクエスト数
で、
HttpSessionの数ではありませんでした。書き方が紛らわしくてすみません><
@matsumana この実装だとdummyModelメソッドを実行しているアクティブ数になっちゃいますね。純粋なHttpSessionの生存数だと思っていましたが捌いているリクエスト数であればFilterかHandlerInterceptorでincr,decrするのがよいかと
— Toshiaki Maki (@making) September 5, 2014
@matsumana 超簡単ですが、Filter版だと http://t.co/JnFnFl94v2 こんなんです(なぜかgistにアクセスできなかった。。) /metricsでみれます。このHTTPリクエストもカウントされちゃうので適当にurlmappingがひつようですが・・
— Toshiaki Maki (@making) September 5, 2014
makingさんありがとうございます。
という事で、修正しました。
- リクエスト数のカウント処理をFilterで行うように修正
- CounterServiceでincrement/decrementするように修正したので、Jolokiaとdecrementは不要になったから削除
@Configuration
public class AppConfig {
@Autowired
CounterService counterService;
@Bean
public FilterRegistrationBean filterRegistrationBean() {
Filter filter = new Filter() {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
try {
counterService.increment("active-http-sessions");
filterChain.doFilter(servletRequest, servletResponse);
} finally {
counterService.decrement("active-http-sessions");
}
}
@Override
public void destroy() {
}
};
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns("/sample/api/*");
return registrationBean;
}
}
今回のサンプルソースはここに置いてます。