# spring-cloud-eureka **Repository Path**: shang2-8-5/spring-cloud-eureka ## Basic Information - **Project Name**: spring-cloud-eureka - **Description**: springCloud+eureka整合 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-12 - **Last Updated**: 2023-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 远程调用 ```java @SpringBootApplication public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } /** * 完成RestTemplate并且注入spring容器 远程调用 * @return */ @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } } ``` # Eureka注册中心 消费者如何获取服务者提供的具体信息 * 服务提供者启动时向eureka注册自己的信息 * eureka保存这些信息消费者根据服务名称向 * eureka拉取提供者信息 有多个服务提供者,消费者该如何选择 * 服务消费者利用负载均衡算法,从服务列表中挑选一个 消费者如何感知服务提供者健康状态? * 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态 * eureka会更新记录服务列表信息,心跳不正常会被剔除 * 消费者就可以拉取到最新的信息 ## Eureka架构中,微服务的角色 EurekaServer: 服务端,注册中心 记录服务信息 心跳监控 EurekaClient:客户端 provider:服务提供者,如user-server 注册自己的信息到EurekaServer 每隔30秒向EurekaServer发送心跳 consumer:服务消费者,例如order-service 根据服务名称从EurekaServer拉取服务列表 基于服务列表做负载均衡,选中一个微服务后发起远程调用 ## 远程服务拉取的两种方法 1. 修改OrderService的代码,修改访问的url路径,用服务名代替ip端口 ```java String url = "http://userservice/user/" + order.getUserId(); ``` 2. 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解 ```java @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } ``` ## 搭建步骤 1. 搭建EurekaServer * 引入eureka-server依赖 * 添加 @EnableEurekaServer注解 * 在application.yml中配置eureka地址 2. 服务注册 * 引入 eureka-client依赖 * 在application.yml中配置eureka地址 3. 服务发现 * 引入 eureka-client依赖 * 在application.yml中配置eureka地址 * 给Rest Template添加@LoadBalanced注解 * 用服务提供者的服务名称远程调用 ## Ribbon负载均衡 ![](image/img.png) ## 负载均衡流程 ![](image/img_1.png) ## 负载均衡策略 ![](image/img_2.png) ![](image/img_3.png) 负载均衡配置策略 ![](image/img_4.png) ### 饥饿加载 Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient, 请求时间会很长而饥饿加载则会在项目启动时创建,降低第一次访问的耗时, 通过下面配置开启饥饿加载: ```yml ribbon: eager-load: enabled: true # 开启饥饿加载 clients: # 指定饥饿加载的服务名称 - userserver ``` ## 总结 1. Ribbon负载均衡规则
规则接口是IRule
默认实现是ZoneAvoidanceRule,根据zone选则服务列表,然后轮询
2. 负载均衡自定义方式
代码方式:配置灵活,但修改时需要重新打包发布
配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
3. 饥饿加载
开启饥饿加载
指定饥饿加载的微服务名称