SpringCloud02 Eureka知识点、Eureka服务端和客户端的创建、Eureka服务端集群、Eureka客户端向集群的Eureka服务端注册
1 Eureka知识点
按照功能划分:
Eureka由Eureka服务端和Eureka客户端组成
按照角色划分:
Eureka由Eureka Server、Service Provider、Service Consumer组成
Eureka Server:提供服务注册和发现(即:服务注册中心)
Service Provider:服务提供方(即:为其他微服务提供数据资源的服务),将自身的服务信息注册到 Eureka Server 中去供 Service Consumer 使用
Service Consumer:服务消费方(即:需要其他服务提供的数据资源进行逻辑处理的服务),从 Eureka Server 中获取 Service Provider 的信息,从而获取Service Provider提供的数据资源
技巧01:其实大部分微服务可能既是服务提供方也是服务消费方
1.1 Eureka服务端
Eureka服务器用作服务注册服务器,相当于阿里系微服务架构中的Zookeeper。
1.2 Eureka客户端
Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。
2 Eureka服务端创建【单例模式】
创建Eureka相关项目时需要引入SpringCloud的依赖管理器和Eureka服务端依赖
2.1 利用IDEA创建
版本说明:
JDK:1.8
MAVEN:3.5
IDEA:2017.2 旗舰版
2.1.1 创建一个SpingBoot项目
2.1.2 选择相关依赖
选择依赖时只需要选择Eureka Server的依赖就可以,我这里选择其他两个依赖只是为了开发方便而已
技巧01:SpringBoot的版本默认会是最新的,由于我们创建的是SpringCloud相关的项目,所以IDEA会自动为我们引入SprngCloud的依赖管理器;但是SpringCloud依赖管理器的版本和SpringCloud提供的组件的版本是由严格的要求,详情请参见官网;版本对应关系如下:
2.1.3 根据官网的版本要求修改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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.xinagxu</groupId> <artifactId>eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <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>Finchley.SR1</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-web</artifactId>--> <!--</dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </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> </project>
2.1.4 在启动类上添加@EnableEurekaServer注解
@EnableEurekaServer是指明这个项目作为一个Eureka服务端使用
2.1.5 启动应用
启动应用后会报错,错误信息如下:
报错原因:Eureka服务端也会像Eureka客户端一样可以向一个注册中心进行注册,从Eureka的源码中可以看到 Eureka Server 默认的注册中心为:http://localhost:8761/eureka/,由于我们并没有创建这个项目所以创建的Eureka Server项目会不断向这个不存在的注册中心进行注册,所以上面这个错误会不断的出现控制台
解决办法01:关闭Eureka Server向另外注册中心或者只身进行注册的功能【即:关闭Eureka Server的的Eureka Client功能】,在配置文件中添加下面的配置就可以实现这个功能【PS:官方推荐】
技巧01:虽然关闭了Eureka Server向另外注册中心或者自身进行注册的功能,但是控制台还是会报错;但是这次只会出现两次错误信息了,可能我们配置的信息在 Eureka Server 已经向默认的注册中心发起注册请求后才生效才造成的这两次报错信息
技巧02:关闭了Eureka Server向另外注册中心或者只身进行注册的功能后启动Eureka Server后的效果
解决办法02:向另外注册中心或者只身进行注册(由于现在没有其他注册中心,所以本博文将其注册到自身),在配置文件中添加下面的配置就可以实现这个功能:
技巧01:虽然配置Eureka Server向自身进行注册的功能,但是控制台还是会报错;但是这次只会出现两次错误信息了,可能我们配置的信息在 Eureka Server 已经向默认的注册中心发起注册请求后才生效才造成的这两次报错信息
技巧02:配置Eureka Server向自身进行注册的功能后启动Eureka Server后的效果
2.2 利用Maven创建
根据官方文档进行创建即可,待更新......2018年8月25日14:15:10
3 Eureka Server集群
3.1 创建三个Eureka Server项目
按照2.1的步骤进行创建即可,当然直接复制创建好的项目也可以,假设三个Eureka Server节点分别为 peer1, peer2, peer3
3.2 修改各个项目的配置文件
技巧01:启动第一个节点 peer1 时会报错,因为这个节点需要注册到其它两个节点peer2, peer3,而其它两个节点还没启动,所以报找不到注册中心的错误
技巧02:peer1节点的两个注册中心节点peer2,peer3都会成为registered-replicas
技巧03:没有启动的节点 peer2, peer3 会成为 unavailable-replicas,当peer2或者peer3启动后就会成为available-replicas
3.3 Eureka Server集群配置时需要注意的地方
每个Eureka Server 节点的应用名称必须相同,而且每个节点必须开启Eureka Server的注册功能;注册中心必须通过实例名进行连接,不能用localhost;注册中心的实例名通过eureka.client.instance.hostname进行设置
4 Eureka Client创建
4.1 利用IDEA创建
4.1.1 新建一个SpringBoot项目
4.1.2 选择依赖
选择Eureka Client依赖和Web依赖即可
技巧01:如果不选择web相关依赖,那么这个项目就运行不起来
4.1.3 根据SpringCloud官网查看SpringCloud和SpringBoot的版本是否匹配
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.xinagxu</groupId> <artifactId>client02</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>client02</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <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>Finchley.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </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> </project>
4.1.4 设置项目类型
在启动类上添加@EnableEurekaClient是其为一个Eureka Client项目
4.1.5 配置注册中心
4.1.6 启动Eureka Client
打开实例名为peer1的注册中心管理页面可以看到启动的项目已经注册到注册中心去啦
技巧01:虽然在Eureka Client只配置了一个注册中心,但是在其他的注册中心节点中仍然可以Eureka Client的注册信息,这就是使用注册中心集群的好处;而且当Eureka Client配置的那个注册中心挂掉后其余的注册中心节点任然拥有Eureka Client的注册信息(前提是Eureka Client已经通过配置的那个注册中心注册成功啦);如果关掉所有的注册中心和Eureka Client后重新启动Eureka Client没有配置的所有注册中心和Eureka Client,那么Eureka Client将不会注册成功。
4.1.7 Eureka Client 高可用注册
为了保证Eureka Client能在只要有一台注册中心工作正常的情况下都可以注册成功,就必须在Eureka Client中配置好所有的注册中心,各个注册中心之间用逗号隔开
4.2 利用MAVEN创建
根据官网配置进行搭建接口,待更新......
5 本博文参考源码