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服务端注册的更多相关文章

  1. 服务注册发现Eureka之三:Spring Cloud Ribbon实现客户端负载均衡(客户端负载均衡Ribbon之三:使用Ribbon实现客户端的均衡负载)

    在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件中,但这两种方式,无论哪一 ...

  2. 『集群』004 Slithice 集群分布式(多个客户端,基于中央服务器的集群服务)

    Slithice 集群分布式(多个客户端,基于中央服务器的多个集群服务端) 案例Demo展示: 集群架构图 如下: 如上图,上图 展示了 这个集群 的 结构: >一个中央服务器(可以有多个),负 ...

  3. 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock

    使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock 在上一篇<electron快速开始>里讲述了如何快速的开始一个electron的应用程序,既然electr ...

  4. zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。

    zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的.

  5. 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现

    我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端(地址:http://blog.csdn.net/ouyang_pen ...

  6. (转)基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端

    主要包含4个章节: 1. Java 领域的即时通信的解决方案 2. 搭建 Openfire 服务器 3. 使用客户端测试我们搭建的 Openfire 服务器 4. Smack 和 ASmack 一.J ...

  7. Lodop不要把客户端的打印机共享到服务器上 再在客户端打印

    客户端打印需要每个客户端都安装,Lodop插件方式和C-Lodop方式,都是安装一次后,无需再次安装,c-lodop默认也是开机自启动的.集中打印方式,可以打印到某台电脑(作为云主机)上,但是不能打印 ...

  8. redis集群与分片(1)-redis服务器集群、客户端分片

    下面是来自知乎大神的一段说明,个人觉得非常清晰,就收藏了. 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型 ...

  9. CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案

    CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户sessio ...

随机推荐

  1. jstl错误排除:According to TLD or attribute directive in tag file, attribute value does not accept any expressions

    问题描述: 在 JSP 页面中使用 JSTL 标签库,访问 JSP 页面时抛出了如下异常信息: org.apache.jasper.JasperException: /index.jsp (line: ...

  2. 剑指Offer-第一章面试细节总结

    面试细节:行为面试(20%)+技术面试(70%)+应聘者提问(10%) * 行为面试:跳槽者(不要抱怨老板,不要抱怨同事,只为追寻自己的理想而站斗) * 技术面试:1.基础知识点(编程语言,数据结构( ...

  3. C# 操作自定义config文件

    示例文件:DB.config 1.读取 //先实例化一个ExeConfigurationFileMap对象,把物理地址赋值到它的 ExeConfigFilename 属性中: ExeConfigura ...

  4. LeetCode 621. Task Scheduler

    原题链接在这里:https://leetcode.com/problems/task-scheduler/description/ 题目: Given a char array representin ...

  5. CSS 属性:touch-action

    CSS 属性 touch-action 用于指定某个给定的区域是否允许用户操作,以及如何响应用户操作(比如浏览器自带的划动.缩放等). /* Keyword values */ touch-actio ...

  6. js中使用分号的情况

  7. Oracle记录(三) Scott用户的表结构

    在Oracle的学习之中,重点使用的是SQL语句,而所有的SQL语句都要在scott用户下完成,这个用户下一共有四张表,可以使用: SELECT * FROM tab; 查看所有的数据表的名称,如果现 ...

  8. FPGA学习中的代码阅读

    不管是学FPGA还是C语言,任何一种代码的学习都离不开大量的代码阅读,也就是多看,多学习别人的代码.初学者在学习的过程中更为重要的是模仿,模仿别人的代码算法怎么去处理的,模仿多了,代码看的多了,能力自 ...

  9. linux字符界面下root用户无法登录成功

    os: rhel5.6_x86_64 ———————————————————————————————————————————— 故障:图形界面登录正常,其他一切正常,但是切换到字符界面时,输入用户ro ...

  10. 【转】 Pro Android学习笔记(九七):BroadcastReceiver(1):基础小例子

    目录(?)[-] 基础小例子 发送Broadcast intent 运行情况 应用间的广播 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog ...