consul中.net 6服务被下线问题
使用.net6开发的服务总是被consul下线删除,排查后应该是.net webapi项目设定了服务停止自动注销注册(解决方案1)或者超过一定时间没被访问导致被释放,而再次健康检查时启动时间超过了consul的健康检查超时时间,同时deregisterCriticalServiceAfter的时间未能涵盖再次检查的时间(解决方案2)。
解决方案1:
检查Consul注册方法代码中是否包含了服务停止自动注销服务,例如之前代码中的:
lifetime.ApplicationStopped.Register(() =>
{
consulClient.Agent.ServiceDeregister(registerAgent.ID).Wait();//服务器停止时取消注册
});
如果包含如上代码,把它注释掉或者删除掉。
解决方案2(如果不存在方案1的问题):
1、心跳时间interval设定不要太大,例如5秒、10秒
2、超时时间timeout设定尽量大点,例如10秒、30秒、60秒,尤其是设定了较多的中间件、aop设定等启动需要较多时间的项目。
3、自动下线时间deregisterCriticalServiceAfter设定尽量大点,例如60秒、120秒,这个时间尽量是(interval + timeout) X 3(也就是最少能进行3次的健康检测)