springcloud 用consul作为注册中心踩的坑

  • Post author:
  • Post category:其他


以前写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 可以了,变成梦寐以求的绿色!

于是赶紧访问我的消费端

哎,终于见到了一直想见的画面。。长舒一口气

这踏马太折磨了。。

大功告成,总的来说就是上面的问题,摸索着前进



版权声明:本文为lihaitao910215原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。