• 2022年11月4日

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次的健康检测)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注