①SpringCloud 实战:引入Eureka组件,完善服务治理
简介
Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架构中的服务治理功能。
Spring Cloud Eureka 是一个基于 REST 的服务,并提供了基于 Java 的客户端组件,能够非常方便的将服务注册到 Spring Cloud Eureka 中进行统一管理。
部署 Eureka Server
创建一个名为 eureka-server 的 Spring Cloud 的项目(略)
引入 eureka-server 依赖(maven)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
开启 EurekaServer
在启动类上添加@EnableEurekaServer
注解,开启 EurekaServer 的自动装配功能。修改服务端口为8761
修改 register-with-eureka 配置
添加一个eureka.client.register-with-eureka=false
的配置,作为EurekaServer可以不将自己的实例注册到 Eureka Server 中,如果是集群部署设置为true(不配置默认值也是true)。修改
fetch-registry
配置
添加一个 eureka.client.fetch-registry=false 的配置,表示不从 Eureka Server 中获取 Eureka 的注册表信息,如果是集群部署设置为true(不配置默认值也是true)。添加defaultZone配置
添加一条配置eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
(如果不加这个的话又自定义了端口,可能会报错Connect to localhost:8761 timed out)启动 Eureka Server,访问 http://localhost:8761/,如果顺利的话可以看到如下成功页面
至此,一个简单的Eureka注册中心就完成了,后面实战中的 Eureka Client 都会注册到这个注册中心。上面的demo只是一个单机部署,接下里我们看看我们要部署多个Eureka节点时怎么做。
Eureka Server 集群部署
集群部署一般有两种情况,一是伪集群部署,二是真正的集群部署。
集群部署,我们可以在多台物理机上部署,这样多个实例可以用同一个端口,不会出现伪集群端口冲突的问题,更推荐这种方式,性能更高,稳定性也更好。
伪集群部署一般说的是在同一台物理机器上部署多个节点,这时候端口就必须不一样,否则启动的时候会出现端口冲突;
伪集群部署示例:
假设要部署3个节点:master/slave1/slave2
在application.yml配置定义三个节点的端口:
port:
master: 8761
slave1: 8762
slave2: 8763
我们可以分别创建三个配置文件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 # 开启自我保护机制,默认也是开启的
IDEA 分别以三个不同的profiles启动
访问 http://localhost:8761/ 或者 http://localhost:8762/ 或者 http://localhost:8761/,出现以下类似页面则代表成功
观察上面的页面,发现 Eureka Server 节点均出现在 unavailable-replicas 下,说明集群搭建还是失败了,那这个问题怎么解决呢?
在
host
添加以下配置127.0.0.1 eureka-server-master
127.0.0.1 eureka-server-slave1
127.0.0.1 eureka-server-slave2
修改三个配置文件的
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/
配置
eureka.instance.hostname
信息(尤其是在同一台物理机上配置三个节点时,需要修改为不同的host)eureka:
instance:
hostname: eureka-server-master eureka:
instance:
hostname: eureka-server-slave1 **eureka:
instance:
hostname: eureka-server-slave2
重新启动,访问http://localhost:8761/ ,其他两个节点君出现在 available-replicas 选项
注意:如果执行完上面还是出现在,请检查是否配置了 prefer-ip-address = true,true #以IP地址注册到服务中心,相互注册使用IP地址,如果是在一台物理机上,IP都是一个,所以建议设置成false,或者不配置再试试。
部署 Eureka Client
创建一个名为eureka-client 的SprintBoot的项目(略)
引入eureka-client依赖(maven)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
引入spring-boot-starter-web依赖,如果没有加上spring-boot-starter-web,服务无法正常启动
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
开启 EurekaClient
在启动类上加入注解@EnableEurekaClient
,用于启用Eureka发现配置配置端口为8081
server.port = 8081
port.master = 8761
port.slave1 = 8762
port.slave2 = 8763
配置注册中心地址
添加配置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/
启动服务,刷新 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 进行调用时,就会出错。
自我保护模式有利也有弊,但我们建议在生产环境中还是开启该功能,默认配置也是开启的。
完整代码实例:
总结
- 使用
@EnableEurekaServer
注解实现注册中心 - 使用
@EnableEurekaClient
注册到注册中心 - Eureka Server 集群部署的时候需要保证
register-with-eureka
和fetch-registry
为true,单机部署可以为false - 生产环境建议开启自我保护机制
①SpringCloud 实战:引入Eureka组件,完善服务治理的更多相关文章
- 微服务---Eureka注册中心(服务治理)
在上一篇的初识SpringCloud微服务中,我们简单讲解到服务的提供者与消费者,当服务多了之后,会存在依赖与管理之间混乱的问题,以及需要对外暴露自己的地址,为了解决此等问题,我们学习Eureka注册 ...
- springcloud超简单的入门2--Eureka服务治理
Eureka服务治理 下面请听第一个话题,母...咳咳,拿错书了. Eureka简介 eureka是什么呢? 简单来说呢,当我的微服务应用多了起来,一个一个写死再程序里是件很不优雅的事情,而且同一服务 ...
- SpringCloud实战-Hystrix请求熔断与服务降级
我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...
- SpringCloud实战3-Hystrix请求熔断与服务降级
我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...
- ②SpringCloud 实战:引入Feign组件,完善服务间调用
这是SpringCloud实战系列中第二篇文章,了解前面第一篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 简介 Feign 是一个声明式的 RE ...
- ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪
这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- ④SpringCloud 实战:引入Hystrix组件,分布式系统容错
这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- ⑤SpringCloud 实战:引入Zuul组件,开启网关路由
这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- ⑥SpringCloud 实战:引入gateway组件,开启网关路由功能
这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
随机推荐
- uart与usart区别
uart 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分.它将要传输的资料在串 ...
- JUC---00创建线程的方式
一.继承Thread类 1 package com.jenne.mydemo; 2 3 public class TestMyThread { 4 public static void main(St ...
- 浅析I/O模型-select、poll、epoll
I/O流 概念 (1)c++中将数据的输入输出称之为流(stream),在c++中,流被定义为类,成为流类(stream class),其定义的对象为流对象. (2)文件,套接字(socket),管道 ...
- python解决百钱买百鸡
百钱买百鸡 关注公众号"轻松学编程"了解更多. 现有100钱,公鸡5文钱一只,母鸡3文钱一只,小鸡一文钱3只 要求:公鸡.母鸡,小鸡都要有,把100文钱花完,买的鸡的数量正好是10 ...
- [Luogu P1122]最大子树和 (简单树形DP)
题面 传送门:https://www.luogu.org/problemnew/show/P1122 Solution 这是一道简单的树形DP题. 首先,我们可以转换一下题面,可以发现,题目要求我们求 ...
- python100实例
实例001:数字组合 题目 有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析 遍历全部可能,把有重复的剃掉. total=0 for i in range(1 ...
- 构建者模式(Builder pattern)
构建者模式应用场景: 主要用来构建一些复杂对象,这里的复杂对象比如说:在建造大楼时,需要先打牢地基,搭建框架,然后自下向上地一层一层盖起来.通常,在建造这种复杂结构的物体时,很难一气呵成.我们需要首先 ...
- 细学C++之C++语言的特点
优点: 1.强大的抽象封装能力:这让C++语言具备了强大的开发工程能力 2.高性能:运行快,并且占用资源少 3.低功耗:适合在各种微型的嵌入式设备中运行高效的程序 缺点: 1.语法相对复杂,细节比较多 ...
- OJ-2:区间问题【九度1554】
题目描述: 给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整数k. 输入: 输入包含多组测试用例,每组测试用例由一个整数n(1<=n<=10000)开头,代表数组的大 ...
- ARM的三级流水线结构
看到汇编中很多关于程序返回与中断返回时处理地址都很特别,仔细想想原来是流水线作用的效果.所以,决定总结学习下ARM流水线. ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS/ ...