转自:https://blog.csdn.net/pengjunlee/article/details/86538997

Spring Cloud是一系列框架的集合,它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,构建了服务治理(服务注册与发现)、配置中心、消息总线、负载均衡、断路器、数据监控、分布式会话和集群状态管理等功能,为我们提供一整套企业级分布式云应用的完美解决方案。

Spring Cloud的服务治理等核心功能主要是通过Spring Cloud Netflix的相关产品来实现,包括:服务发现(Eureka)、断路器(Hystrix)、智能路由(Zuul)和客户端负载均衡(Ribbon)。

本文主要对如何使用Eureka搭建服务注册中心进行介绍,我们先从最简单的单机模式Eureka服务器搭建开始。

关于SpringCloud版本
由于Spring Cloud是诸多子项目集合的综合项目,原则上由其子项目维护自己的发布版本号,也就是我们常用的版本号,如:1.2.3.RELEASE、1.1.4.RELEASE等。因此Spring Cloud为了避免版本号与其子项目的版本号混淆,所以没有采用版本号的方式,而是采用命名的方式。这些版本名称采用了伦敦地铁站的名字,根据字母表的顺序来对应版本时间顺序。比如,最早的Release版本名称为Angel,第二个Release版本的名称为Brixton,以此类推……。而我们在本系列文章所使用的版本名称为:Finchley.SR2,也就是目前的最新版本,其中的SR是service releases的简写,而1则是该版本名称中的第1个版本。其对应的Springboot版本为2.0.6.RELEASE。

关于更多版本的介绍,请参考官网:http://spring.io/projects/spring-cloud

单机模式Eureka注册中心搭建
引入Eureka-Server依赖
新建一个 Maven 工程,并在其 pom.xml 文件中引入依赖,内容如下:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent> <properties>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties> <dependencies>
<!-- Eureka-Server 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<!-- SpringCloud 版本控制依赖 -->
<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>

创建启动类

import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication { public static void main(String[] args) {
new SpringApplicationBuilder(EurekaServerApplication.class).web(WebApplicationType.SERVLET).run(args);
}
}

添加配置
默认情况下,每一个Eureka服务端同时也是Eureka客户端,你需要为它提供(至少一个)service-url 让它用来定位它的同类(其他Eureka服务端),如果你一个service-url 都不提供,服务虽然能够运行并且正常工作,但是它会在你的日志文件中插入很多由于它不能成功注册到同类而生成的噪音日志。 在集群模式下,两个Eureka(一个服务端和一个客户端)通过注册表合并和心跳监控能够让一个独立的Eureka服务端从故障中完美复活(只要还有监控或者弹性运行环境使它保持存活)。在单机模式,我们需要关闭Eureka的这些客户端行为,这样的话它就不会再不停地去尝试连接它的同类并不停地失败了。

在 Springboot的核心配置文件 application.yml 中加入如下配置来关闭Eureka的客户端行为:

server:
port: 8761 eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

其中fetch-registry和register-with-eureka两个配置用来关闭Eureka的客户端行为。

fetch-registry:表示是否从eureka server获取注册表信息,如果是单一节点,不需要同步其他eureka server节点,则可以设置为false;若是集群,则设置为true,默认为true。

register-with-eureka:表示是否将自己注册到eureka server,默认为true。

高可用Eureka注册中心搭建
由于Eureka服务端没有后台存储,但是所有的服务实例都需要不断地向Eureka服务端发送心跳来更新它们在注册表中的状态,所以,这一系列的功能只能在内存中完成的。同时,每一个Eureka客户端都有一个内存缓存存储了Eureka的注册表信息,对服务的请求可以直接从缓存的注册表中获取,并不需要每一次都到Eureka注册表中去获取。

你可以添加多个同类Eureka实例到你的系统中,只要它们彼此之间能够相互连接,它们就能够在彼此之间进行注册表同步,这能够让Eureka具有更高的弹性和可用性。事实上,这也是Eureka的默认行为,所以你唯一要做的就是配置一个有效的同类serviceUrl 来使它生效。

