服务发现是基于微服务架构中的一个重要原则。Eureka既是服务端也是客户端。Eureka服务端可以部署成为高可用,每一个服务器都会复制注册的服务状态到其他服务器。
Eureka的搭建使用Spring Boot框架,首先在pom.xml中引入需要的依赖。
这里SpringBoot使用的是2.0.6版本
org.springframework.boot
spring-boot-starter-parent
2.0.6.RELEASE
Spring Cloud使用Finchley.RELEASE版本
UTF-8
UTF-8
1.8
2.0.0.RELEASE
Finchley.RELEASE
2.0.0
spring-cloud-starter-netflix-eureka-server使用的是2.0.2.RELEASE版本。
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
2.0.2.RELEASE
然后再应用启动类上加上注解@EnableEurekaServer。
启动后通过服务端管理页面查看注册的基本信息http://IP:PORT(默认8761)。
application.yml配置如下
server:
port: 8761
spring:
application:
name: register-center
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
# 测试时关闭自我保护机制,保证不可用服务及时剔除
enable-self-preservation: false
# 剔除失效服务间隔,默认60000
eviction-interval-timer-in-ms: 3000
# registerWithEureka、fetchRegistry两个参数是禁用把自己当成Eureka客户端的。
# registerWithEureka:false.取消向注册中心注册
# fetchRegistry:false.取消向注册中心获取注册信息(服务、实例信息)
启动时直接启动即可,默认加载的是application.yml配置文件。
Eureka可以运行多个实例,来保证高可靠和高可用,让他们彼此注册。这是默认的行为,所以你需要做的只是为对方添加一个有效的serviceUrl。以两个peer构成一个集群为例,有效配置如下:
创建application-eureka1.yml,配置如下:
server:
port: 8761
spring:
application:
name: register-center
profiles: eureka1
eureka:
instance:
# 配置通过主机名方式注册
hostname: eureka1
client:
service-url:
defaultZone: http://eureka2:8762/eureka/
register-with-eureka: true
fetch-registry: true
server:
# 关闭保护机制,默认true
enable-self-preservation: false
# 剔除失效服务间隔,默认60000
eviction-interval-timer-in-ms: 3000
创建application-eureka2.yml,配置如下:
server:
port: 8762
spring:
application:
name: register-center
profiles: eureka2
eureka:
instance:
# 配置通过主机名方式注册
hostname: eureka2
client:
service-url:
defaultZone: http://eureka1:8761/eureka/
register-with-eureka: true
fetch-registry: true
server:
# 关闭保护机制,默认true
enable-self-preservation: false
# 剔除失效服务间隔,默认60000
eviction-interval-timer-in-ms: 3000
建议使用域名,上述两个配置都是使用的域名,因此需要先配置hosts:
127.0.0.1 eureka1
127.0.0.1 eureka2
按照如上配置,实现两个注册中心实例相互注册,你中有我,我中有你。
配置启动项如下后,再启动各个实例。
java -jar xxx.jar --spring.profiles.active=8761
java -jar xxx.jar --spring.profiles.active=8762
分别访问eureka1:8761/,eureka2:8762/,可以在registered-replicas
看到都相互注册了,available-replicas
可用分片中可以看到相应的节点,停止一个另一个还可以工作。若available-replicas没有相应节点,则是因为eureka.client.register-with-eureka/eureka.client.fetch-registry为false。
从上图中也可以看到启动了服务网关实例,通过两个注册中心实例中的任意一个都能看到,说明其已经成功注册到注册中心集群中。
注意:若第一个启动的eureka实例报错,这种情况可能是正常的,因为第一个启动的找不到注册中心去注册。等待一段时间,等到他要注册的eureka实例启动了,如果他能够连接注册上去且不会继续报错就是正常的。
https://cloud.tencent.com/developer/article/1328027
https://cloud.tencent.com/developer/article/1081556
https://yq.aliyun.com/articles/693077
服务下线相关参考:
eureka开发时快速剔除失效服务:https://blog.csdn.net/haveqing/article/details/88406592
eureka的几种主动下线服务方式:https://blog.csdn.net/xiaobao5214/article/details/81263445
eureka如何剔除服务:https://jingyan.baidu.com/article/ca00d56c09d971e99eebcfd6.html
eureka强制下线:https://blog.csdn.net/u012394095/article/details/80996172