今天在做一个 Eureka 的集群实现,我是在本电脑上跑的,感觉这个挺有意思,跟大家介绍一下。
首先介绍一下大概的环境背景,自己使用了三个注册中心来搭建Eureka集群,使用的依赖下面已经列出
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
2.2.5.RELEASE
接着是创建yml文件并进行简单的配置,代码如下:
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka7003.com:7003/eureka/,http://eureka7004.com:7004/eureka/
server:
port: 7003
eureka:
instance:
hostname: eureka7003.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7004.com:7004/eureka/
server:
port: 7004
eureka:
instance:
hostname: eureka7004.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/
注意这里我是使用了yml文件,一定要注意缩进。如果大家在意的话其实上面三段代码是有内在的逻辑关系的,这里的每个server port所对应的defaultZone都是另外两个的注册中心访问地址,这样就相当于完成了互相的绑定工作,我想这也是集群的一个重要过程体现,下面就是代码运行结果:
这里的DS Replicas就是表示当前的注册中心依赖了的其他注册中心。
在上面的结果实现过程中还有一个比较关键的点就是,本电脑的路径映射问题,这个路径映射也是需要进行配置的,具体的配置文件在自己电脑的如下路径:
使用任意编辑工具对hosts文件进行编辑,加入如下内容完成映射:
127.0.0.1 eureka7001.com
127.0.0.1 eureka7003.com
127.0.0.1 eureka7004.com
在这里可能存在有文件修改权限的问题,大家记得使用管理员权限进行更改,我这里没遇到这个问题(额,也没有复现问题情景,这个麻烦大家看看别的相关文章的具体解决办法)。
接着创建了一个服务提供者,首先是导入相关的依赖:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.2.5.RELEASE
这个就是 Eureka 的客户端的依赖,从最后的后缀也比较容易辨别,下面是进行yml文件的配置,代码如下:
eureka:
client:
service-url:
defaultZone: http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/,http://eureka7004.com:7004/eureka/
instance:
instance-id: springcloud-provider-8001
这部分的代码主要就是完成客户端到服务端也就是上面代码之间的访问,主要就是配置了客户端对Eureka 集群的访问地址,完成上面的内容就可以达到以下效果。
可以看到客户端会在三个注册中心都有显示,这代表我们已经完成了向 Eureka 集群注册的功能。
还有一个就是大家可以看到最后一张图片上有两行红字,这个大家不用担心,我先复制下来:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
这是 Eureka 自我保护机制的体现,大家可以通过配置文件对 Eureka 自我保护机制进行关闭,但是在我看来默认打开自然有他的道理,推荐使用默认打开,下面是关闭的语句:
server:
enable-self-preservation: false
新的一年继续加油!!!
奥利给!!!