双节点注册中心
修改配置文件
修改上例中的application.yml文件,内容如下:

---
server:
port: 8761
spring:
profiles: peer1
application:
name: eureka-server
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/ ---
server:
port: 8762
spring:
profiles: peer2
application:
name: eureka-server
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/

有了这个YAML文件,我们就能够在一台服务器上通过在启动时指定不同的Spring profile来模拟启动两个主机(peer1和peer2)了。事实上,如果你是在一个知晓自己主机名(默认主机是通过java.net.InetAddress 进行查找)的服务器上运行程序,eureka.instance.hostname 配置项并不是必须的。

修改hosts文件
在hosts文件中加入如下配置:

# Windows:C:\Windows\System32\drivers\etc\hosts
# Linux:/etc/hosts 127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3

启动测试
右键-->Run As --> Run Configurations...,分别以peer1和peeer2 配置信息启动EurekaServerApplication。

--spring.profiles.active=peer1
--spring.profiles.active=peer2

依次启动完成后,浏览器输入:http://peer1:8761/ 效果图如下:

多节点注册中心
修改配置文件
在生产中我们可能需要三台或者大于三台的注册中心来保证服务的稳定性,配置的原理其实都一样,将注册中心分别指向其它的注册中心。这里只介绍三台集群的配置情况,其实和双节点的注册中心类似,修改上例中的application.yml文件,再添加一个 profiles 配置,内容如下:

---
server:
port: 8761
spring:
profiles: peer1
application:
name: eureka-server
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/ ---
server:
port: 8762
spring:
profiles: peer2
application:
name: eureka-server
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/ ---
server:
port: 8763
spring:
profiles: peer3
application:
name: eureka-server
eureka:
instance:
hostname: peer3
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

  

启动测试
分别加载三个profiles的配置启动EurekaServerApplication。

常见问题
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

出现原因:默认情况下,为了防止由于网络问题而造成的已经正常启动的Eureka实例无法成功注册,Eureka会开启自我保护模式,这样即使Eureka实例续约失败也不会从可用列表中被剔除,可继续从注册表中返回并对外提供服务。

解决办法:关闭自我保护模式,将配置 eureka.server.enable-self-preservation 设置为 false 。关闭自我保护之后,提示信息将变为如下内容:

THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

参考文章
https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.0.2.RELEASE/single/spring-cloud-netflix.html

https://www.jianshu.com/p/d32ae141f680

http://spring.io/projects/spring-cloud

