【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败

建立Eureka集群因配置defaultZone时使用localhost导致失败

liar发布于 1 月 31 日

Eureka在实际使用过程中,基本上都是使用集群的方式。在本地测试Eureka集群搭建过程中遇到集群不生效的问题,过程如下:

1.搭建2个节点的注册中心

给eureka-server模块添加中心1对应的配置文件application-ser1.yml

server:

port: 8081

spring:

application:

name: eureka-ser1

eureka:

instance:

hostname: localhost

client:

serviceUrl:

defaultZone: http://localhost:8082/eureka/

fetch-registry: true

register-with-eureka: true

给eureka-server模块添加中心2对应的配置文件application-ser2.yml

server:

port: 8082

spring:

application:

name: eureka-ser2

eureka:

instance:

hostname: localhost

client:

serviceUrl:

defaultZone: http://localhost:8081/eureka/

fetch-registry: true

register-with-eureka: true

通过2个注册中心相互注册,搭建了双节点集群。

2.启动注册中心集群

登录http://localhost:8081/查看中心1界面:
【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败
登录http://localhost:8082/查看中心2界面:
【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败
从注册中心界面可以看出集群没有生效,服务没有共享。
查看日志找到以下内容:
2021-01-31 19:06:44.285 WARN 316 --- [ main] c.n.eureka.cluster.PeerEurekaNodes : The replica size seems to be empty. Check the route 53 DNS Registry
注册中心找不到复制节点,所以集群建立失败。

3.集群建立失败原因分析

在eureka源码com.netflix.eureka.cluster.PeerEurekaNodes找到问题原因,该类为eureka集群节点相关类,

public boolean isThisMyUrl(String url) {

String myUrlConfigured = this.serverConfig.getMyUrl();

return myUrlConfigured != null ? myUrlConfigured.equals(url) : this.isInstanceURL(url, this.applicationInfoManager.getInfo());

}

public boolean isInstanceURL(String url, InstanceInfo instance) {

String hostName = hostFromUrl(url);

String myInfoComparator = instance.getHostName();

if (this.clientConfig.getTransportConfig().applicationsResolverUseIp()) {

myInfoComparator = instance.getIPAddr();

}

return hostName != null && hostName.equals(myInfoComparator);

}

这两个方法会把满足hostName.equals(myInfoComparator)这个条件的集群节点删除掉,即配置文件中的eureka.instance.hostname与eureka.client.serviceUrl.defaultZone中服务器主机名,因为上文中配置的都是localhost,所以集群节点都被删除,导致集群找不到节点。

4.修改eureka.instance.hostname重启服务

application-ser1.yml修改为:

eureka:

instance:

hostname: ser1

application-ser2.yml修改为:

eureka:

instance:

hostname: ser2

重新启动,查看注册中心1与2界面如下图:
【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败
查看日志,也可找到集群建立日志:

