Spring Cloud引入Eureka组件,完善服务治理

简介

Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架构中的服务治理功能。

Spring Cloud Eureka 是一个基于 REST 的服务,并提供了基于 Java 的客户端组件,能够非常方便的将服务注册到 Spring Cloud Eureka 中进行统一管理。

部署 Eureka Server

1.创建一个名为 eureka-server 的 Spring Cloud 的项目(略)

2.引入 eureka-server 依赖(maven)

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

3.开启 EurekaServer
在启动类上添加 @EnableEurekaServer注解,开启 EurekaServer 的自动装配功能。

4.修改服务端口为8761

5.修改 register-with-eureka 配置
添加一个eureka.client.register-with-eureka=false的配置,作为EurekaServer可以不将自己的实例注册到 Eureka Server 中,如果是集群部署设置为true(不配置默认值也是true)。

6.修改 fetch-registry 配置
添加一个 eureka.client.fetch-registry=false 的配置,表示不从 Eureka Server 中获取 Eureka 的注册表信息,如果是集群部署设置为true(不配置默认值也是true)。

7.添加defaultZone配置
添加一条配置eureka.client.service-url.defaultZone=http://localhost:8761/eureka/(如果不加这个的话又自定义了端口,可能会报错Connect to localhost:8761 timed out)

8.启动 Eureka Server,访问 http://localhost:8761/,如果顺利的话可以看到如下成功页面

至此,一个简单的Eureka注册中心就完成了,后面实战中的 Eureka Client 都会注册到这个注册中心。上面的demo只是一个单机部署,接下里我们看看我们要部署多个Eureka节点时怎么做。

Eureka Server 集群部署

集群部署一般有两种情况,一是伪集群部署,二是真正的集群部署。

集群部署,我们可以在多台物理机上部署,这样多个实例可以用同一个端口,不会出现伪集群端口冲突的问题,更推荐这种方式,性能更高,稳定性也更好。

伪集群部署一般说的是在同一台物理机器上部署多个节点,这时候端口就必须不一样,否则启动的时候会出现端口冲突;

伪集群部署示例:

假设要部署3个节点:master/slave1/slave2

1.在application.yml配置定义三个节点的端口:

port:
 master: 8761
 slave1: 8762
 slave2: 8763

2.我们可以分别创建三个配置文件application-master.yml、application-slave1.yml、application-slave2.yml,三个配置文件除了有冲突的地方端口不一样,其他配置完全一样

# application-master.yml
server:
 port: ${port.slave1} # 服务端口

# application-master.yml
server:
 port: ${port.slave1} # 服务端口

# application-slave2slave2.yml
server:
 port: ${port.slave2} # 服务端口

# 以下配置三个配置文件都一样
eureka:
 client:
 register-with-eureka: true #不将自己的实例注册到 Eureka Server
 fetch-registry: true #不从 Eureka Server 中获取 Eureka 的注册表信息
 service-url:
  defaultZone: http://127.0.0.1:${port.master}/eureka/,http://127.0.0.1:${port.slave1}/eureka/,http://127.0.0.1:${port.slave2}/eureka/
 instance:
 hostname: eureka-server
 server:
 enable-self-preservation: true # 开启自我保护机制,默认也是开启的

3.IDEA 分别以三个不同的profiles启动

4.访问 http://localhost:8761/ 或者 http://localhost:8762/ 或者 http://localhost:8761/,出现以下类似页面则代表成功

观察上面的页面,发现 Eureka Server 节点均出现在 unavailable-replicas 下,说明集群搭建还是失败了,那这个问题怎么解决呢?

1.在host添加以下配置

127.0.0.1  eureka-server-master
127.0.0.1  eureka-server-slave1
127.0.0.1  eureka-server-slave2

2.修改三个配置文件的defaultZone信息

eureka:
 client:
 service-url:
  defaultZone: http://eureka-server-master:${port.master}/eureka/,http://eureka-server-slave1:${port.slave1}/eureka/,http://eureka-server-slave2:${port.slave2}/eureka/