【springcloud】Eureka服务注册中心搭建的更多相关文章

  1. SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制

    第四章:服务注册中心 Eureka 4-1. Eureka 注册中心高可用集群概述在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性 问题,不能有单点故障,由于注册中心 eurek ...

  2. [SpringCloud教程]3. Eureka服务注册中心集成

    新微服务项目多半采用Nacos作为服务注册与发现中心,但是旧项目可能使用Eureka.zookeeper.Consul.Nacos作为服务注册中心. 新项目建议使用Nacos作为服务注册中心 Spri ...

  3. SpringCloud IDEA 教学 番外篇 后台运行Eureka服务注册中心

    写在开头 研发过程中经常要做的事就是启动Eureka服务注册中心,每每都要启动一个IDEA,很是困扰.现在分享一个后台启动服务注册中心的方法. 准备工作 1打包一个eureka服务注册中心jar包(注 ...

  4. 小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理

    笔记 7.Eureka服务注册中心配置控制台问题处理     简介:讲解服务注册中心管理后台,(后续还会细讲) 问题:eureka管理后台出现一串红色字体:是警告,说明有服务上线率低 EMERGENC ...

  5. Spring Cloud(二):Eureka 服务注册中心

    前言 服务治理 随着业务的发展,微服务应用也随之增加,这些服务的管理和治理会越来越难,并且集群规模.服务位置.服务命名都会发生变化,手动维护的方式极易发生错误或是命名冲突等问题.而服务治理正是为了解决 ...

  6. SpringCloud之服务注册中心

    1.Eureka 1.1RestTemplate 它提供了多种访问远程http服务的方法,是一种简单便捷的访问restful服务模板类,是spring提供的用于访问Rest服务的客户端模板工具集. 1 ...

  7. Eureka服务注册中心

    Eureka服务注册中心 最近在研究Spring Cloud,发现其中的组件实在是太多了,真的是头大,只能一块一块看,像盲人摸象一样.要想很短时间内掌握Spring Cloud是不可能的,小编就学习一 ...

  8. Eureka服务注册中心相关错误com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect

    启动项目报错如下 原因: 在默认设置下,Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以会出现 com.sun.jersey.api.client.ClientHandlerExce ...

  9. Eureka服务注册中心错误:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect

    报错信息 14:43:45.484 [main] INFO com.netflix.discovery.DiscoveryClient - Getting all instance registry ...

随机推荐

  1. 详解递归(基础篇)———函数栈、阶乘、Fibonacci数列

    一.递归的基本概念 递归函数:在定义的时候,自己调用了自己的函数. 注意:递归函数定义的时候一定要明确结束这个函数的条件! 二.函数栈 栈:一种数据结构,它仅允许栈顶进,栈顶出,先进后出,后进先出.我 ...

  2. CentOS 7安装Python3 笔记

    当前系统为阿里云的CentOS7.3 64位操作系统. 为了能让后续安装的软件(django,uwsgi,nginx等)尽量减少出现bug的几率,先把可能的依赖包都安装上. 一.安装依赖包 yum - ...

  3. jenkins资源下载地址(软件、插件等)

    jenkins资源下载地址(软件.插件等) 1. 镜像1:清华镜像 2 .镜像2:http://mirrors.jenkins-ci.org/ 3. 官方下载地址:https://jenkins.io ...

  4. vue+element实现分页--之--前端分页

    效果图: 访问的数据量小,一次返回所有数据,再次利用elementUI-Table 和el-pagination组件进行展示,关键点事数据的筛选 官网的完整案例 <div class=" ...

  5. AppWeb认证绕过漏洞(CVE-2018-8715)

    影响范围 Appweb 7.0.2及早期版本. 复现 构造头Authorization: Digest username=admin 返回包里包含session 发送POST请求,添加session到 ...

  6. MegEngine TensorCore 卷积算子实现原理

    作者:章晓 | 旷视 MegEngine 架构师 一.前言 2020 年 5 月 Nvidia 发布了新一代的 GPU 架构安培(Ampere).其中和深度学习关系最密切的莫过于性能强劲的第三代的 T ...

  7. JAVAWEB的基本入门(JSP、Tomcat)>从零开始学JAVA系列

    目录 JAVAWEB的基本入门(JSP.Tomcat) 使用idea创建web项目的两种方式 1.直接创建一个web项目(这样创建好的项目可以直接运行) 2.创建一个普通的java项目并配置web模块 ...

  8. node溢出

    在做项目的过程中,项目越来越大,后面导致项目无法正常启动,查了原因是因为node 溢出了. 先看看溢出时报的错 解决办法:  increase-memory-limit插件 1.在package.js ...

  9. 小白学习vue第五天-第二弹(全局局部、父子、注册语法糖,script/template抽离模板)

    全局组件: 就是注册的位置在实例对象的外面 并且可以多个实例对象使用 而局部: 就是在实例对象的内部注册 父组件和子组件的关系 子组件就是在另一个组件里面注册的组件 组件注册语法糖: 就不用Vue.e ...

  10. JVM 内存分配、调优案例

    内存分配 对象优先在Eden区分配 大多数情况下,对象在新生代Eden区中分配.当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC. HotSpot虚拟机提供了-XX:+PrintG ...