以前写springcloud相关的demo都是用eureka作为注册中心来尝试的,一切顺利。
闲来无事,eureka目前已经不免费了,所以以后工作应该很少会用到,所以就尝试用consul作为注册中心试一把
我是windows,所以安装可参考:
https://blog.csdn.net/it_lihongmin/article/details/91357445
但是总是想着很简单,但是做起来真是费劲,搞了半天,才调通一个接口
看我踩了那些坑
第一个坑
生产者进行服务注册时,
是这样一个图,看到节点是ok,但是后面的serviceCheck是红叉号,当时觉得没啥,因为配置了actuator,访问时ok的
没注意,以为是可用的。我的yml配置:
cloud: consul: host: localhost port: 8500 discovery: tags: vsersion=1.0 health-check-interval: 5s service-name: order-provider instance-id: ${spring.application.name}:${spring.cloud.consul.port}:${random.value} # 是否开启注册发现服务 enabled: true #register: true health-check-url: /actuator/health
第二个坑
写了个consumer,进行了简单的配置:
yml
cloud: consul: host: localhost port: 8500 discovery: tags: vsersion=1.0 health-check-url: /actuator/health health-check-interval: 5s service-name: user-consumer instance-id: ${spring.application.name}:${spring.cloud.consul.port}:${random.value} #enabled: true register: false
代码:
configure
但是我进行真正访问的时候:
一直查了半天,改了半天,就是不行。
后面看到一篇文章,说loadBalance必须在configure中配置,不能在使用的时候用那个,于是改了下位置,把loadBalance注解放在了configure中的实例化方法上。于是再次尝试调用
如图,换了个错,上面的错没有了,直觉感觉比上次错误好了点,上面的错误是肯本不识别这个访问地址,这个错误应该是注册中心没有好用的服务,但是我看的是明明有服务啊,于是各种百度了起来。
but,百度了半天,并没有什么收获,主要是consul作为注册中心的比较少。
我看到别人的serviceCheck是绿色的,我的是红色的,觉得就是我的服务没有注册上去
于是又加上了上面注释掉的那行:
#register: true
这个应该是要不要把服务注册上去,但是我在注册中心都能看到服务了,所以貌似这个不知道啥情况了,先试一下再说吧。
然并卵
疯了快。。。
于是我把苗头放在了serviceCheck上,我觉得这个应该绿色的,也就是ok的。他是个红叉,所以调用者认为注册中心没有可用的服务,于是又开始了又一轮的查找问题。。
看他这个错,是访问actuator/health 不行,但是我用浏览器直接访问是ok的啊
于是,死马当活马医吧,我把这个health-check-url给干掉,不配置这个了。
我去,貌似看到希望了,serviceCheck 可以了,变成梦寐以求的绿色!
于是赶紧访问我的消费端
哎,终于见到了一直想见的画面。。长舒一口气
这踏马太折磨了。。
大功告成,总的来说就是上面的问题,摸索着前进