• 微服务:Eureka原理实践:@EnableEurekaServer、@LoadBalanced


    在这里插入图片描述

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
    个人主页:.29.的博客
    学习社区:进去逛一逛~

    在这里插入图片描述



    一、Eureka架构概述

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

    • EurekaServer —— 服务端,注册中心。
      • 记录服务;
      • 心跳监控;
    • EurekaClient —— 客户端。
      • Provider:服务提供者。
        • 注册自己的信息到EurekaServer;
        • 每隔30秒向EurekaServer发送心跳请求;
      • Consumer:服务消费者。
        • 根据服务名称从EurekaServer拉取服务列表。
        • 基于服务列表做负载均衡,选中一个微服务后发起远程调用。



    Eureka的作用

    • 服务消费者该如何获取服务提供者的具体信息?
      • 服务提供者会在启动时向Erueka注册自己的信息。
      • Erueka保存这些注册的信息。
      • 服务消费者根据服务名称,向Erueka拉取服务提供者的信息。

    • 如果有多个服务提供者,服务消费者该如何选择?
      • 服务消费者利用负载均衡算法,从服务列表中挑选一个。

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



    三、搭建EurekaServer(服务端)


    1.创建项目,引入依赖

    创建项目,pom.xml文件中导入spring-cloud-starter-netflix-eureka-server依赖。

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

    2.编写启动类

    编写SpringBoot工程的启动类,添加上注解@EnableEurekaServer,以此开启Eureka服务。

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @EnableEurekaServer//重点,开启Eureka服务。
    @SpringBootApplication
    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

    3.添加配置信息

    在SpringBoot工程的application.yml配置文件中,添加以下配置信息。

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

    4.访问Eureka管理界面

    浏览器访问我们上一步配置的eureka的地址信息链接:http://127.0.0.1:10086/eureka,就能打开spring Eureka管理界面,查看EurekaServer的一些基本信息。

    在这里插入图片描述




    四、搭建EurekaClient(客户端)


    1.信息注册:Provider(服务提供者)

    ①引入依赖

    在服务提供者微服务的pom.xml文件中引入spring-cloud-starter-netflix-eureka-client依赖

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

    ②添加配置信息

    在服务提供者微服务的SpringBoot工程配置文件application.yml配置文件中,添加下述配置信息。

    spring:
      application:  #eureka客户端 —— 服务提供者Provider的服务名称
        name: userservice
    
    eureka:
      client:
        service-url:  # eureka的地址信息
          defaultZone: http://127.0.0.1:10086/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.信息注册:Consumer(服务消费者)

    ①引入依赖

    在服务消费者微服务的pom.xml文件中引入spring-cloud-starter-netflix-eureka-client依赖

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

    ②添加配置信息

    在服务消费者微服务的SpringBoot工程配置文件application.yml配置文件中,添加下述配置信息。

    spring:
      application:  #eureka客户端 —— 服务消费者Consumer的服务名称
          name: orderservice
    
    eureka:
      client:
        service-url:  # eureka的地址信息
          defaultZone: http://127.0.0.1:10086/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    服务消费者与服务提供者的信息注册步骤基本一致…

    即:无论是消费者还是提供者,只要引入eureka-client依赖,配置了eureka地址信息后,都可以完成注册。




    五、Eureka服务拉取(服务发现)

    • 服务拉取:基于服务名称,获取服务列表,然后对服务列表做负载均衡,挑选一个服务进行使用。

    1. 修改服务消费者(order-service)的业务层组件,即:远程调用功能的组件代码中,修改访问的url地址,使用服务名来代替ip、端口
    @Service
    public class OrderService {
    
        @Autowired
        private OrderMapper orderMapper;
    
        @Autowired
        private RestTemplate restTemplate;
    
        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();
            //使用服务提供者的服务名userservice代替ip、端口:
            String url = "http://userservice/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
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    重点在这里

            // 2.1.url路径
            //String url = "http://localhost:8081/user/" + order.getUserId();
            //使用服务提供者的服务名userservice代替ip、端口:
            String url = "http://userservice/user/" + order.getUserId();
    
    • 1
    • 2
    • 3
    • 4

    1. 在服务消费者(order-service)的启动类OrderApplication中,为Spring容器中的RestTemplate实例使用负载均衡算法,即:添加注解@LoadBalanced
    @MapperScan("cn.itcast.order.mapper")
    @SpringBootApplication
    @EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)
    public class OrderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
        }
    
        /**
         * 创建RestTemplate并注入Spring容器
         */
        @Bean
        @LoadBalanced//@LoadBalanced注解,实现负载均衡
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    1. 完成上述两部,就能做到根据服务名称从EurekaServer拉取服务列表,并做负载均衡算法,从列表中挑选一个服务使用!



    六、小结

    • @EnableEurekaServer —— 使用在SpringBoot工程启动类上,可开启Eureka服务。
    • @LoadBalanced —— 使用在@Bean方法注入的RestTemplate实例上,用于实现负载均衡算法。

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    使用dnSpy对无源码EXE或DLL进行反编译并且修改
    云计算项目九:K8S安装
    APS高级排产帮助企业构建知识化系统,推动数字化发展
    sylar高性能服务器-配置(P9)代码解析+调试分析
    【无标题】
    javaEE高阶---Spring 更简单的读取和存储对象
    C++——入门基础(下)
    记一次Nacos线程数飙升排查
    AWS无服务器 应用程序开发—第八章 计算服务(AWS Lambda)
    SpringBoot集成WebSocket实现在线聊天
  • 原文地址:https://blog.csdn.net/ebb29bbe/article/details/138081280