开局一张图,截取了本人学习资料中的一张图,很好地展示了Eureka的架构。

Eureka服务器

管理服务的作用。细分为服务注册,服务发现。

所有的客户端在Eureka服务器上注册服务,再从Eureka服务器获取所有注册的客户端的信息列表,包括客户端名称,主机,端口等信息的列表,缓存在本地。客户端之间的调用,则是通过查找该列表上的信息,得到服务提供端(另一个客户端)的访问地址,从而调用服务。

下面开始搭建一个Eureka服务器。

一、首先创建一个父工程

新建一个maven的工程study-spring-cloud-parent,packaging选择pom。parent选择spring-boot-starter-parent的2.3.4.RELEASE。添加spring cloud版本管理的依赖管理。如下:

 <modelVersion>4.0.0</modelVersion>
<groupId>com.pzz.study</groupId>
<artifactId>study-spring-cloud-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<build/>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/>
</parent>

<dependencyManagement>
<dependencies>
<!-- 管理Spring Cloud 的版本使用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

二、创建Eureka服务器

在父工程study-spring-cloud-parent 中新增一个Maven的模块study-eureka-server。添加Eureka的依赖。完整的pom如下:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.pzz.study</groupId>
<artifactId>study-spring-cloud-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>study-spring-cloud-eureka</artifactId>
<name>study-spring-cloud-eureka</name>
<url>http://maven.apache.org</url>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies> <build>
<finalName>study-eureka-server</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

新建一个EurekaServerApp的Java类,增加注解@EnableEurekaServer,表示该项目启动是一个Eureka服务器。增加注解@SpringBootApplication,使用SpringBoot的框架启动。在main函数中编写启动代码,具体如下:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApp {
public static void main( String[] args ){
new SpringApplicationBuilder(EurekaServerApp.class).run(args);
}
}

在resources下新建目录config,新建属性文件application.properties文件。内容如下:

#端口号
server.port=8001
#主机名称
eureka.instance.hostname=localhost
#注册中心设置为false,代表不向注册中心注册自己
eureka.client.register-with-eureka=false
#由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http\://${eureka.instance.hostname}\:8001/eureka/

单机,如果没有 eureka.client.register-with-eureka(默认true)和eureka.client.fetch-registry(默认true),启动报错。

运行EurekaServerApp的main方法,或使用springboot启动项目,成功后,在浏览器输入http://localhost:8001/,如下图,表示Eureka服务器已经搭建完成。

Eureka 服务器集群

服务器集群,构建高可用的服务器。在其中一部分服务器宕掉后,只要还存活其他的Eureka服务器,则不影响客户端的使用。

在上边服务器的基础上,将application.properties的文件名改成application-peer1.properties,并复制粘贴成另一个新的文件application-peer2.properties的文件。分别设置端口号8001和8002,并注释掉eureka.client.register-with-eureka和eureka.client.fetch-registry两个属性。并将eureka.client.service-url.defaultZone属性设置成对方的地址,分别向对方注册自己,以实现服务清单的同步,达到高可用的效果。代码分别如下:

application-peer1.properties的配置:

#端口号
server.port=8001
#主机名称
eureka.instance.hostname=localhost
#注册中心设置为false,代表不向注册中心注册自己
#eureka.client.register-with-eureka=false
#由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
#eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http\://${eureka.instance.hostname}\:8002/eureka/

application-peer2.properties:

server.port=8002

eureka.instance.hostname=localhost
#注册中心设置为false,代表不向注册中心注册自己
#eureka.client.register-with-eureka=false
#由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
#eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http\://${eureka.instance.hostname}\:8001/eureka/

修改启动类,分别使用application-peer1.properties启动和application-peer2.properties启动。

首先使用application-peer1.properties文件启动

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApp {
public static void main( String[] args ){
new SpringApplicationBuilder(EurekaServerApp.class).profiles("peer1").run(args);
}
}

启动后,控制台会输出如下错误日志:

2020-10-29 14:25:15.531 ERROR 17044 --- [           main] c.n.d.s.t.d.RedirectingEurekaHttpClient  : Request execution error. endpoint=DefaultEndpoint{ serviceUrl='http://localhost:8002/eureka/}

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
2020-10-29 14:26:57.825 ERROR 17044 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_UNKNOWN/windows10.microdone.cn:8001 - was unable to refresh its cache! status = Cannot execute request on any known server

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.25.jar:1.9.25]

不用管这些错误日志,因为另一个服务器还没有启动,所以该服务器还不能作为客户端注册到另一个服务器,也不能从另一个服务器抓取客户端的列表。待按照如下代码,再启动一次就ok:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApp {
public static void main( String[] args ){
new SpringApplicationBuilder(EurekaServerApp.class).profiles("peer2").run(args);
}
}

启动成功后,在浏览器输入http://localhost:8001/ 能看到8002已经注册到该服务器

在浏览器输入 http://localhost:8002/,可以看到8001已经注册到该服务器

