1、学习 Eureka 注册中心

学习 Eureka 注册中心

  • [一、创建 Eureka 微服务](#一、创建 Eureka 微服务)
    • [0、SpringBoot 和 SpringCloud 版本](#0、SpringBoot 和 SpringCloud 版本)
    • [1、引入 Eureka 服务端依赖](#1、引入 Eureka 服务端依赖)
    • [2、启动类加 @EnableEurekaServer 注解](#2、启动类加 @EnableEurekaServer 注解)
    • [3、配置 yaml 文件,把 Eureka 服务注册到 Eureka 注册中心](#3、配置 yaml 文件,把 Eureka 服务注册到 Eureka 注册中心)
    • [4、访问 Eureka 服务端,查看注册中心的服务列表信息](#4、访问 Eureka 服务端,查看注册中心的服务列表信息)
  • [二、其他微服务注册到 Eureka 中](#二、其他微服务注册到 Eureka 中)
    • [1、添加 Eureka 客户端依赖](#1、添加 Eureka 客户端依赖)
    • [2、在 yaml 文件中配置 Eureka 服务端信息](#2、在 yaml 文件中配置 Eureka 服务端信息)
    • [3、IDEA 2022 中启动多个服务实例](#3、IDEA 2022 中启动多个服务实例)
  • 三、服务发现
    • [1、启动 RestTemplate 的负载均衡](#1、启动 RestTemplate 的负载均衡)
    • [2、根据服务名从 Eureka 注册中心中获取服务的IP和端口号](#2、根据服务名从 Eureka 注册中心中获取服务的IP和端口号)
  • [四、Ribbon 负载均衡原理](#四、Ribbon 负载均衡原理)
  • 五、修改负载均衡规则
  • 六、饥饿加载

一、创建 Eureka 微服务

0、SpringBoot 和 SpringCloud 版本

xml 复制代码
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.3.9.RELEASE</version>
  </parent>
xml 复制代码
	<dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-dependencies</artifactId>
	    <version>Hoxton.SR10</version>
	    <type>pom</type>
	    <scope>import</scope>
	</dependency>

1、引入 Eureka 服务端依赖

xml 复制代码
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

2、启动类加 @EnableEurekaServer 注解

java 复制代码
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

3、配置 yaml 文件,把 Eureka 服务注册到 Eureka 注册中心

yml 复制代码
server:
  port: 10086

spring:
  application:
    name: eureka-server

# 将eureka-server注册到Eureka注册中心
eureka:
  client:
    service-url: # 需要加【/eureka】,否则无法注册
      defaultZone: http://127.0.0.1:10086/eureka

4、访问 Eureka 服务端,查看注册中心的服务列表信息

如:http://localhost:10086/

二、其他微服务注册到 Eureka 中

1、添加 Eureka 客户端依赖

xml 复制代码
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

2、在 yaml 文件中配置 Eureka 服务端信息

yml 复制代码
server:
  port: 8080
spring:
  application:
    name: order-service
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka
yml 复制代码
server:
  port: 8081

spring:
  application:
    name: user-service

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

3、IDEA 2022 中启动多个服务实例




三、服务发现

1、启动 RestTemplate 的负载均衡

使用服务名,根据负载均衡规则挑选服务提供者

java 复制代码
  @Bean
  @LoadBalanced
  public RestTemplate restTemplate() {
      return new RestTemplate();
  }

2、根据服务名从 Eureka 注册中心中获取服务的IP和端口号

java 复制代码
// String url = "http://localhost:8081/user/" + order.getUserId(); // 硬编码
// 👇 根据服务名从 Eureka 注册中心中获取服务的IP和端口号
String url = "http://user-service/user/" + order.getUserId();

四、Ribbon 负载均衡原理

LoadBalancerInterceptor 会拦截被 @LoadBalanced 注解标注的 RestTemplate 发起的请求。它实现了 ClientHttpRequestInterceptor 接口,该接口作用:拦截客户端HTTP请求。LoadBalancerInterceptor 的 intercept 方法中获取服务名称,把服务名称交给 RibbonLoadBalanceClient,RibbonLoadBalanceClient 把服务名称交给 DynamicServerListLoadBalancer,DynamicServerListLoadBalancer 从 Eureka 注册中心获取该服务名的所有的实例信息,然后根据负载均衡规则挑选一个服务实例(chooseServer)。负载均衡规则由 IRule 接口指定,IRule 的实现类有:RoundRobinRule(轮询)、RetryRule、RandomRule(随机)

五、修改负载均衡规则

java 复制代码
    @Bean
    public IRule iRule() {
        return new RandomRule();
    }
yml 复制代码
user-service:
  ribbon: # user-service的负载均衡规则是:随机
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

六、饥饿加载

yml 复制代码
ribbon:
  eager-load:
    enabled: true # 饥饿创建负载均衡客户端RibbonLoadBalanceClient
    clients: user-service # 指定对user-service服务执行饥饿加载

🍀RibbonLoadBalanceClient 默认是懒创建,首次访问的时候才创建(首次请求响应时间会比较长)。

🍀饥饿加载:项目创建的时候就创建 RibbonLoadBalanceClient

相关推荐
云深处@17 小时前
【数据库】MySQL 入门
数据库·学习·mysql
HyperAI超神经18 小时前
【vLLM 学习】Disaggregated Prefill
人工智能·深度学习·学习·vllm
天吾cc18 小时前
RTT-IO设备模型
单片机·嵌入式硬件·学习
美味蛋炒饭.18 小时前
Git 版本控制(下)
开发语言·git·学习·总结·后端开发
呼噜想睡觉18 小时前
Bootstrap 组件之响应式导航条实现
学习
菜鸟‍19 小时前
【论文学习】Medical Image Analysis 2024 || 医学图像分割中失败检测方法的比较基准研究:揭示置信度聚合的作用
人工智能·学习
爱音乐的marlon20 小时前
FastAPI 学习笔记03|core 核心层:config 是总控制台,database 是整个工程的地基
笔记·学习·fastapi
math_hongfan21 小时前
鸿蒙离线数据缓存高级架构:弱网预加载/离线数据优先级/同步冲突解决/上线后数据合并策略
学习·缓存·华为·架构·harmonyos·鸿蒙
划水的code搬运工小李21 小时前
Simulink学习-自定义Storage Class配置
学习
一尘之中1 天前
量子计算机能“参禅”吗?从叠加态到不二法门的技术哲学追问
学习·ai写作·量子计算