3.配置eureka.instance.hostname信息(尤其是在同一台物理机上配置三个节点时,需要修改为不同的host)

eureka:
	instance:
 hostname: eureka-server-master

eureka:
	instance:
 hostname: eureka-server-slave1

**eureka:
	instance:
 hostname: eureka-server-slave2

4.重新启动,访问http://localhost:8761/ ,其他两个节点君出现在 available-replicas 选项

注意:如果执行完上面还是出现在,请检查是否配置了 prefer-ip-address = true,true #以IP地址注册到服务中心,相互注册使用IP地址,如果是在一台物理机上,IP都是一个,所以建议设置成false,或者不配置再试试。

部署 Eureka Client

1.创建一个名为eureka-client 的SprintBoot的项目(略)

2.引入eureka-client依赖(maven)

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

3.引入spring-boot-starter-web依赖,如果没有加上spring-boot-starter-web,服务无法正常启动

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

4.开启 EurekaClient
在启动类上加入注解@EnableEurekaClient,用于启用Eureka发现配置

5.配置端口为8081

server.port = 8081
port.master = 8761
port.slave1 = 8762
port.slave2 = 8763

6.配置注册中心地址

添加配置 eureka.client.serviceUrl.defaultZone=http://eureka-server-master:${port.master}/eureka/,http://eureka-server-slave1:${port.slave1}/eureka/,http://eureka-server-slave2:${port.slave2}/eureka/

7.启动服务,刷新 http://localhost:8761/ 页面,如果看到了EUREKA-CLIENT应用则表示注册成功

Eureka自我保护机制

自我保护机制是为了避免因网络分区故障而导致服务不可用的问题。具体现象为当网络故障后,所有的服务与 Eureka Server 之间无法进行正常通信,一定时间后,Eureka Server 没有收到续约的信息,将会移除没有续约的实例。这个时候正常的服务也会被移除掉,所以需要引入自我保护机制来解决这种问题。

当服务提供者出现网络故障,无法与 Eureka Server 进行续约,Eureka Server 会将该实例移除,此时服务消费者从 Eureka Server 拉取不到对应的信息,实际上服务提供者处于可用的状态,问题就是这样产生的。

开启自我保护机制

eureka.server.enable-self-preservation=true # 开启自我保护机制,默认也是开启的

当服务提供者出现网络故障,无法与 Eureka Server 进行续约时,虽然 Eureka Server 开启了自我保护模式,但没有将该实例移除,服务消费者还是可以正常拉取服务提供者的信息,正常发起调用。

但是自我保护机制也有不好的地方,如果服务提供者真的下线了,由于 Eureka Server 自我保护还处于打开状态,不会移除任务信息,当服务消费者对服务提供者 B 进行调用时,就会出错。

自我保护模式有利也有弊,但我们建议在生产环境中还是开启该功能,默认配置也是开启的。

完整代码实例:

总结

  1. 使用@EnableEurekaServer 注解实现注册中心
  2. 使用@EnableEurekaClient 注册到注册中心
  3. Eureka Server 集群部署的时候需要保证register-with-eureka和 fetch-registry 为true,单机部署可以为false
  4. 生产环境建议开启自我保护机制

以上就是Spring Cloud引入Eureka组件,完善服务治理的详细内容,更多关于Spring Cloud引入Eureka组件的资料请关注我们其它相关文章!

(0)

