apache+tomcat集群出现的两次请求问题解决方案
2016-01-19 16:52
615 查看
自从做了架构师,经常需要解决奇葩问题。。。。。。。。。
现象:点击一次按钮,相应servlet收到两次请求,servlet执行了两次,导致数据错乱。
解决方案:
之所以出现两次请求,并不是浏览器问题,而是集群配置有问题,猜想集群中肯定配置了类似
worker.tomcat1.socket_timeout=10这样的参数,该参数表示apache跟tomcat之间的连接时间
如果超过10秒未返回,则apache会重新再向tomcat发送新的请求。
解决方案:
a、将该参数设置为:
worker.tomcat1.socket_timeout=0或者直接去掉,因为该参数的默认值为0,代表永不超时,即永远
不会发生超时重发引起的多次请求问题;
b、增加另外两个参数配置:
worker.controller.retries=1
worker.tomcat1.retries=1
上述两个参数值为1表示apache不会向tomcat重新发送请求。
以上两种方案最好使用第一种,因为第二种方案虽然没有了两次请求问题,但很有可能页面会出现502网关错误,即:
BadGateway
The proxyserver received an invalid response from an upstream server.
2)、ERR_CONNECTION_RESET问题:
在相应controller执行最后添加一句代码:
Thread.currentThread().join();
表示必须在当前线程执行完之后才返回页面到浏览器。
现象:点击一次按钮,相应servlet收到两次请求,servlet执行了两次,导致数据错乱。
解决方案:
之所以出现两次请求,并不是浏览器问题,而是集群配置有问题,猜想集群中肯定配置了类似
worker.tomcat1.socket_timeout=10这样的参数,该参数表示apache跟tomcat之间的连接时间
如果超过10秒未返回,则apache会重新再向tomcat发送新的请求。
解决方案:
a、将该参数设置为:
worker.tomcat1.socket_timeout=0或者直接去掉,因为该参数的默认值为0,代表永不超时,即永远
不会发生超时重发引起的多次请求问题;
b、增加另外两个参数配置:
worker.controller.retries=1
worker.tomcat1.retries=1
上述两个参数值为1表示apache不会向tomcat重新发送请求。
以上两种方案最好使用第一种,因为第二种方案虽然没有了两次请求问题,但很有可能页面会出现502网关错误,即:
BadGateway
The proxyserver received an invalid response from an upstream server.
2)、ERR_CONNECTION_RESET问题:
在相应controller执行最后添加一句代码:
Thread.currentThread().join();
表示必须在当前线程执行完之后才返回页面到浏览器。
相关文章推荐
- maven部署web工程到tomcat
- centos下安装tomcat服务为开机自启动
- Eclipse中创建Web Maven Project并部署到Tomcat中(Maven 的Web Project加入另一个Maven Project依赖)
- tomcat设置虚拟目录开启文件下载在服务
- eclipse配置tomcat
- centeros下tomcat开机自启动脚本
- Tomcat自定义部署
- 用手机通过tomcat服务器 调试PC本地页面及js
- tomcat安装说明
- 修改tomcat项目的图标
- Linux下Tomcat重新启动
- Tomcat普通用户部署教程(生产服务器)
- tomcat7配置manage app界面
- tomcat7配置远程调试端口
- linux学习-安装jdk和tomcat。
- Tomcat之项目部署
- linux上设置tomcat下web项目只需要ip地址访问省略端口和项目名称
- Tomcat注册为Service
- Apache + Tomcat做负载均衡的几种方式
- 菜鸟调错(十)——启动Tomcat报错“Unsupported major.minor version xxx ”