webman-nacos
插件是基于 PHP 开发的 Webman 插件生态下的 Nacos 客户端,它封装了 Nacos 的 OpenAPI,让开发者可以在 Webman 框架中轻松实现服务发现和配置管理。 仓库:https://github.com/workbunny/webman-nacos
在软件开发过程中,使用 webman-nacos 插件实现服务注册与配置管理时,常常会遇到各类问题。本文将围绕实际应用中出现的 Nacos 注册报错问题展开详细探讨,并分享有效的解决方案。
在项目部署过程中,将应用重新部署到新服务器时,尽管配置看似无误,但 Nacos 注册环节却出现错误,报错信息为 java.util.concurrent.ExecutionException: com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group [n (truncated...)
。
此前在另一服务器上配置并无问题,此次却出现异常。
相关软件版本信息如下:
workbunny/webman-nacos: ^1.3
查看 Nacos 容器内的日志,发现执行流程在调用 /nacos/v1/ns/instance
时请求出现 pending
状态。初步判断该问题与Nacos Server
配置相关,报错信息表明是服务 leader 选举时存在异常,大概率是环境问题致使 leader 选举失败,与客户端关系不大。
尝试升级 Nacos 版本至 2.5.0 ,同时发现容器内部与宿主机器网络不互通,通过调整网络模式为 network_mode: "host"
后,成功实现注册。不过,未再对 2.4.3 版本环境进行问题复现尝试。
后续该问题再次出现,经过深入排查,最终定位到问题根源:配置中设置的是永久实例,而 Nacos 的健康监测要求 Nacos 集群之间采用 raft 一致性协议。但公司测试环境中的 Nacos 是单节点,单节点默认采用的是 Distro 协议,并非 raft 协议,这就导致了持续报错 Raft : The Raft Group
。
解决此问题的方法很简单,只需在配置中修改为
'ephemeral' => 'true'
即可。
在使用 webman-nacos 插件与 Nacos 进行集成时,以下几点需要特别关注:
通过对此次问题的全面分析与解决,希望能为其他开发者在使用 webman-nacos 插件和 Nacos 进行服务注册与配置管理时提供借鉴,减少类似问题带来的困扰,提升开发与部署效率。