gpt4 book ai didi

tomcat - 如何在应用服务器中实现排队?

转载 作者:行者123 更新时间:2023-11-28 23:42:54 25 4
gpt4 key购买 nike

我正在使用 Apache Geronimo 应用程序服务器,我想在 Geronimo 中自定义队列,例如,所有请求都存储在应用程序服务器队列中,并一个一个地释放。这意味着,应用程序服务器一次只处理一个请求。一旦上一个完成,下一个请求将被释放。我想这样设置。

我希望,你明白我在努力什么。如果有人有任何疑问,请告诉我。

如果有人研究这个概念,建议我。

谢谢

最佳答案

您需要将数据库线程池大小设置为 1(id it it let's you),并将 Servlet 设置为单线程,但对队列没有任何保证,也许队列中的第二个在第一个之前,并且为什么需要这样做?

另一种方法是,每个请求都由 servlet 过滤器过滤,该过滤器从开始到结束响应都锁定同步对象,这确保您没有任何其他线程会获取锁并执行相同操作(至少对于 http 请求)

servlet单线程模式:

public class AloneServlet extends HttpServlet implements SingleThreadModel {
//....
}

the servlet filter approach
public final class HitCounterFilter implements Filter {
private Object lock=new Object();
//...
public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)
synchronized(lock){
chain.doFilter(request, wrapper);
}
}
}

上面的两个示例是针对 http 请求的,您需要对 web 服务等做同样的事情。

请告诉你为什么你希望你的服务器是单线程的,也许有更好的方法可用,我从不建议这些方法:)

方法 2:
先写过滤代码

package com.stackoverflow.supportbuddy
import javax.servlet.*;
import javax.servlet.http.*;

// Implements Filter class
@ServletFilter(urlPatterns={"/pages/myJSP.jsp"})// for Java EE 6+
public class SyncFilter implements Filter {
public void init(FilterConfig config)throws ServletException{}
@Override
private static Object lock=new Lock();
@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws java.io.IOException, ServletException {
//each thread needs to lock the "lock" object and this ensures you only one thread will be forwarded.
synchronized(lock){
chain.doFilter(request,response);
}
}
@Override
public void destroy( ){}
}

然后将过滤器映射到所需的 jsp 文件,例如,如果 jsp 文件位于 /pages 文件夹下,那么您需要将过滤器映射到 web.xml 或在较新版本的 Java EE 中使用注释

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
.....
<filter>
<filter-name>SycnFilter</filter-name>
<filter-class>com.stackoverflow.supportbuddy.SyncFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SycnFilter</filter-name>
<url-pattern>/pages/myJSP.jsp</url-pattern>
</filter-mapping>
.....
</web-app>

终于可以试试了:)

关于tomcat - 如何在应用服务器中实现排队?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17668892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com