开发环境:
IDEA JDK1.8 Spring Cloud Hoxton.M3 Spring Boot 2.2.0
一、Eureka简介
Eureka是Netflix开发的,一个基于REST服务的,服务注册与发现的组件。它主要包括两个组件:Eureka Server 和 Eureka Client。
Eureka Client:一个Java客户端,用于简化与 Eureka Server 的交互(通常就是微服务中的客户端和服务端)
Eureka Server:提供服务注册和发现的能力(通常就是微服务中的注册中心)
Eureka:是纯正的servlet应用,需构建成war包部署,其使用了 Jersey 框架实现自身的 RESTful HTTP接口,peer之间的同步与服务的注册全部通过 HTTP 协议实现,Eureka定时任务(发送心跳、定时清理过期服务、节点同步等)通过 JDK 自带的 Timer 实现,内存缓存使用Google的guava包实现。 eureka-core 模块包含了功能的核心实现:
com.netflix.eureka.cluster - 与peer节点复制(replication)相关的功能。
com.netflix.eureka.lease - 即”租约”, 用来控制注册信息的生命周期(添加、清除、续约)。
com.netflix.eureka.registry - 存储、查询服务注册信息。
com.netflix.eureka.resources - RESTful风格中的”R”, 即资源。相当于SpringMVC中的Controller。
com.netflix.eureka.transport - 发送HTTP请求的客户端,如发送心跳。
com.netflix.eureka.aws - 与amazon AWS服务相关的类。
二、创建项目
1、File ----- New -----Project
2、Spring Initializr ----- Next
3、等待创建项目中
4、输入 Group 和 Artifact,点击 Next
5、如果出现如下提示,则artifact 禁止大写,否则保存会提示“Cannot Save Settings”
6、选择Spring cloud Discovery -----Eureka Server ---- Next
7、创建完成 点击 Finish 则在新窗口打开新建的工程
8、Spring Cloud 创建成功,目录结构如下:
三、完善项目
由于刚刚创建的文件是初始化默认的项目,需要添加相应注解和配置文件。具体详情如下:
1、生成的pom.xml如下:
<?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.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>cn.mcus</groupId> <artifactId>eurekaserver</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eurekaserver</name> <description>Demo project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.M3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
2、EurekaserverApplication.java启动类添加@EnableEurekaServer注解,Eureka作为服务注册中心的注解。
3、设置配置文件application.properties,SpringCloud支持application.properties 和 )appication.yml两种格式分别如下。
3.1application.properties格式:
#注册中心默认端口就是8761,也可通过下面的方式定义其他端口,defultZone:设置eureka服务器所在地址,注册服务和查询服务都依靠这个地址。 server.port=8761 #eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ #是否注册到eureka服务器,由于自己就是eureka服务器,没有必要注册自身。 eureka.client.registerWithEureka=false #是否从eureka服务器获取注册信息,这里也没必要。 eureka.client.fetchRegistry=false #是否开启自我保护模式,默认为true。 eureka.server.enable-self-preservation=true #续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms) eureka.server.eviction-interval-timer-in-ms=10000
3.2appication.yml格式:
eureka.client.fetchRegistry=false server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
*本项目以application.properties格式为例。
四、运行项目
1、进入EurekaserverApplication.java 启动类,右击选择Run。
2、如下,项目已启动
3、在浏览器中输入 http://localhost:8761/ 服务注册中心启动,出现如下页面
五、项目代码
1、pom.xml
<?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.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>cn.scpro</groupId> <artifactId>eurekaserver</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eurekaserver</name> <description>Demo project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.M3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <!--spring-cloud依赖--> <dependencyManagement> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
2、application.properties文件
#注册中心默认端口就是8761,也可通过下面的方式定义其他端口,defultZone:设置eureka服务器所在地址,注册服务和查询服务都依靠这个地址。 server.port=8761 #eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ #是否注册到eureka服务器,由于自己就是eureka服务器,没有必要注册自身。 eureka.client.registerWithEureka=false #是否从eureka服务器获取注册信息,这里也没必要。 eureka.client.fetchRegistry=false #是否开启自我保护模式,默认为true。 eureka.server.enable-self-preservation=true #续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms) eureka.server.eviction-interval-timer-in-ms=10000
3、EurekaserverApplication.java
package cn.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaserverApplication { public static void main(String[] args) { SpringApplication.run(EurekaserverApplication.class, args); } }
以上就是一个Spring Cloud 的服务注册中心的创建过程。欢迎交流学习。