当前位置 博文首页 > 蜗牛为梦想而生H:03-注册中心之Eureka
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务, Eureka包含两个组件:Eureka Server和Eureka Client。 ??
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。 ??
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。 ? 在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。 ??
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
?
?
?
? <dependencies>
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ? ? ?</dependency>
? ? ? ?<!--eureka注册中心服务-->
? ? ? ?<dependency>
? ? ? ? ? ?<groupId>org.springframework.cloud</groupId>
? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
? ? ? ?</dependency>
? ?</dependencies>
server: port: 10000
3.5. 启动报错
?
3.6. 错误描述
1:问题描述
??? ?由于eurekaServer的依赖 其中依赖了一个eurekaclient 所以eurekaServer是个服务的同时又是客户端 所以启?? ?动时会去注册中心注册,因为是同一个工程,此时项目还没有启动 没有注册中心所以报错
? ?
? ?问题解决
? ?? ? ? 注册中心的服务 不往注册中心注册?
? ?? ? ? ?? ?eureka:
? ??? ??? ??? ?client:
? ? ??? ??? ??? ?register-with-eureka:false
? ? ??? ??? ??? ??? ??
? ? ??? ??? ??? ??? ??
?----------------------------------------------------------------------------------------------- ? ?
2: 问题描述
?? ?由于eurekaServer的依赖 其中依赖了一个eurekaclient 所以eurekaServer是个服务的同时又是客户端 所以启?? ?动时会去注册中心拉去列表,因为是同一个工程,此时项目还没有启动 没有注册中心所以报错
? ? ??
? ? 问题解决:
? ? ? 注册中心的服务,不去注册中心拉去列表
? ? ? ?? ?eureka:
? ?? ??? ??? ?client:
? ? ? ?? ??? ??? ?fetch-registry:false?
3.7. 访问测试
?3.8. 修改提供者
添加依赖
<dependency> ? ?<groupId>org.springframework.cloud</groupId> ? ?<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
添加注解
添加配置
server: port: 8080 ## 方式一 (建议使用) spring: application: ? name: cloud-provider ? ## 方式二 #eureka: # instance: # ? appname: cloud-provider ? eureka: client: ? service-url: ? ? defaultZone: http://localhost:10000/eureka instance: ? prefer-ip-address: true ? instance-id: ${spring.application.name}:${server.port}
3.9. 修改消费者
- 添加依赖
<dependency> ? ? ? ? ? ?<groupId>org.springframework.cloud</groupId> ? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> ? ? ? ?</dependency>
- 添加注解
添加配置
server: port: 8081 spring: application: ? name: cloud-consumer eureka: client: ? service-url: ? ? defaultZone: http://localhost:10000/eureka instance: ? instance-id: ${spring.application.name}:${server.port} ? prefer-ip-address: true
启动
3.10. 刷新注册中心
?
3.11. 问题说明
修改完工程之后,什么代码都不修改 直接运行项目 重新请求时 会发现返回的xml??
问题解决
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <exclusions> <exclusion> <artifactId>jackson-dataformat-xml</artifactId> <groupId>com.fasterxml.jackson.dataformat</groupId> </exclusion> </exclusions> </dependency>
3.12. 使用服务发现远程调用
3.13. 测试
4. eureka集群
由于消费者是从注册中心拿提供者的信息,如果注册中心挂了则就拿不到信息,此时我们需要一个eureka集群
4.1. 集群搭建
4.1.1. 创建2个eurekaServer
创建方式和第一个一样
4.1.2. 修改server-10001
添加依赖
? <dependencies> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId> ? ? ? ?</dependency> ? ? ? ?<!--eureka注册中心服务--> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.springframework.cloud</groupId> ? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> ? ? ? ?</dependency> ? ?</dependencies>
编写主配置类
编写配置文件
server: port: 10001 ? eureka: client: ? register-with-eureka: false ? fetch-registry: false ? service-url: ? ? defaultZone: http://localhost:10000/eureka/,http://localhost:10002/eureka/ instance: ? hostname: server-10001
4.1.3. 修改server-10002
添加依赖
? <dependencies> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId> ? ? ? ?</dependency> ? ? ? ?<!--eureka注册中心服务--> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.springframework.cloud</groupId> ? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> ? ? ? ?</dependency> ? ?</dependencies>
编写主配置类
?
?
编写配置文件
server: port: 10002 eureka: client: ? fetch-registry: false ? register-with-eureka: false ? service-url: ? ? defaultZone: http://localhost:10000/eureka/,http://localhost:10001/eureka/ instance: ? hostname: server-10002 ?
4.1.4. 修改server-10000
server: port: 10000 ? eureka: client: ? register-with-eureka: false ? fetch-registry: false ? service-url: ? ? defaultZone: http://localhost:10001/eureka/,http://localhost:10002/eureka/ instance: ? ? hostname: server-10000
4.1.5. 启动测试
4.2. 把提供者加入集群
修改配置
?
4.3. 把消费者加入集群
修改配置
?
4.4. 测试集群
测试关掉一个或者2个eureka, 还能正常远程调用
5. 了解的一些概念
服务注册中心
?服务注册中心即EurekaServer提供服务注册和发现功能?
- 服务提供者
提供服务的应用 服务提供者要向EurekaServer注册服务;
服务注册
服务提供者在启动的时候 会检测配置属性中的eureka.client.register-eureka是否等于true 默认就是true ?如果等于true 会向EurekaServer发起一个请求 并且携带自己的数据 EurekaServer获得数据之后 存储到一个Map集合中
服务续约
注册成功之后 服务提供者会持续一个心跳(定时向注册中心发送请求) 证明我还活着 默认情况下是30秒 发送一次请求 ?维持一次心跳 ?如果90秒没有发送心跳 那么EurekaServer注册中心 将会从服务列表中剔除 ?
?
相关属性:
? ? lease-renewal-interval-in-seconds: 30 ?//每隔30秒发送依次心跳
??? lease-expiration-duration-in-seconds: 90?
失效剔除
Eureka Server在启动完成后会创建一个定时器每隔60秒检查一次服务健康状况,如果其中一个服务节点超过90秒未检查到心跳,那么Eureka Server会自动从服务实例列表内将该服务剔除。(剔除不剔除还受自我保护的影响)
?
由于非正常关闭不会执行主动下线动作,所以才会出现失效剔除机制,该机制主要是应对非正常关闭服务的情况,如:内存溢出、杀死进程、服务器宕机等非正常流程关闭服务节点时。
?
可以通过eureka.server.eviction-interval-timer-in-ms参数对其进行修改,
自我保护
随便关闭一个微服务 就会出现自我保护?
?
Eureka Server的自我保护机制会检查最近15分钟内所有Eureka Client正常心跳的占比,如果低于85%就会被触发。 我们如果在Eureka Server的管理界面发现如下的红色内容,就说明已经触发了自我保护机制。
? 当触发自我保护机制后Eureka Server就会锁定服务列表,不让服务列表内的服务过期,不过这样我们在访问服务时,得到的服务很有可能是已经失效的实例,如果是这样我们就会无法访问到期望的资源,会导致服务调用失败,所以这时我们就需要有对应的容错机制、熔断机制(后面的知识)。
??
???server:
??? ? ? enable-self-preservation:false 关闭自我保护
消费者
消费应用从注册中心获取服务列表 从而得知服务的信息 知道去哪里调用服务方?
当服务消费者启动是,会检测eureka.client.fetch-registry参数的值,如果为true,则会从Eureka Server服务的列表只读备份,然后缓存在本地。并且每隔30秒会重新获取并更新数据。我们可以通过下面的参数来修改: ? registry-fetch-interval-seconds: 30
6. 配置大比拼
1:spring.application.name
? ? 配置服务名字?
2:eureka.client.register-with-eureka?
? ? 启动时 是否像注册中心注册自己 默认为true所以一般在EurekaServer使用 生产者消费者不能使用 否则注册不 ???到注册中心
?
3:Eureka.client.fetch-registry?
? ? 表示自己之充当注册中心一般搭配eureka.client.register-with-eureka在server端使用
?
4:Eureka.client.service-url.defaultZone?
? ? 注册中心表示对外暴露的服务 ?生产者消费者表示 连接注册中心的服务链接?
?
5:eureka.instance.instance_id?
? ? ?表示服务实例的id ?
?
6:eureka.instance.prefer-ip-address?
??? ? 表示显示ip 不显示localhost
?
7:eureka.instance.lease-expiration-duration-in-seconds?
? ? 表示超过多少秒没有发送心跳 将会从列表中移除 默认90?
?
8:eureka.instance.lease-renew-internal-in-seconds?
? ? 表示提供者发送心跳间隔时间
?
9:eureka.client.registry-fetch-interval-seconds?
? ? 表示消费者获取服务列表的时间间隔?
?
10:eureka.server.enable-self-preservation?
? ? 表示是否关闭自我保护模式 默认true??
?
?
?
?
cs下一篇:没有了
最新 更多<<
蜗牛为梦想而生H:03-注册中心之Eureka 蜗牛为梦想而生H:08-Nacos集群搭建Linux版本 蜗牛为梦想而生H:04-注册中心之Consul 创建一个ASP.NET MVC5项目的实现方法(图文) 蜗牛为梦想而生H:05-注册中心之nacos .NET Core下使用Kafka的方法步骤 .NET Core下使用Log4Net记录日志的方法步骤 蜗牛为梦想而生H:06-负载均衡之Ribbon .NET CORE3.1实现微信小程序发送订阅消息 在.NET中使用DiagnosticSource的方法 蜗牛为梦想而生H:09-熔断器Hystrix ASP.NET Core 实现基本认证的示例代码 深入解读ASP.NET Core身份认证过程实现 Asp.Net Core 企业微信静默授权的实现 手把手教你AspNetCore WebApi认证与授权的方法 手把手教你AspNetCore WebApi数据验证的实现 .NET Core使用FluentEmail发送邮件的示例代码 .Net Core中使用Grpc的方法 UrlRewrite概念原理及使用方法解析 蜗牛为梦想而生H:流量防卫兵sentinel Docker结合.Net Core的初步使用教程 蜗牛为梦想而生H:JAVA8 之 Stream sorted() 示例,排序 .Net Core3.0 配置Configuration的实现 .NET Core3.0创建Worker Services的实现 蜗牛为梦想而生H:SQL加减乘除 .NET Core3.0 日志 logging的实现 蜗牛为梦想而生H:过滤器无法取值RedisTemplate , 为Null解决方 详解ASP.NET Core 反向代理部署知多少 蜗牛为梦想而生H:RedisTemplate.keys() 替换为Scan 扫描指定Key net core webapi多版本控制与swagger(nswag)配置教程