Spring 教程

Spring 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/spring_framework-spring-cloud-zookeeper-ip-register.html

spring cloud zookeeper 如何以 ip 形式注册服务

Spring 笔记 Spring 笔记


spring cloud zookeeper 默认以 host name 注册到注册中心,如果服务机器之间的 host 域名解析没有打通的话,就会在调用端出现 unknown host exception 异常,这时需要用 ip 来注册服务。

ip 注册方法

spring cloud zookeeper 注册 ip 大致有 2 种方式,分别如下:

第一种在配置文件里,设置 prefer-ip-addresstrue,具体如下:

spring:
  cloud:
    zookeeper:
      discovery:
        prefer-ip-address: true

另外一种在配置文件里,直接设置 instance-host 为 spring cloud 动态获取的本地 ip,如下:

spring:
  cloud:
    zookeeper:
      discovery:
        instance-host: ${spring.cloud.client.ip-address}

需要注意的是,spring cloud 2 里动态 ip 获取要用 ${spring.cloud.client.ip-address},而在 spirng cloud 1 里是 ${spring.cloud.client.ipAddress}。

注册相关源码

spring cloud 的 zookeeper 组件是 spring-cloud-zookeeper-discovery,注册配置属性主要看 ZookeeperDiscoveryProperties 类,相关源码如下:

	...
 
    public ZookeeperDiscoveryProperties(InetUtils inetUtils) {
        //  这里面设置 host 相关信息
		this.hostInfo = inetUtils.findFirstNonLoopbackHostInfo();
		this.instanceHost = this.hostInfo.getHostname();
		this.instanceIpAddress = this.hostInfo.getIpAddress();
	}

	...

	public String getInstanceHost() {
        //  如果设置优先 ip 注册,且存在 ip 地址时,用 ip
		if (this.preferIpAddress && StringUtils.hasText(this.instanceIpAddress)) {
			return this.instanceIpAddress;
		}
        //  否则,用 instanceHost 变量值
		return this.instanceHost;
	}
    
    ...

 

对于微服务的治理而言,核心就是服务的注册和发现。所以选择哪个组件,很大程度上要看它对于服务注册与发现的解决方案。在这个领域,开源架构很多,最 ...
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发 ...
这里收集了 Spring Cloud 使用中常见的问题及相应的解决方案。 ...
我们通过 Spring Cloud 开发项目时,本地调试时想要对测试环境的注册中心进行其他依赖服务的订阅,本身当前项目不想注册到 zooke ...
spring-cloud-dependencies 是一个依赖管理器的 pom 文件,它是对 spring cloud 进行依赖管理。若项目 ...