如何使用Eureka实现微服务的注册与发现(总结了梦雪谷老师的资料,找不到链接粘出来,见谅啦~~~)

在学习微服务的过程中,我们需要了解微服务的注册与发现,所以我们就需要用到Eureka来管理我们的微服务;
(1)首先,什么是Eureka?
Eureka,中文意思为“找到了!我发现了”,是Netflix开发的一个服务发现框架,本身是一个基于RestFul的服务,SpringCloud将其集成在其子项目Spring-cloud-netflix中以实现SpringCloud的服务发现能力;
(2)接下来我们通过一张图来了解微服务的整个运行机制:
三者关系图
从上图我们可以看到:服务提供者将自己注册到服务发现组件中,而服务消费者可以调用服务提供者,服务消费者与服务发现组件又通过“心跳”来维持二者之间的联系;
我们可以下结论为:
1、当微服务在启动时,会将自己的网络地址等信息注册到服务发现组件中,而服务发现组件来存储这些信息;而我们的Eureka server正充当了这一角色,它来为我们管理服务的发现与注册!
2、服务发现组件(即eureka server)里面有服务注册表能够存储下各个微服务(即eureka client)的端口以及网络号,故当一服务(eureka client A)要去访问Eureka client B就可以通过我们的euekaServer得到B的信息而进行访问
3、我们的服务发现组件(eureka server)会定时(一般认定为90s)检测注册到自己这里的微服务,若超时则会在服务注册表中移除该服务实例;

Eueka原理
1、以上我们已经说了eureka包含两个组件:分别是Eureka server和eureka client;
2、当各个微服务启动时,会向eurekaServer中注册自己的信息(包括IP、端口号、微服务名称);
3、微服务启动之后呢会定期的(默认30s)向注册中心发送心跳,表名自己还存活者;若超过90s未发送心跳则会在注册表中注销该实例
4、默认情况下,eureka Server也可以看作时eureka client,相互之间通过复制的方式来实现服务注册表中数据的同步;
5、Euraka client会缓存服务注册表中的信息,当Eureka server使所有节点都宕掉,我们eureka cliet依然能够通过缓存中的信息找到服务提供者并完成调用;

搭建单机版的注册中心
1、导入Eureka Server服务端依赖


org.springframework.cloud spring-cloud-starter-netflix-eureka-server

2、修改相应的application.yml配置文件
server:
port: 6001 # 服务端口
eureka:
instance:
hostname: localhost # eureka服务端的实例名称
client:
registerWithEureka: false # 服务注册,false表示不将自已注册到Eureka服务中
fetchRegistry: false # 服务发现,false表示自己不从Eureka服务中获取注册信息
serviceUrl: # Eureka客户端与Eureka服务端的交互地址,集群版配置对方的地址,单机版配置自 己(如果不配置则默认本机8761端口)
defaultZone: http:// e u r e k a . i n s t a n c e . h o s t n a m e : {eureka.instance.hostname}: eureka.instance.hostname:{server.port}/eureka/

3、在主启动类上添加注解@EnableEurekaServer注解,表示其为一个服务注册中心;

注册服务到服务注册中心
1、添加eureka Client客户端的依赖

org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2、修改application.yml配置文件
eureka:
client:
registerWithEureka: true # 服务注册开关
fetchRegistry: true # 服务发现开关
serviceUrl: # 注册到哪一个Eureka Server服务注册中心,多个中间用逗号分隔
defaultZone: http://localhost:6001/eureka
注意:我们在这里可发现以上配置服务注册中心的application.yml
的时候为了防止把自己注册进去,registerWithEureka与fetchRegistry是关闭的状态;

3、在主启动类上加相应的注解@EnableEurekaClient

解决Eureka状态中含有主机名称的问题
eureka:
client:
registerWithEureka: true # 服务注册开关
fetchRegistry: true # 服务发现开关
serviceUrl: # 客户端(服务提供者)注册到哪一个Eureka Server服务注册中心,多个用逗号分隔
defaultZone: http://localhost:6001/eureka
instance:
instanceId: s p r i n g . a p p l i c a t i o n . n a m e : {spring.application.name}: spring.application.name:{server.port} # 指定实例ID,就不会显示主机名了
preferIpAddress: true #访问路径可以显示IP地址

搭建集群版的服务注册中心
为了避免Eureka server的失效,Eureka server高可用环境需要部署两个以上的注册中心,他们互相指向对方;若要是再本地启动两个Eureka需要注意两个的端口号需要设置成不一样;
特点:
(1)为了实现高可用,实际可部署至少两台注册中心服务器(Eureka sever)
(2) 两台Eureka server互相注册,当其中一台死掉也不会影响服务的注册与发现;
(3)微服务从注册中心获得服务地址通过RestFul方式发起远程调用;
图为两个注册中心互相注册
(2)集群版注册中心配置大体上与单机版的注册中心相同,因为两个Eureka Server需要向对方注册,所以需要通过域名访问,故我们需要进行IP与域名进行绑定
1、找到 C:\Windows\System32\drivers\etc 目录下的hosts文件
在这里插入图片描述
在这里插入图片描述
2、在进行yml配置的时候,注意都不应该把自己注册到Eureka服务中,那么如何来实现两台服务器互相注册呢?我们应该在pom文件的defaultZone给两台服务器写上互相的url;
6001
两台Eureka Server互相注册自己
3、这里我们需要修改服务客户端的pom文件,我们需要在配置文件pom中把服务提供者注册到两台Eureka server中,也就是在defaultZone那一栏写上两个地址;在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值