相关推荐

  • Springcloud eureka搭建高可用集群过程图解

    一 前言 eureka作为注册中心,其充当着服务注册与发现功能,加载负载均衡:若在项目运行中eureka挂了,那么整个服务整体都会暂停,所以为服务运行的安全性,有必要搭建eureka集群:当其中一个eureka节点挂了,我们还有另外的节点可用:本篇文章的核心是如何在idea上运行eureka集群,和项目部署:需注意的jdk版本是1.8,高于jdk1.8打包部署会出问题,需要引入其他依赖: 二 eureka-server配置文件改造 之前的配置文件如下,这是单个eureka-server的配置,并

  • Springcloud Eureka配置及集群代码实例

    springcloud微服务包含的技术种类众多,eureka作为其注册中心,一直处于主流,但在今年已经处于永久停更状态,但其优秀的能力还是值得学习. 整体价格采用聚合工程,后续也存在于聚合工程内. 1.首先配置pom工程的依赖 <dependencies> <!-- eureka-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId&

  • SpringCloud Eureka的使用教程

    什么是Eureka Eureka是Netfilx开源的一个用来实现微服务的注册与发现的组件.它包含Server和Client两部分. 为什么要有Eureka 例如目前有两个服务分别为服务A,服务B,我们可以在服务A调用服务B的接口地址完成调用,但是当服务间的调用关系复杂起来的时候,比如服务A还需要调用服务CDE,那么服务A需要维护它调用的所有服务的地址,一旦地址的变更都需要手动去修改. 当使用了Eureka这样的服务治理框架后,服务ABCDE可以一起注册到EurekaServer服务上,直接通过

  • springcloud微服务之Eureka配置详解

    Eureka注册中心/服务发现框架 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能. Eureka包含两个组件:Eureka Server和Eureka Client. Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Serve

  • SpringCloud添加客户端Eureka Client过程解析

    1.添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> 2.添加客户端配置 /src/main/java/resource/application.yml server: port: 8770 eur

  • springCloud服务注册Eureka实现过程图解

    介绍 Eureka 是Netfix开发的,一个基于Rest服务的,服务注册与发现的组件. 主要包括两个组件:Eureka Server和Eureka Client Eureka Server:注册中心,提供服务注册与发现 Eureka Client:java客户端(通常就是微服务中的客户端和服务端) 上图简要描述了Eureka的基本架构,由3个角色组成: 1.Eureka Server(注册中心,相当于中介) 2.Service Provider(服务提供方,相当于房东) 3.Service C

  • Spring Cloud 系列之注册中心 Eureka详解

    1.1 简介 1.1.1 概述   Netflix Eureka 是由 Netflix 开源的一款基于 REST 的服务发现组件,包括 Eureka Server 及 Eureka Client.2012 年 9 月在 GitHub 上发布 1.1.2 版本,目前 Netflix 以宣布闭源,所以市面上还是以 1.x 版本为主.Eureka 提供基于 REST 的服务,在集群中主要用于服务管理.Eureka 提供了基于 Java 语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群

  • springboot2.0和springcloud Finchley版项目搭建(包含eureka,gateWay,Freign,Hystrix)

    前段时间spring boot 2.0发布了,与之对应的spring cloud Finchley版本也随之而来了,两者之间的关系和版本对应详见我这边文章:spring boot和spring cloud对应的版本关系 项目地址:spring-cloud-demo spring boot 1.x和spring cloud Dalston和Edgware版本搭建的微服务项目现在已经很流行了,现在很多企业都已经在用了,这里就不多说了. 使用版本说明: spring boot 2.0.x spring

  • SpringCloud Eureka搭建的方法步骤

    1.SpringCloud是什么 以前的服务器就像是一个医院只有一个医生,什么病人都要让这个医生看,如果医生觉得太累,自我暴毙了,那整个医院都瘫痪了.而springcloud流行起来之后,就像是医院里面有了外科诊室,内科诊室等,每一个诊室都有一群医生负责,这样不管哪一个医生不行了都不会影响整个医院的运转.把一台或好几台服务器中的众多服务,分类出来,解耦合出来,把他们类似的功能交给同一个集群来做,把互相耦合在一起的功能剥离出来,按业务,按功能来把他们作为一个个微服务放在服务器上,而这个服务器就只提

  • Spring Cloud引入Eureka组件,完善服务治理

    简介 Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能.Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架构中的服务治理功能. Spring Cloud Eureka 是一个基于 REST 的服务,并提供了基于 Java 的客户端组件,能够非常方便的将服务注册到 Spring Cloud Eureka 中

  • Spring Cloud负载均衡组件Ribbon原理解析

    目录 前言 一个问题引发的思考 Ribbon的简单使用 Ribbon 原理分析 LoadBalancerAutoConfiguration 自动装配 RestTemplateCustomizer LoadBalancerInterceptor RibbonLoadBalancerClient#execute ZoneAwareLoadBalancer 负载均衡器 如何获取所有服务 如何判断服务是否可用 Ribbon 的负载均衡算法 总结 微服务体系下的 Spring Cloud Netflix

  • Spring Cloud构建Eureka应用的方法

    Eureka 介绍 Eureka提供基于REST的服务,在集群中主要用于服务管理.Eureka提供了基于Java语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群部署创造了条件.使用该框架,可以将业务组件注册到Eureka容器中,这些业务组件可进行集群部署,Eureka主要维护这些服务的列表并自动检查它们的状态. 程序结构 创建Eureka Server maven依赖 <dependencyManagement> <dependencies> <depend

  • Spring Cloud搭建eureka过程图解

    这篇文章主要介绍了Spring Cloud搭建eureka过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Eureka Server 的搭建 eureka 是 Spring Cloud 的注册中心,提供服务注册和服务发现的功能. 利用idea 快速创建一个eureka应用 File - NewProject-Spring Initalizr 1.利用 https://start.spring.io 创建spring cloud eure

  • 浅谈如何在项目中使用Spring Cloud Alibaba Sentinel组件

    目录 Sentinel 是什么 Sentinel与Hystrix的区别 Sentinel分为两大部分: 一.控制台(Dashboard) 二.搭建客户端 1.在自己的项目中引入依赖 2.编辑项目中的 application.yml或者bootstrap.yml文件 3.资源是 Sentinel 中的一个关键概念.它可以是任何东西,例如服务.方法,甚至是代码片段. 三.查看接口的流量的详情 1.实时监控 2.簇点链路 3.等等:其他使用方法有待发掘 Sentinel 是什么 随着微服务的流行,服务

  • 详解springcloud组件consul服务治理

    Consul是一款由HashiCorp公司开源的,用于服务治理的软件,Spring Cloud Consul对其进行了封装.Consul具有如下特点: 服务注册 - 自动注册和取消注册服务实例的网络位置 运行状况检查 - 检测服务实例何时启动并运行 分布式配置 - 确保所有服务实例使用相同的配置 Consul agent有两种运行模式:Server和Client.这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上 的应用服务无关. 以Server模式运行的

  • spring cloud实现Eureka注册中心的HA的方法

    前言: 在前面的例子中,我们的Eureka Server都是单节点的,一旦该节点在生产中挂掉,就无法再提供服务的注册,为了保证注册中心的高可用,在生产中一般采用多节点的服务注册中心. 一.在hosts文件中加入如下配置 127.0.0.1 peer1 127.0.0.1 peer2 二.修改application.yml配置文件 --- spring: profiles: peer1 # 指定profile=peer1 application: name: Eureka-Server1 serv

  • spring cloud 使用Eureka 进行服务治理方法

    服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能. 本文通过简单的小例子来分享下如何通过Eureka进行服务治理: 搭建服务注册中心 注册服务提供者 服务发现和消费 ==========我是华丽的分割线======================== 一.搭建服务注册中心 先列出完整目录结构: 搭建过程如下

  • 最简单的Spring Cloud教程第一篇:服务的注册与发现(Eureka)

    前言 本文主要给大家介绍关于Spring Cloud服务注册与发现(Eureka)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环境简单,可以在开发人员的电脑上跑.另外说明spring cloud是基于springboot的,所以需要开发中对springboot有一定

  • spring cloud之eureka高可用集群和服务分区解析

    目录 准备 搭建 验证 解释 准备 1.首先,在C:\WINDOWS\System32\drivers\etc\hosts文件里面添加一下映射,如果不添加也没关系,只是如果是单机环境,在eureka首页中的replicas那一项看到的其它注册中心都是localhost,我这里为了方便理解就添加了映射. 2.为了方便理解,我这里是单个application用一个module,没有采用通过多个profile开启多个application的做法,而且这样做一会儿验证起来也比较清晰. 3.必要的一些概念

随机推荐