SpringCloud之Eureka
Eureka简介
Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含server和client两部分。Spring Cloud将它继承在子项目Spring Cloud Netflix中,从而实现服务的发现与注册。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如IP地址,端口号,服务名称等等),Eureka Server会记录这些信息。
Eureka Client是一个Java客户端,用户简化与Eureka Server的交互。
微服务启动之后,会周期性(默认30秒)的向Eureka Server发送心跳以续约自己的“租期”。
如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将注销这个实例(默认90秒)。
默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例相互之间通过复制的方式实现服务注册表中数据同步。
Eureka Client会缓存服务注册表中的信息。这种方式有一定的优势——首先,微服务无需每次请求都查询Eureka Server,从而降低了Eureka Server的压力;其次,即使Eureka Server所有节点都宕机,服务消费之也可以使用缓存中的信息找到服务提供者并完成调用。
编写Eureka Server
1.pom.xml文件添加如下依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
2.在启动类上添加@EnableEurekaServer注解,声明这是一个Eureka Server。
@SpringBootApplication @EnableEurekaServer public class MicroserviceDiscoveryEurekaApplication { public static void main(String[] args) { SpringApplication.run(MicroserviceDiscoveryEurekaApplication.class, args); } }
在application.properties文件添加一下内容。
server.port=8761 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.service-url.default-zone=http://localhost:8761/eureka/
eureka.client.register-with-eureka:表示是否将自己注册到Eureka Server,默认为ture。由于当前应用就是一个Eureka Server,所以设置为false。
eureka.client.fetch-registry:表示是否从Eureka Server获取注册信息,默认为true。由于这是一个单点的Eureka Server,不需要同步其他Eureka Server节点的数据,所以设置为false。
eureka.client.service-url.default-zone:设置与Eureka Server交互的地址,查询服务和注册服务都要依赖这个地址。默认是http://localhost:8761/eureka;多个地址间可以使用,隔开。
访问http://localhost:8761/我们就可以看到Eureka Server界面
将微服务注册到Eureka Server上
新建一个SpringBoot项目,在pom.xml添加如下依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependencyManageent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
在application.properties中添加一下配置
spring.application.name=microservice-provider-user eureka.client.service-url.default-zone=http://localhost:8761/eureka/ eureka.instance.ip-address=true
spring.application.name:表示将自己注册到Eureka Server上的应用名字
eureka.instance.ip-address:表示将自己的IP注册到Eureka Server。如不配置该属性或者将其配置为false,则表示注册微服务所在操作系统的hostname到Eureka Server。
启动项目,可以在Eureka Server上看到我们注册的服务