java - 在线程安全的 Spring Controller 中查找队列中有多少请求

标签 java spring-mvc

我正在使用一个 spring Controller ,它从线程安全方法返回一个字符串。 所以我让 Controller 也线程安全。 我想知道队列中同时有多少请求在调用 spring Controller

最佳答案

这是我的建议,您可以如何解决您的问题。

假设你有这个@Controller:

@Controller
public class MyController {

    @Autowired
    private IMyService service;

    @RequestMapping(value = "/myPathName", method = RequestMethod.GET)
    public String home(HttpServletRequest request, Model model) {

        // you synchronized call
        service.callSynchronized(request, model); 

        return "someJsp";
    }

    // +edit
    @ResponseBody
    @RequestMapping(value = "/queueStatus", method = RequestMethod.GET)
    public String home(HttpServletRequest request) {

        // 
        return "inQueue: " + request.getAttribute("inQueue");
    }
}

现在你可以定义一个拦截器并计算执行前后的请求数:

public class RequestsInWorkInterceptor extends HandlerInterceptorAdapter {

    private static final Logger _logger  = LoggerFactory.getLogger(RequestsInWorkInterceptor.class);
    private final AtomicLong counter     = new AtomicLong();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String methodURI = request.getRequestURI();
        long current;
        if("myPathName".equals(methodURI){
            current = counter.incrementAndGet();
            _logger.debug("current {} clients in a queue", current);
        } else {
            current = counter.get(); // just get, no increment
        }

        // +edit: put the count in the request so you can get it in you controller
        request.setAttribute("inQueue", current);
        return super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        String methodURI = request.getRequestURI();
        if("myPathName".equals(methodURI){
            counter.decrementAndGet();
        }
        super.postHandle(request, response, handler, modelAndView);
    }
}

关于java - 在线程安全的 Spring Controller 中查找队列中有多少请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40605128/

相关文章:

java - Spring MVC : What happens if I start a thread in a controller action?

spring-mvc - spring mockMVC,现在得到正确的错误消息 MethodArgumentNotValidException 抛出

java - 如何将两个 URL 路由映射到 Spring MVC (3.0) 中的同一个处理程序方法?

java - 如何在启用换行的情况下获取 JTextArea 中的可见行数?

spring-mvc - 使用 Mockito 时如何清理 Spring 测试中的模拟

java - 与JSE JavaDoc相比,可以存在哪些类层次结构差异?

java - 嵌入式 Java 键值存储

java - 如何在 spring 中配置基于语言环境的日期格式支持

java - 如何使用 ControlsFX 实现 AutoComplete TextField

java - 更改Java程序LookAndFeel不会影响