前言
Eureka
是Netflix开发的服务发现框架,主要提供服务发现功能。SpringCloud将它集成在其子项目Spring-Cloud-Netflix中,以实现SpringCloud的服务发现功能。其包含Eureka Server
和Eureka Client
两部分,服务端提供服务注册,当客户端服务启动的时候,会主动向服务端进行注册,服务端会存储所有已经注册服务节点信息。虽然Eureka已经停更了,人们目前讨论更多是Nacos,但是任然有许多公司沿用。
环境准备
- Windows7
- JDK: 8
- Maven:3.6.1
- SpringCloud:Hoxton.SR4
- SpringBoot:2.2.2.RELEASE
工程搭建
工程目录
此文只需关注红框所示部分
创建父工程
-
父POM文件内容
<!-- 统一管理jar包版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.boot.version>2.2.2.RELEASE</spring.boot.version> <spring.cloud.version>Hoxton.SR4</spring.cloud.version> </properties> <!-- 子模块继承之后,提供作用:锁定版本 + 子module不用谢groupId和version --> <dependencyManagement> <dependencies> <!--spring boot 2.2.2--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud Hoxton.SR4--> <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>
创建Eureka Server
创建名称为cloud-eureka-sever7001
的模块工程
-
POM文件内容
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
-
主启动类
@SpringBootApplication @EnableEurekaServer //启用Euerka注册中心功能 public class EurekaServer7001 { public static void main(String[] args) { SpringApplication.run(EurekaServer7001.class, args); } }
-
application.yml文件
# 指定运行端口
server:
port: 7001
# 指定服务名称
spring:
application:
name: EUREKA-SERVER-7001
# 指定主机地址
eureka:
instance:
hostname: localhost
client:
# 指定是否从注册中心获取服务(注册中心不需要开启)
fetch-registry: false
# 指定是否将服务注册到注册中心(注册中心不需要开启)
register-with-eureka: false
service-url:
defaultZone: http://localhost:7001/eureka/ # 配置注册中心地址 不搭建集群,即单机模式则指向自己
创建Eureka Client
创建名称为cloud-consumer-order
的模块工程
- POM文件内容
<dependencies>
<!--eureka-server-->
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
- 主启动类
@EnableDiscoveryClient //表明是一个Eureka客户端
@SpringBootApplication
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
- application.yml文件
# 指定运行端口
server:
port: 8001
# 指定服务名称
spring:
application:
name: CONSUMER-SERVICE-8001
eureka:
client:
register-with-eureka: true #表示向注册中心注册自己 默认为true
fetch-registry: true #是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
service-url:
# 配置注册中心地址
defaultZone: http://localhost:7001/eureka
#Eureka服务列表名称显示设置
instance:
instance-id: ORDER-8001 #实例名称
prefer-ip-address: true #显示访问路径的ip地址
测试
-
启动
cloud-eureka-server7001
和cloud-consumer-order
工程,端口分别为7001和8001; -
访问http://localhost:7001
搭建双注册中心
工程搭建
创建Eureka Server集群
-
将cloud-eureka-server7001模块复制一份
-
修改模块工程名为创cloud-eureka-sever7002
-
由于集群环境在本机,配置hosts文件,通过主机名区分两个Eureka Server
进入C:\Windows\System32\drivers\etc
在hosts文件中添加以下内容:
#Eureka Start
127.0.0.1 eureka01.com
127.0.0.1 eureka02.com
#Eureka End
-
修改配置文件内容
7001工程application.yml文件内容:
server: port: 7001 eureka: instance: hostname: eureka01.com #eureka服务端实例名称 client: register-with-eureka: false #表示不向注册中心注册自己 fetch-registry: false #false表示自己就是注册中心,我的职责就是维护服务实例,并不区检索服务 service-url: # defaultZone: http://localhost:7001/eureka/ # 不搭建集群 单机 指向自己 defaultZone: http://eureka02.com:7002/eureka/,http://eureka01.com:7001/eureka/ # 搭建集群 集群是指向其他eureka
7002工程配置文件内容
server: port: 7002 eureka: instance: hostname: eureka02.com #eureka服务端实例名称 client: register-with-eureka: false #表示不向注册中心注册自己 fetch-registry: false #false表示自己就是注册中心,我的职责就是维护服务实例,并不区检索服务 service-url: # defaultZone: http://localhost:7001/eureka/ # 不搭建集群 单机 指向自己 defaultZone: http://eureka02.com:7002/eureka/,http://eureka02.com:7001/eureka/ # 搭建集群 集群是指向其他eureka
测试
- 启动这两个工程,端口分别为7001,7002;
- 访问http://eureka01:7001
- 访问http://eureka02:7002