springcloudconsul如何使用ip注册服务

这篇文章主要为大家展示了“spring cloud consul如何使用ip注册服务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spring cloud consul如何使用ip注册服务”这篇文章吧。

十余年的大同网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整大同建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“大同网站设计”,“大同网站推广”以来,每个客户项目都认真落实执行。

我测试spring cliud使用consul作为注册中心的时候,发现服务注册的时候,注册的都是hostname,比如:

注册了一个commonservice,在consul中是这样的:

{
  "ID":"commonservice123",
  "address":"testcommonserver"
  ........
}

这肯定是不对的。

加入我有一个服务payservice需要调用commonservice,payservice从consul中获取的commonservice的地址是testcommonserver,而payservice所在的服务器地址是121.57.68.98上,这台服务器无法解析hostname是testcommonserver的服务器的ip地址,无法调用commonservie,这时候就会报下面这个错误:

unKnownHostException
.......

为了解决这个问题,我需要在注册服务的时候,让服务以ip的方式注册,我的测试环境是:

  • spring cloud Finch2ey.SR2

  • consul v1.4.3

修改bootstrap.yml配置文件:

spring:
 cloud:
  consul:
   host: xxx.xxx.xxx.xxxx
   port: 8500
   discovery:
    prefer-ip-address: true //这个必须配
    tags: version=1.0
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}
    healthCheckInterval: 15s
    health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health

${spring.cloud.client.ip-address}这个属性是spring cloud内置,用来获取ip,不同的spring cloud版本可能稍有不同,如果想要确定自己的版本是什么样的,可以查看这个文件:

HostInfoEnvironmentPostProcessor

  @Override
  public void postProcessEnvironment(ConfigurableEnvironment environment,
      SpringApplication application) {
    InetUtils.HostInfo hostInfo = getFirstNonLoopbackHostInfo(environment);
    LinkedHashMap map = new LinkedHashMap<>();
    map.put("spring.cloud.client.hostname", hostInfo.getHostname());
    map.put("spring.cloud.client.ip-address", hostInfo.getIpAddress());
    MapPropertySource propertySource = new MapPropertySource(
        "springCloudClientHostInfo", map);
    environment.getPropertySources().addLast(propertySource);
  }

这时候再启动项目测试,发现注册地址变了:

{
  "ID":"commonservice123",
  "address":"10.52.xx.xx"
  ........
}

注册的address变成了服务的内网地址,如果其它服务和commonservice在同一个网络中,可以通过内网访问,这样也是可以的,但是如果内网不能访问,其它服务仍然不能访问,这时候就需要注册服务的时候以公网的ip注册才行。
修改bootstrap.yml配置文件:

spring:
 cloud:
  consul:
   host: xxx.xxx.xxx.xxx
   port: 8500
   config:
    data-key: data
    format: yaml
   discovery:
    prefer-ip-address: true //这个必须配
    tags: version=1.0
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}
    healthCheckInterval: 15s
    health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health
  inetutils:
   preferred-networks:
    - 公网ip1
    - 公网ip2

可以看到增加一个inetutils配置,这个配置是spring cloud的网络工具类,这个配置的含义是如果获取ip时获取到多个ip(内网、外网),就优先选择我配置的ip中存在的ip,这样再测试就会发现,注册service的时候就变成了公网ip。

以上是“spring cloud consul如何使用ip注册服务”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


标题名称:springcloudconsul如何使用ip注册服务
链接地址:http://cdiso.cn/article/poehso.html

其他资讯