docker部署springboot微服务时ip问题及consul注册问题

问题1:docker部署springboot微服务在consul中注册时,登录consul控制台发现该微服务的状态为critical状态,看了一下日志,发现是由于这个微服务是docker运行的,导致服务在向consul注册时用的ip为容器的id,consul在解析的时候出错,所以导致服务注册失败。
解决方法:
看了上述的描述之后,自然而然地想法就是在微服务向consul注册时,使用docker的虚拟ip,这样consul就能够解析该服务了(当然我的环境为consul和微服务都运行在同一台宿主机上,如果没有部署在同一台服务器就可能要自己搭建相关网络了)。要达到这样的目的,我们只要在springboot的配置文件application.yml文件中加入一项配置就可以了,如下图:
在这里插入图片描述
加入红色框框的配置之后,再查看启动日志的时候可以发现如下图所示:
在这里插入图片描述address已经变成了docker容器的虚拟ip,这样consul就可以正常解析这个服务了。
问题2:我这边是有两个微服务,一个作为服务的提供者,一个既作为提供者也做为消费者,前者做完问题1的解决方式之后能够正常注册,后者集成feign做远程调用,做完上述操作之后发现该服务的状态还是为critical,还是会导致服务注册失败,后面查了好久发现是consul的健康检查失败导致的,所以要去修改健康检查的问题。
解决方法:
默认的检查的接口为actuator/health,前面再拼上ip+端口进行访问,如果接口能够调通,健康状态就通过。我这里的ip为172.17.0.4,端口为8012,此外还配置了一个contextPath为oa-modeler,查看启动日志,发现
健康检查的url为http://172.17.0.4:8102/actuator/health,直接访问这个路径没有任何返回,开始还以为是没加上contextPath,所以又把url改为http://172.17.0.4:8102/oa-modeler/actuator/health,发现还是不行。
在网上也找了好久的资料发现关于这个问题的说明比较少,好多方案也不能解决我的问题,后来在这个https://www.jianshu.com/p/04ee0a235d2c里面找到了解决方案。里面提到了主要有两种方案:
第一种就是在项目pom文件加上下面的依赖:

org.springframework.boot
spring-boot-starter-actuator

这种方案在我这个项目不起作用,不知道为什么还是注册失败。
第二种方案就是自己重写健康检查的接口,我在项目中写了一个很简单的接口如下:
在然后在配置文件里添加一项如下:这里插入图片描述
然后在配置文件里添加一项如下:
在这里插入图片描述
当然这里actuator/health路径可以改为其它的,只要与配置文件对应起来就可以了,最终用这种方案终于解决了我的问题。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章