Eureka是Spring Cloud Netflix微服务套件中的一部分,Eureka是一个服务注册和发现模块。
Eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。
客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。
首先打开Idea,创建一个项目,作为父工程。
再新建一个model,作为Eureka的Server。
选择在下面的界面中,选择Eureka-Server,然后点击完成即可。
创建完的pom文件如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>cn.ponytechgroupId>
<artifactId>eurakeartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>eurakename>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.3.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
<spring-cloud.version>Finchley.RELEASEspring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
prject>
而后,在启动类EurakeApplication前,添加@EnableEurekaServer。
@SpringBootApplication
@EnableEurekaServer
public class EurakeServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurakeServerApplication.class, args);
}
}
再在application.properties中声明端口号,我这里用了9000作为端口号, 需要通过声明eureka.client.register-with-eureka=false和eureka.client.fetch-registry=false来表明自己是一个Eureka server而不是client。
server.port=9000
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
再运行项目,访问http://localhost:9000就会出现如下图所示的页面。
在没有注册服务时,No application available,没有服务被发现,如图中圈红的部分表示的一样。
搭建的大致步骤和前者相类似,但是在选择要引入的jar包时,需要选择Eureka Discovery。
项目搭建完成的pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>cn.ponytechgroupId>
<artifactId>eurakeartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>eurakename>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.3.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
<spring-cloud.version>Finchley.RELEASEspring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
而后,我们需要在项目启动类中,添加@EnableEurekaClient。
@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurakeClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurakeClientApplication.class, args);
}
@Value("${some.words}")
String words;
@RequestMapping("/welcome")
public String home(@RequestParam String name) {
return name+" 欢迎您,这里有一些话想对你说: " +words;
}
}
同样的,我们也需要在application.properties中声明端口号,及一些配置。
server.port=9001
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
spring.application.name=welcome
some.words=Welcome to Spring Cloud
再运行项目,访问http://localhost:9001/welcome?name=Cheng
浏览器中出现下图的界面,name后面的值可以自己定义。
我们再回到9000端口的Eureka Server中,就有了我们刚刚注册的服务了。
红色的那句话表示Eureka进入了自我保护模式,保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。