springcloud构建eureka服务器(SpringCloud学习篇之Eureka服务注册与发现)
springcloud构建eureka服务器(SpringCloud学习篇之Eureka服务注册与发现)<parent> <modelVersion>4.0.0</modelVersion><?xml version="1.0" encoding="UTF-8"?><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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。eureka包含两个组件:
- Eureka Server:注册中心服务端,用于维护和管理注册服务列表
- Eureka Client:注册中心客户端,向注册中心注册服务和获取服务
接下来,我们来搭建一下项目,本项目使用Idea开发工具。
1.首先创建一个maven主项目(eureka-Greenwich3)
该项目下只有一个pom.xml文件,这个文件将作为父pom文件,其它module项目会继承它,主要起版本依赖控制作用。
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.miaoji</groupId>
<artifactId>eureka-Greenwich3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-Greenwich3</name>
创建好模块之后,修改其pom文件,让它继承父pom文件。
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.miaoji</groupId> <artifactId>eureka-Greenwich3</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.miaoji</groupId> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eureka-server</name> <description>eureka-server服务注册中心</description> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> </project>
修改启动类,增加一个注解@EnableEurekaServer
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class args); } }
修改配置文件
#服务端口 server.port=8080 #应用程序名称 spring.application.name=eureka-server #eureka实例主机名 eureka.instance.hostname=localhost eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/ #声明为eureka server eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
启动程序,访问localhost:8080
3.创建服务提供者模块(eureka-client)
创建步骤同上,然后修改pom文件
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.miaoji</groupId> <artifactId>eureka-Greenwich3</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.miaoji</groupId> <artifactId>eureka-client</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eureka-client</name> <description>eureka-client服务提供者</description> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
修改启动类,增加注解,代表该服务为eureka的客户端
@EnableEurekaClient @SpringBootApplication public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class args); } }
修改配置文件
#服务端口 server.port=8081 #应用程序名称 spring.application.name=eureka-client #eureka服务地址 eureka.client.service-url.defaultZone=http://localhost:8080/eureka/
新建一个HelloController类,增加一个hello方法,输出欢迎信息。
@RestController public class HelloController { @GetMapping("/{name}") public String hello(@PathVariable String name) { return "hello " name; } }
启动项目,访问http://localhost:8081/miaoji
刷新8080端口的页面,可以看到client相关信息已在server中注册了。
eureka的client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。 如果心跳超时,则通常将该实例从注册server中删除。
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.
该报错信息是由于server的自我保护状态导致的,在本机测试的时候可以把renewalPercentThreshold的比值调低,该值默认为0.85,或者将自我保护模式关闭。
修改配置文件
#eureka.server.renewalPercentThreshold=0.49 eureka.server.enable-self-preservation=false
重新启动server,可以看到,没有出现安全警告。
至此,我们已完成服务提供者eureka-client服务在注册中心进行注册的功能了。