再过一段时间刷新这两个Eureka服务器的地址,在服务列表会发现都已经被拷贝到自己的注册列表,见下图;

给服务命名、地址IP显示

现在服务列表中的服务(Eureka服务器集群时,自己也在服务列表中)名称如上图是“UNKNOW”。我们新建一个属性文件application.properties来存放这些公用的属性。新增spring.application.name=study-eureka-server属性,给服务命名。运行后如下:

新增eureka.instance.instance-id=${spring.cloud.client.ip-address}\:${spring.application.name}\:${server.port}属性,给列表中的status中的服务添加ip地址,运行后如下

新增eureka.instance.prefer-ip-address=true属性,当鼠标移到注册列表的服务连接上时,显示的是IP,如下图:

完整的application.properties文件内容如下:

spring.application.name=study-eureka-server
#地址显示IP的形式
eureka.instance.prefer-ip-address=true
#eureka注册中心服务列表的名称格式
eureka.instance.instance-id=${spring.cloud.client.ip-address}\:${spring.application.name}\:${server.port}

Spring Cloud 学习笔记 (一)-- Eureka 服务器的更多相关文章

  1. Spring Cloud学习笔记【九】配置中心Spring Cloud Config

    Spring Cloud Config 是 Spring Cloud 团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分.其中服务端 ...

  2. Spring Cloud学习笔记-002

    搭建Spring Cloud注册中心:Eureka 服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号.版本号.通信协议等一些附加信息告诉注 ...

  3. Spring Cloud学习笔记-010

    分布式配置中心:Spring Cloud Config Spring Cloud Config是Spring Cloud团队创建的一个全新的项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外 ...

  4. spring cloud 学习(二)关于 Eureka 的学习笔记

    关于 Eureka 的学习笔记 个人博客地址 : https://zggdczfr.cn/ ,欢迎光临~ 前言 Eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务.Sprin ...

  5. Spring Cloud学习笔记【一】Eureka服务注册与发现

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

  6. Spring Cloud 学习笔记(一)——入门、特征、配置

    [TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...

  7. spring cloud 学习笔记(1)

    SpringCloud + Eureka / Nacos git:https://github.com/huanmsf/springCloudLearn.git 项目目录: 父pom: <?xm ...

  8. Spring Cloud学习笔记-012

    分布式服务跟踪:Spring Cloud Sleuth 随着业务的发展,系统规模也会变得越来越大,各微服务间的调用关系也变得越来越错综复杂.通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务 ...

  9. Spring Cloud学习笔记--Spring Boot初次搭建

    1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...

随机推荐

  1. 刷题[HFCTF2020]EasyLogin

    前置知识 node.js koa框架常用目录,文件 js弱类型语言,空数组与整数1比较时,返回turue jwt令牌 博客讲解: 关于jwt的讲解: http://www.ruanyifeng.com ...

  2. PHAR伪协议&&[CISCN2019 华北赛区 Day1 Web1]Dropbox

    PHAR:// PHP文件操作允许使用各种URL协议去访问文件路径:如data://,php://,等等 include('php://filter/read=convert.base64-encod ...

  3. MySQL存储引擎入门介绍

    什么是MySQL? MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展.阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的. ...

  4. Kafka索引设计的亮点

    前言 其实这篇文章只是从Kafka索引入手,来讲述算法在工程上基于场景的灵活运用.单单是因为看源码的时候有感而写之. 索引的重要性 索引对于我们来说并不陌生,每一本书籍的目录就是索引在现实生活中的应用 ...

  5. 交互式甘特图组件VARCHART XGantt 如何在活动中标注非工作间隔

    甘特图从1998年的第一个商用版本开始就致力于计划编制和项目管理方面控件的研究和开发,经过20多年的积累和沉淀,目前可为软件开发商和最终用户提供最顶级的计划编制和项目管理的控件产品,帮助用户快速的整合 ...

  6. 内存操作【memset】【memcpy】

    void *memset(void *s, int c, unsigned long n); 将指针变量 s 所指向的前 n 字节的内存单元用一个"整数" c 替换,注意 c 是 ...

  7. 音频数据增强及python实现

    博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/13404523.html 音频时域波形具有以下特征:音调,响度,质量.我们在进行数据增强时,最好只 ...

  8. 探究"补阶乘大法的本质"——糖水不等式!

    废话不多说先来康一条例题: 证明: 下面给出题目的一种解法(我称之为"补阶乘大法"): 思考:为什么补上一个阶乘(准确说不是阶乘,是两个数阶乘的之商)项,放缩后再给去掉,就能达到我 ...

  9. Allegro PCB 转 PADS Layout

    操作系统:Windows 10 x64 工具1:Allegro PCB Design XL (legacy) version 16.6-2015 工具2:PADS Layout VX.2.3 参考1: ...

  10. keccak和sha3的区别

    keccak应用 在以太坊中,用keccak哈希算法来计算公钥的256位哈希,再截取这256位哈希的后160位哈希作为地址值. keccak和sha3的区别 sha3由keccak标准化而来,在很多场 ...