NACOS适配Docker部署修改
Eureka在奈飞那边已经是不维护状态,而且在我们之前的使用过程中偶发性会有一些http请求超时的日志,
nacos的长连接实时刷新、分组分集群、权重路由、管理界面、附带配置中心等功能点,让我下定决心准备落地尝新一波~
目前业务服务全部部署在公司的Docker服务上,nacos集群模式是要写死地址在配置文件里面的(2019.01.17),所以在引入nacos作为注册中心我还需要对源码做一些适配修改,修改点如下:
集群模式ip列表注册与刷新
ServerListService的getApacheServerList是读取cluster.conf地址列表的入口,所以通过特有环境变量判断一下当前部署环境,虚机就走原逻辑,若是docker则走自定义逻辑,上报自己最新的服务列表地址。
Docker服务的ip地址与端口映射
部署在docker上,服务真实暴露端口与容器的端口是映射关系,例如nacos在容器里面启动端口为8848,外部端口举例可能为33268,nacos集群列表之间会彼此发送心跳来同步状态,所以涉及此处的地址与端口我们都要修改成对外真实端口,ParamUtil、InetUtils、RunningConfig、ServerListManager等类的相关内容都做动态判断修改即可,幸亏改的地方不多,多希望阿里把这块代码逻辑抽象一下考虑一下docker部署的情况统一全局改动一下就能支持就好了。
服务下线不删除?
改完之后发现服务下线不删除,细细排查一番,发现nacos下线实例是在请求本地localhost+运行server端口号的地址来操作下线的,而我修改了端口映射,所以适配修改的时候要把端口这块也要改一下。
nacos有自动关闭健康检查机制,最开始我发现有实例下线健康状态没变,剔除实例前会判断这个开关状态,在这里我把这个开关状态判断去除掉了, 直接进入心跳时间差判断处理逻辑。
日志路径
日志路径就比较简单了,在SpringApplicationRunListener的实现类的声明周期方法environmentPrepared方法设置自己希望的日志输出路径即可~。
就此,一些小修改完毕,nacos成功部署在公司docker服务上,大家如果有相关需求可以大概参看以下我这个很粗略的介绍,应该是够用的哈哈~~~