• Eureka注册中心


    1.Eureka的结构与作用

    在这里插入图片描述

    • 在Eureka架构中,微服务角色有两类:

      • lEurekaServer:服务端,注册中心
      1. 记录服务信息

      2. u心跳监控

      • lEurekaClient:客户端
      1. Provider:服务提供者

        • 注册自己的信息到EurekaServer

        • 每隔30秒向EurekaServer发送心跳

      2. consumer:服务消费者

        • 根据服务名称从EurekaServer拉取服务列表
        • 基于服务列表做负载均衡,选中一个微服务后发起远程调用
    • Eureka Server: Eureka 服务注册中心,主要用于提供服务注册功能。当微服务启动时,会将自己的服务注册到 Eureka Server。Eureka Server 维护了一个可用服务列表,存储了所有注册到 Eureka Server 的可用服务的信息,这些可用服务可以在 Eureka Server 的管理界面中直观看到。

    • Eureka Client: Eureka 客户端,通常指的是微服务系统中各个微服务,主要用于和 Eureka Server 进行交互。在微服务应用启动后,Eureka Client 会向 Eureka Server 发送心跳(默认周期为 30 秒)。若 Eureka Server 在多个心跳周期内没有接收到某个 Eureka Client 的心跳,Eureka Server 将它从可用服务列表中移除(默认 90 秒)。

    2.搭建eureka-server服务
    1. 创建eureka-server服务模块
      在这里插入图片描述

    2. 引入SpringCloud为eureka提供的starter依赖

    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    
    
    • 1
    • 2
    • 3
    • 4
    1. 编写启动类,添加@EnableEurekaServer注解
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 在application.yml文件,编写配置
    server:
      port: 10086 #eureka服务端口
    spring:
      application:
        name: eureka-server  #eureka服务名称
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka  #eureka服务地址
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    3.注册service服务
    1. 在user-service的pom文件中,引入eureka-client依赖
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    
    
    • 1
    • 2
    • 3
    1. 在user-service的application.yml文件中,添加服务名称、eureka地址
    spring:
      application:
        name: userservice
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 复制原来的user-service启动配置,模拟多实例部署,启动多个user-service实例
      在这里插入图片描述

    2. 修改名称,配置端口,避免冲突
      在这里插入图片描述

    3. 输入网址:http://localhost:10086/查看结果
      在这里插入图片描述

    4.服务发现
    1. 在order-service的pom文件中,引入eureka-client依赖
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    
    
    • 1
    • 2
    • 3
    • 4
    1. 在order-service的application.yml文件,添加服务名称、eureka地址
    spring:  
      application:
        name: order-service  # order eureka服务名称
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka  #eureka服务地址
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 服务拉取和负载均衡,在order-service的OrderApplication中,给RestTemplate这个Bean添加一个@LoadBalanced注解:
        /**
         * 创建 RestTemplate 并注入 Spring 容器
         * @return
         */
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 修改OrderService类中的queryOrderById方法。修改访问的url路径,用服务名代替ip、端口
      • String url =“http://user-service/user/”+order.getUserId();
      • spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡。
        public Order queryOrderById(Long orderId) {
            // 1.查询订单
            Order order = orderMapper.findById(orderId);
    
            //2.利用 RestTemplate 发起 http 请求,查询用户
            //2.1 url路径
            //String url ="http://localhost:8081/user/"+order.getUserId();
            String url ="http://user-service/user/"+order.getUserId();
    
            //2.2 发起 http 请求,实现远程调用
            User user=  restTemplate.getForObject(url, User.class);
    
            //3. 封装 user 到 Order
            order.setUser(user);
    
            // 4.返回
            return order;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    51单片机8(LED闪烁)
    Nvidia GPU 入门教程之 07 TensorFlow MNiST GPU A100(教程含源码)
    msvcp120.dll下载_msvcp120.dll文件丢失解决[dll系统文件修复]
    thinkphp5.1 关联查询
    P2433 【深基1-2】小学数学 N 合一题解
    开发者体验:现代企业架构的关键一环
    使用路网数据完成数据库专题训练
    软件评测师之CPU的构成
    使用 Ruby 语言来解析开放文档格式 OOXML 文件
    协程(二)——kotlin中协程启动的条件
  • 原文地址:https://blog.csdn.net/m0_59564754/article/details/132987962