• Spring Cloud学习(二)【Eureka注册中心】



    Eureka 注册中心

    服务调用出现的问题

    • 不能采用硬编码
    • 服务消费者该如何获取服务提供者的地址信息?
    • 如果有多个服务提供者,消费者该如何选择?
    • 消费者如何得知服务提供者的健康状态?

    Eureka 的作用

    eureka-server(注册中心):用于管理记录所有的微服务,监控心跳
    eureka-client:服务消费者与服务提供者都属于eureka-client

    1. 注册服务信息
    2. 拉去服务
    3. 负载均衡
    4. 远程调用

    在这里插入图片描述

    在这里插入图片描述

    动手实践

    在这里插入图片描述

    搭建 EurekaServer

    在这里插入图片描述

    
     <dependency> 
         <groupId>org.springframework.cloudgroupId>
         <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
     dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    编写启动类,添加@EnableEurekaServer注解

    server:
      port: 10086  # 服务端口
    
    spring:
      application:
        name: eurekaserver # 微服务名称
    eureka:
      client:
        service-url:  # eureka的地址信息 
          defaultZone: http://127.0.0.1:10086/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    服务注册

    在这里插入图片描述

    注册 user-service

    在这里插入图片描述

    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    server:
      port: 8081
    spring:
      application:
        name: userservice # 微服务名称
    
    eureka:
      client:
        service-url:  # eureka的地址信息
          defaultZone: http://127.0.0.1:10086/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在IDEA本地为一个服务起多个实例的方法

    在这里插入图片描述
    在这里插入图片描述

    服务发现

    在这里插入图片描述
    在这里插入图片描述

    orderservice启动类中

    /**
     * 创建 RestTemplate 并注入Spring容器
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    OrderService.java中

    public Order queryOrderById(Long orderId) {
            // 1.查询订单
            Order order = orderMapper.findById(orderId);
            // 2. 利用 RestTemplate 发送http请求,查询用户
            String url = "http://userservice/user/" + order.getUserId();
            User user = restTemplate.getForObject(url, User.class);
            // 封装 user 到 Order
            order.setUser(user);
            // 4.返回
            return order;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    启动负载均衡后,当 order 服务调用 user 服务时,eureka 会通过负载均衡策略去调用userservice1与userservice2(user服务启动并注册了多个实例)

    总结
    在这里插入图片描述

    Ribbon 负载均衡

    负载均衡原理

    负载均衡流程

    在这里插入图片描述

    @LoadBalanced 注解: 标记当前 RestTemplate 发起的请求要被 Ribbon 拦截

    在这里插入图片描述
    在这里插入图片描述

    IRule 接口(负载均衡策略)

    在这里插入图片描述

    在这里插入图片描述
    通过定义 IRule 实现可以修改负载均衡规则,有两种方式:

    1. 启动类/配置类中
      范围:order-service的所有请求
      在这里插入图片描述

    2. application.yml 中
      范围:order-service 访问某个指定的服务(比如此处配置的是 user-service)的请求
      在这里插入图片描述

    饥饿加载

    Ribbon 默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
    而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

    在这里插入图片描述

    当有多个饥饿加载的服务对象

    在这里插入图片描述

    总结

    在这里插入图片描述

  • 相关阅读:
    Cesium Vue(四)— 物体(Entity)的添加与配置
    python批量将多年降水的nc数据处理为季节性平均降水量或年降水量
    Jetty各版本历史
    MapReduce WordCount程序实践(IDEA版)
    记录一次成功的frida编译
    保险业的变革,软件机器人车险录入自动化
    c++数据处理----图像修补:cv::inpaint()
    OpenCV直方图的原理与显示、掩膜、均衡化、自适应均衡化
    Spring事务传播特性
    【微信小程序开发】页面导航与传参
  • 原文地址:https://blog.csdn.net/qq_46456049/article/details/134269345