2021-01-31 20:28:12.251  INFO 1828 --- [           main] c.n.eureka.cluster.PeerEurekaNodes       : Adding new peer nodes [http://localhost:8081/eureka/]

2021-01-31 20:28:12.280 INFO 1828 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson

2021-01-31 20:28:12.281 INFO 1828 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson

2021-01-31 20:28:12.282 INFO 1828 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml

2021-01-31 20:28:12.282 INFO 1828 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml

2021-01-31 20:28:12.478 INFO 1828 --- [ main] c.n.eureka.cluster.PeerEurekaNodes : Replica node URL: http://localhost:8081/eureka/

5.启动客户端进行验证

application.yml配置:

server:

port: 8890

spring:

application:

name: eureka-cli

eureka:

client:

register-with-eureka: true

fetch-registry: true

service-url:

defaultZone: http://localhost:8081/eureka/,http://localhost:8082/eureka/

启动后查看注册中心1和2界面如下:
【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败

大工告成,成功建立了eureka集群,完美解决问题。

javaspring后端springboot

阅读 5发布于 1 月 31 日

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

avatar

liar

1 声望

0 粉丝

0 条评论

得票时间

avatar

liar

1 声望

0 粉丝

宣传栏

Eureka在实际使用过程中,基本上都是使用集群的方式。在本地测试Eureka集群搭建过程中遇到集群不生效的问题,过程如下:

1.搭建2个节点的注册中心

给eureka-server模块添加中心1对应的配置文件application-ser1.yml

server:

port: 8081

spring:

application:

name: eureka-ser1

eureka:

instance:

hostname: localhost

client:

serviceUrl:

defaultZone: http://localhost:8082/eureka/

fetch-registry: true

register-with-eureka: true

给eureka-server模块添加中心2对应的配置文件application-ser2.yml

server:

port: 8082

spring:

application:

name: eureka-ser2

eureka:

instance:

hostname: localhost

client:

serviceUrl:

defaultZone: http://localhost:8081/eureka/

fetch-registry: true

register-with-eureka: true

通过2个注册中心相互注册,搭建了双节点集群。

2.启动注册中心集群

登录http://localhost:8081/查看中心1界面:
【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败
登录http://localhost:8082/查看中心2界面:
【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败
从注册中心界面可以看出集群没有生效,服务没有共享。
查看日志找到以下内容:
2021-01-31 19:06:44.285 WARN 316 --- [ main] c.n.eureka.cluster.PeerEurekaNodes : The replica size seems to be empty. Check the route 53 DNS Registry
注册中心找不到复制节点,所以集群建立失败。

3.集群建立失败原因分析

在eureka源码com.netflix.eureka.cluster.PeerEurekaNodes找到问题原因,该类为eureka集群节点相关类,

public boolean isThisMyUrl(String url) {

String myUrlConfigured = this.serverConfig.getMyUrl();

return myUrlConfigured != null ? myUrlConfigured.equals(url) : this.isInstanceURL(url, this.applicationInfoManager.getInfo());

}

public boolean isInstanceURL(String url, InstanceInfo instance) {

String hostName = hostFromUrl(url);

String myInfoComparator = instance.getHostName();

if (this.clientConfig.getTransportConfig().applicationsResolverUseIp()) {

myInfoComparator = instance.getIPAddr();

}

return hostName != null && hostName.equals(myInfoComparator);

}

这两个方法会把满足hostName.equals(myInfoComparator)这个条件的集群节点删除掉,即配置文件中的eureka.instance.hostname与eureka.client.serviceUrl.defaultZone中服务器主机名,因为上文中配置的都是localhost,所以集群节点都被删除,导致集群找不到节点。

4.修改eureka.instance.hostname重启服务

application-ser1.yml修改为:

eureka:

instance:

hostname: ser1

application-ser2.yml修改为:

eureka:

instance:

hostname: ser2

重新启动,查看注册中心1与2界面如下图:
【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败
查看日志,也可找到集群建立日志:

2021-01-31 20:28:12.251  INFO 1828 --- [           main] c.n.eureka.cluster.PeerEurekaNodes       : Adding new peer nodes [http://localhost:8081/eureka/]

2021-01-31 20:28:12.280 INFO 1828 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson

2021-01-31 20:28:12.281 INFO 1828 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson

2021-01-31 20:28:12.282 INFO 1828 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml

2021-01-31 20:28:12.282 INFO 1828 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml

2021-01-31 20:28:12.478 INFO 1828 --- [ main] c.n.eureka.cluster.PeerEurekaNodes : Replica node URL: http://localhost:8081/eureka/

5.启动客户端进行验证

application.yml配置:

server:

port: 8890

spring:

application:

name: eureka-cli

eureka:

client:

register-with-eureka: true

fetch-registry: true

service-url:

defaultZone: http://localhost:8081/eureka/,http://localhost:8082/eureka/

启动后查看注册中心1和2界面如下:
【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败

大工告成,成功建立了eureka集群,完美解决问题。

以上是 【Java】建立Eureka集群因配置defaultZone时使用localhost导致失败 的全部内容, 来源链接: utcz.com/a/111348.html

回到顶部