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>
pom.xml
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>
pom.xml
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 本博文参考源码

SpringCloud02 Eureka知识点、Eureka服务端和客户端的创建、Eureka服务端集群、Eureka客户端向集群的Eureka服务端注册的更多相关文章
- 服务注册发现Eureka之三:Spring Cloud Ribbon实现客户端负载均衡(客户端负载均衡Ribbon之三:使用Ribbon实现客户端的均衡负载)
在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件中,但这两种方式,无论哪一 ...
- 『集群』004 Slithice 集群分布式(多个客户端,基于中央服务器的集群服务)
Slithice 集群分布式(多个客户端,基于中央服务器的多个集群服务端) 案例Demo展示: 集群架构图 如下: 如上图,上图 展示了 这个集群 的 结构: >一个中央服务器(可以有多个),负 ...
- 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock
使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock 在上一篇<electron快速开始>里讲述了如何快速的开始一个electron的应用程序,既然electr ...
- zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。
zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的.
- 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现
我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端(地址:http://blog.csdn.net/ouyang_pen ...
- (转)基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端
主要包含4个章节: 1. Java 领域的即时通信的解决方案 2. 搭建 Openfire 服务器 3. 使用客户端测试我们搭建的 Openfire 服务器 4. Smack 和 ASmack 一.J ...
- Lodop不要把客户端的打印机共享到服务器上 再在客户端打印
客户端打印需要每个客户端都安装,Lodop插件方式和C-Lodop方式,都是安装一次后,无需再次安装,c-lodop默认也是开机自启动的.集中打印方式,可以打印到某台电脑(作为云主机)上,但是不能打印 ...
- redis集群与分片(1)-redis服务器集群、客户端分片
下面是来自知乎大神的一段说明,个人觉得非常清晰,就收藏了. 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型 ...
- CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案
CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户sessio ...
随机推荐
- 本站上线KMS服务~一句命令激活windows和office
服务器地址:kms.luody.info 更新: 脚本维护更新:2016-09-29 服务端版本:vlmcsd-1108-2017-01-19-Hotbird64 服务作用:在线激活windows和o ...
- elasticsearch snapshot快照备份和恢复
环境:mac 使用brew 安装elasticsearch 1.在 /usr/local/etc/elasticsearch/elasticsearch.yml 文件中配置快照地址 p ...
- 第13篇 PSR-2代码样式
这个规范原文如下: 1. Overview Code MUST follow a "coding style guide" PSR [PSR-1]. Code MUST use 4 ...
- java返回集合为null还是空集合
个人认为在自己写接口时,需要返回集合时返回一个空集合,比如mybatis查询如果返回一个集合,结果为空时也会返回一个空集合而不是null. 那么这样有什么好处呢?最大的好处就是调用方不用在判断是否为n ...
- Java基础知识复习(一)
- JVM内存区域 程序计数器:一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的. Java虚拟机栈:Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接, ...
- sqlbulkcopy 使用DataTable作为数据源的数据类型问题--来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier
今天做批量插入的时候,SQLSERVER总是报错,错误提示“来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier”. 首先核对了一下定义的dataTable ...
- WebSocket :Nginx+WebSocket内部路由策略推送服务器的实现(附可生产环境应用代码)
1.项目背景 前几天写了一篇WebSocket推送的博客:WebSocket :用WebSocket实现推送你必须考虑的几个问题 支持的连接数大概几千个,具体数量依赖于tomcat能并发的线程数,但很 ...
- 1073 Scientific Notation
题意: 给出科学计数法的形式,转化成常规的表示,要求保留所有的有效位数 思路:纯粹的字符串处理问题,注意边界条件即可.如+1.23E+02这种,转化后是123,既不需要补0,也不需要添加小数点. 代码 ...
- thinkphp中的多字段模糊匹配
引言:有时候查询要匹配多个字段.比如查询地址,地址是由多个字段组成的.有省.市.区等等,以及详细地址.这个时候如何查询呢? 实现不同字段相同的查询条件 $User = M("User&quo ...
- Java中静态变量、静态代码块、非静态代码块以及静态方法的加载顺序
在研究单例设计模式的时候,用到了静态变量和静态方法的内容,出于兴趣,这里简单了解一下这四个模块在类初始化的时候的加载顺序. 经过研究发现,它们的加载顺序为: 1.非静态代码块 2.静态变量或者静态代码 ...