我们通过插件来做比较麻烦并且还需要考虑重新lb的问题,有一个比较简单的方法是利用nginx的请求重试信号。
Apisix本身默认也有该种设定,不过默认只针对 timeout情况会请求重试
默认请求重试次数是:updateam node 节点数量 -1
相关逻辑在apisix-balancer.lua的 set_balancer_opts
方法中
设置Nginx配置文件,添加请求重试判断:
我们在 ngx_tpl.lua 760行添加如下配置,示例httpcode可更换
proxy_next_upstream error timeout http_500 http_429 non_idempotent;
支持重试的httpcode可以查看 nginx官方proxy-next-upstream文档
apisix在发生请求重试时,打印的日志中 upstream-status
、upstream
会依次将每次请求的结果、上游地址记录出来