Skip to main content

关于provider端用新容器滚动发布,产生Connection refused的问题

用户问题 :#

关于provider端用新容器滚动发布,产生Connection refused的问题


专家官方解答 :#

关于provider端用新容器滚动发布,产生Connection refused的问题,我们可以依托我了解的知识分析其原因,并依据已知的解决方案进行详细步骤的制定。

问题原因分析:

  1. 服务提供者未注册或注册至错误环境内。 在滚动发布过程中,新容器启动的服务提供者可能未能成功注册到服务注册中心(如Nacos),或者注册到了错误的命名空间或集群,导致消费者无法发现并连接。

  2. 网络问题或订阅者应用有问题,导致Nacos-Client未获取到最新的服务提供者地址。 滚动发布期间,网络波动、Nacos客户端与服务端通信异常,或消费者应用内部问题,可能导致消费者未能及时更新服务提供者的最新地址列表。

  3. Nacos-Client已经获取到最新的服务提供者地址,但应用未使用(如有路由规则、权重规则、框架缓存等)。 即使消费者应用已获取到新容器的服务地址,但可能由于框架层面的缓存、路由规则等机制,导致消费者仍在尝试连接旧容器的服务地址,从而引发Connection refused。

解决步骤:

基于上述原因,我们按照我了解的知识中提供的解决方案进行操作:

步骤1:检查服务提供者注册状态

  1. 登录Nacos控制台,查找目标服务提供者服务名,确认新容器启动的服务是否已成功注册且地址符合预期。
  2. 若未发现新容器的服务提供者,需排查服务端注册逻辑,确保新容器在启动后能正常向注册中心注册。

步骤2:确认Nacos-Client获取服务提供者地址情况

  1. 在消费者应用(订阅者)节点上找到Nacos-Client的日志,搜索服务名及相关关键词(如“current ips”),检查日志中记录的服务提供者实例列表是否包含新容器的地址,且数量、状态与控制台一致。
  2. 若日志中未显示新容器地址,检查网络连接、Nacos客户端配置,确保客户端能正常从服务端获取更新。

步骤3:排查应用使用服务提供者地址的情况

  1. 如果日志显示Nacos-Client已获取到新容器地址,但消费者应用仍报Connection refused,需要进一步检查消费者应用使用的服务发现框架(如Feign、Loadbalance、Dubbo等)的缓存、路由规则、权重配置等。
  2. 对于Spring Cloud Feign/Loadbalance/Robin等框架,检查是否有相关缓存配置,如刷新间隔、过期时间等,适当调整以加速地址更新。
  3. 对于Dubbo 2.7.7~2.7.16版本,考虑升级至2.7.17以上或开启推空保护。

步骤4:排查Nacos-Client通信异常

  1. 若Nacos-Client日志中出现超时、域名解析等问题,参照我了解的知识中链接提供的解决方案进行针对性处理,如调整超时参数、检查DNS配置等。
  2. 若存在工具包冲突(如org.reflections),按建议升级相关依赖或Nacos-Client版本。

综上所述,针对provider端用新容器滚动发布时产生的Connection refused问题,我们应按照上述步骤依次检查服务提供者注册状态、Nacos-Client获取服务提供者地址情况、应用使用服务提供者地址的情况以及Nacos-Client通信异常。通过这些排查与相应调整,有望定位并解决Connection refused问题。

---------------

参考链接 :#

  • 专家经验:应用服务调用了依赖服务的提供者时,提示No provider或找不到服务等错误。
  • 专家经验:Nacos客户端和服务端版本的兼容性问题
---------------

答疑服务说明:#

本内容经由技术专家审阅的用户问答的镜像生成,我们提供了专家智能答疑服务,在页面的右下的浮窗”专家答疑“。您也可以访问 : 全局专家答疑 。 咨询其他产品的的问题

反馈#

如问答有错漏,欢迎点:差评给我们反馈。