• 微服务-Eureka


    提供者与消费者

    在这里插入图片描述

    Eureka注册中心

    服务消费者该如何获取服务提供者的地址信息?

    • 服务提供者启动时向eureka注册自己的信息
      eureka保存这些信息
      消费者根据服务名称向eureka拉取提供者信息

    如果有多个服务提供者,消费者该如何选择?(多个User-Service)

    • 服务消费者利用负载均衡算法,从服务列表中挑选一个

    消费者如何得知服务提供者的健康状态?

    • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
      eureka会更新记录服务列表信息,心跳不正常会被剔除
      消费者就可以拉取到最新的信息

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

    搭建EurekaServer

    在这里插入图片描述

    1. 引入依赖,除了主要的@EnableEurekaServer外,@SpringBootApplication等注解也存在这个依赖里。
    <dependencies>
         
         <dependency>
             <groupId>org.springframework.cloudgroupId>
             <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
         dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 修改启动类,添加注解
    package cn.itcast.eureka;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 修改配置文件,注册到Eureka;以及服务名称
    server:
      port: 10086
    spring:
      application: 
        name: eurekaserver # 服务名称
    eureka:
      client:
        service-url: #将自己也注册到Eureka服务上,为了将来Eureka集群之间通信;例如有多个Eureka服务时,这些Eureka会互相做注册,为了数据交流,这里配的是Eureka集群的地址
          defaultZone: http://127.0.0.1:10086/eureka/ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 启动,在浏览器中测试
      在这里插入图片描述

    服务注册

    将user-service和order-service服务都按照以下方式注册到Eureka上

    1. 添加Eureka客户端依赖
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 修改application.yml
      2.1 添加Eureka配置信息,将服务注册到Eureka
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka/ # 新增注册到eureka
    
    • 1
    • 2
    • 3
    • 4

    2.2 增加服务名

    spring:
      application:
        name: userservice # 新增服务名
    
    • 1
    • 2
    • 3
    1. 启动,可以看到服务都被注册上了
      在这里插入图片描述
    2. 在idea如何启动多个,例如这里再启动一个userservice服务
      在这里插入图片描述
      修改Name,点击Modify options,选择add VM options
      在这里插入图片描述
      输入-Dserver.port=8082,该服务将会启动在8082端口
      在这里插入图片描述
      启动userservice2
      在这里插入图片描述
      在这里插入图片描述
      可以看到userservice有2个服务被注册
      在这里插入图片描述

    服务发现

    1. 将“主机+端口”改为服务名,通过服务名可直接调用该服务,不再需要ip和端口
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.定义url
        // String url = "http://localhost:8081/user/"+order.getUserId();
        String url = "http://userservice/user/"+order.getUserId(); //修改为服务名
        // 3.发送http请求
        User user = restTemplate.getForObject(url, User.class);
        // 4.封装user
        order.setUser(user);
        // 5.返回
        return order;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1. 给RestTemplate添加@LoadBalanced注解,表示负载均衡

    必须添加该注解,否则会产生异常java.net.UnknownHostException: userservice;当只有一个userservice服务时,也会产生该异常

    @SpringBootConfiguration
    public class WebConfiguration {
    
        @LoadBalanced //负载均衡
        @Bean //相当于@Controller,@Service等
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 启动所有服务,在浏览器中输入4次http://localhost:8080/order/104,调用4次userservice服务时,发现UserApplication:8081和UserApplication2:8082分别被调用了2次,实现了负载均衡

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

    项目结构

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

  • 相关阅读:
    IO进线程:信号灯
    大数据_Spark3.0新特性
    uni跳转页面不缓存上一个页面的方法
    [C++]文件读写操作
    Docker常用基础指令
    Linux命令教程:使用cat命令查看和处理文件
    使用Go的encoding/asn1库处理复杂数据:技巧与最佳实践
    数据结构---哈希表基本操作浅记
    Cmake 3.27.5 发布,开源构建系统
    国庆共68条评论《乡村振兴战略下传统村落文化旅游旅游设计》许少辉八一新书
  • 原文地址:https://blog.csdn.net/qq_30166465/article/details/134027160