当我们使用Nginx作为负载均衡使用,使其可以在cluster的不同节点之间进行分发的时候,出现了重复订单问题。重复的订单在不同的节点上各有一个,并且时间间隔相差1分钟,因此是Nginx的超时配置导致的毫无疑问。
当然,默认情况下的Nginx的超时设置理论上来说是合理的,只不过我们的订单服务需要外接门店系统,受限于门店系统不得不把订单系统的超时时间设置的超长。
这当然就导致了--如果没有修改Nginx的超时配置的话--Nginx认为第一次派发出去的节点出了问题,然后向其他的节点重新派发。
修改的关键之处是使Nginx允许的超时时间超过订单服务自己允许的超时时间。
关键属性配置:
proxy_read_timeout 600;
proxy_send_timeout 600;
而proxy_connect_timeout属性保持默认就好,如果只是处理时间长,那连接时间依旧应该很短,2s足以。
以下作为示例:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 1024;
#log_format main '