摄于京都平安神宫内的小径
文中源码地址:/TenaciousDWang/Eureka
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
基本原理:
1、服务提供者启动后,会向服务注册中心注册服务信息,并做心跳保持续约状态,保证提供有效可用,如果心跳失败则表示提供者出错,会从注册信息中移除。
2、服务消费者订阅服务注册中心的服务列表周期性更新该列表,里面包含刚才服务提供者注册的信息。
3、服务消费者根据需要和服务列表里的服务提供者信息直接调用服务提供者。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server
服务注册中心,提供服务注册的服务,Eureka Server(服务注册中心)启动后,Eureka Client(服务客户端)会在其中进行注册,然后Eureka Server将会将所有可用服务节点的信息存储到服务注册表中,在Eureka Server主界面中可以直观的看到服务节点的信息。
Eureka服务端支持集群模式部署,通过运行多个实例并要求它们相互注册,可以使Eureka更具弹性和可用性,可以将多个对等方添加到系统中,只要它们至少通过一条边连接到彼此,它们就会在各自之间同步注册,集群中的不同服务注册中心通过异步模式互相复制各自的状态。
Eureka Client
Eureka客户端,分为服务消费者与服务提供者。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。
服务提供者
在应用程序启动时,服务提供者向服务注册中心注册自身提供的服务,并周期性的发送心跳来更新它的服务租约。
服务消费者
在应用程序启动时,服务消费者从服务端查询当前注册的服务信息并把它们缓存到本地并周期行的刷新服务状态。
服务调用
服务消费者在获取注册的服务信息列表后,通过服务名可以获取具体提供服务的名称和信息。服务消费者可以根据自己的需要决定具体调用哪个服务提供者。
开始搭建一个Eureka服务注册中心
使用eclipse开发,Spring Boot版本: 2.1.7,Spring Cloud版本: Greenwich
右键new,使用Spring Starter Projet创建一个Eureka Server.
填写maven必要的信息,这里使用JDK1.8,起个名字叫eureka-server下一步。
选择Spring Cloud Discovery下的Eureka Server依赖点击Finish完成创建。
打开application.properties填写eureka配置参数。
# 端口号(eureka默认端口:8761)server.port=8761# 服务名spring.application.name=spring-cloud-server# 服务注册中心实例的主机名eureka.instance.hostname=localhost# 是否向服务注册中心注册自己(eureka本身是不需要再注册到自己的)eureka.client.register-with-eureka=false# 是否从eureka订阅注册信息eureka.client.fetch-registry=false# 指定服务注册中心的位置eureka服务器的地址(注意:地址最后面的 /eureka/ 这个是固定值)eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/# 服务失效时间,Eureka多长时间没收到服务的renew操作即心跳信息,就剔除该服务,默认90秒eureka.instance.lease-expiration-duration-in-seconds=90# 自我保护模式(缺省为打开)当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),# 那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,# 不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,# 该Eureka Server节点会自动退出自我保护模式eureka.server.enable-self-preservation: true# eureka server清理无效节点的时间间隔 ,默认60000毫秒,即60秒 eureka.server.eviction-interval-timer-in-ms: 60000
在spring boot启动类中添加一个注解@EnableEurekaServer,声明这是一个服务注册中心。
运行启动类,然后访问http://127.0.0.1:8761,即可进入eureka的主界面。
到此,服务注册中心搭建完成。
eureka server 高可用集群搭建
eureka的高可用可以通过多个实例相互注册的方式,您可以将多个对等方添加到系统中,只要它们至少通过一条边连接到彼此,它们就会在各自之间同步注册。
我们复制一份eureka-server项目,修改配置application.properties.
第一台peer1
第二台peer2
同时启动后,我们可以在主页发现两个eureka-server已经启动并可显示在主页面上了。
创建一个服务提供者(eureka client)
接下来我们创建一个eureka客户端,来提供服务,即向eureka server注册自己的服务提供信息。
创建一个eureka client
选择Spring Cloud Discovery下的Eureka Discovery Client。
修改项目的application.properties,添加如下内容:
# 端口号server.port=1234# 提供者服务名,服务与服务之间相互调用的依据spring.application.name=eureka-client-provider# 是否向服务注册中心注册自己(client需要注册自己到server)eureka.client.register-with-eureka=true# 是否需要去检索寻找服务,默认是trueeureka.client.fetchRegistry=true# renew频率,向Eureka服务发送renew信息,默认30秒eureka.instance.leaseRenewalIntervalInSeconds=30# 心跳时间,即服务续约间隔时间(缺省为30s)#eureka.instance.lease-renewal-interval-in-seconds: 5 # 发呆时间,即服务续约到期时间(缺省为90s)#eureka.instance.lease-expiration-duration-in-seconds: 10 # 开启健康检查(依赖spring-boot-starter-actuator)#eureka.client.healthcheck.enabled: true # 指定服务注册中心的位置eureka服务器的地址(注意:地址最后面的 /eureka/ 这个是固定值)eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
修改EurekaClientProviderApplication启动类,添加@EnableEurekaClient声明这是一个eureka客户端。
然后添加一个hello接口我们这里使用@RestController注解。
直接访问http://127.0.0.1:1234/hello?name=JavaBoy,可以正常访问
访问eureka-server ,http://127.0.0.1:8761/
这个时候我们可以看到EUREKA-CLIENT-PROVIDER已经被注册到eureka-server上了。
创建一个服务消费者(eureka client)
修改application.properties添加如下内容:
# 端口号server.port=12345# 服务名spring.application.name=eureka-client-consumer#client隔多久去拉取服务注册信息,默认为30秒eureka.client.registry-fetch-interval-seconds=10# 指定服务注册中心的位置eureka服务器的地址(注意:地址最后面的 /eureka/ 这个是固定值)eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
然后我们修改一下启动类,添加@RestController和@EnableEurekaClient
注解,声明这是一个eureka client,并添加一个haha接口,该接口直接使用restTemplate去发送get请求调用服务提供者提供的服务,地址我们使用org.springframework.cloud.client.discovery.DiscoveryClient直接来获取服务的地址。
启动后查看eureka-server主页,EUREKA-CLIENT-CONSUMER已注册。
直接调用http://127.0.0.1:12345/haha?name=wanghao,返回的是端口1234服务提供者返回的数据。
到此我们就简单的搭建了一个高可用的eureka服务注册中心,并创建了一个服务提供者和服务消费者来注册和调用。
-END-
如果觉得《Spring Cloud (一) Eureka服务注册与发现》对你有帮助,请点赞、收藏,并留下你的观点哦!