✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 微服务
✨特色专栏: 知识分享
🥭本文内容:【1.4】Java微服务:服务注册和调用(Eureka+Ribbon)
📚 ** ps **  : 阅读这篇文章如果有问题或者疑惑,欢迎各位在评论区提问或指出!


 

-----------------------------------------------------       目录       ----------------------------------------------------------

 

目录

一、介绍

1. 问题

2.关于Eureka的介绍

介绍:

组成:

3. 关于Ribbon的介绍

介绍

常见的Ribbon负载均衡策略

二、相关代码的实现

1. 搭建Eureka服务

1) 导入依赖

 2)在主函数内开启Eureka注解​编辑

3)编写yml文件

 4)进入服务中心

 5)页面说明

 2. Eureka服务注册

1)导入服务端依赖

2)在yml文件中,添加配置

3)添加多个服务

4)简单的使用

 3.Ribbon的使用

1. 使用

2. 负载均衡测试


-------------------------------------------------------------------------------------------------------------------------------- 

一、介绍

1. 问题

在介绍Eureka与Ribbon实现服务注册和调用功能之前,我们需要先回答一些问题:

1)微服务的远程调用,在使用注册中心之前,是怎么实现的?

一种比较多的方式是通过HTTP请求实现,像前端一样访问另一个服务的接口。

而具体的实现方式,像通过通过SpringBoot框架内的RestTemplate组件,发送HTTP请求到其他接口,实现代码如下:

    @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();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }

j结果截图:

2)使用restTemplate的方式进行微服务的远程调用,会哪些缺点?

  1. 首先,使用restTemplate不能解决许多微服务的许多问题。如服务的管理,服务调用的的负载均衡实现、发生故障或下线的即时处理

2.关于Eureka的介绍

介绍:

  • Eureka是Netflix开源的一个用于服务发现和注册中心的组件。它是基于RESTful风格的微服务框架,主要用于在分布式系统中管理和监控服务实例的状态。
  • 服务管理:Eureka允许服务在启动时向注册中心注册自己的信息,并周期性地发送心跳来更新状态。
  • 其他服务可以通过查询注册中心来获取可用服务的信息,以实现服务的调用和负载均衡。

组成:

  • EurekaServe:服务端,注册中心
    • 记录服务信息
    • 心跳监控
  • EurekaClient:客户端
    • Provider:服务提供这,例如案例中的user-service
      • 注册自己的信息到EurekaServe
      • 每隔20秒向EurekaServer发送心跳请求
    • consumer:服务消费者,例如案例中的order-server
      • 根据服务名称从EureksServer拉取服务列表
      • 基于服务列表做负载均衡,选中一个微服务后发起远程调用

3. 关于Ribbon的介绍

介绍

  • Ribbon 是SpringCloud的其中一个组件,用于实现客户端负载均衡。它提供了负载均衡、故障转移和重试等功能,可以与服务注册中心(如 Eureka)集成使用。
  • 通过使用 Ribbon,可以实现负载均衡的客户端,使服务消费者能够可靠高效的访问多个服务提供者
  • Ribbon 提供了各种负载均衡策略,如轮询、随机、加权随机等,开发者可以根据需求选择合适的策略。

常见的Ribbon负载均衡策略

  1. RoundRobinRule:简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡策略。
  2. AvailabilityFilteringRule:对两种服务器进行忽略:
    1. 在默认情况下。这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态持续20秒,如果再次连接失败,短路的持续时间就会几何级地增加。
    2. 并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数上限,可以由客户端的<clientName><clientConfigNameSpace>.ActiveConnectionsLimit属性进行设置。
  3. WeightedResponseTimeRule:为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
  4. ZoneAvoidanceRule:以区域可用的服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内多个服务做轮询。
  5. BestAvailableRule:忽略哪些短路的服务器,并选择并发数较低的服务器。
  6. RandomRule:随机选择一个可用的服务器。
  7. RetryRule:重试机制的选择逻辑

二、相关代码的实现

1. 搭建Eureka服务

1) 导入依赖

        <!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

 2)在主函数内开启Eureka注解

3)编写yml文件

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

 4)进入服务中心

 5)页面说明

 2. Eureka服务注册

1)导入服务端依赖

在服务模块(如userServiece)的pom文件中导入:

        <!--eureka客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2)在yml文件中,添加配置

userService的配置文件中: 

 orderService的配置文件中:

3)添加多个服务

4)简单的使用

 3.Ribbon的使用

1. 使用

在服务中自定义负载均衡注解:

2. 负载均衡测试

1)调用两次101的orderService接口(orderService接口会默认调用userService的接口):

2)查看后端服务被调用情况:

 

 

 最后,

后续文章会陆续更新,希望文章对你有所帮助..!

参考文献:

Spring CloudLevel up your Java code and explore what Spring can do for you.https://spring.io/projects/spring-cloud/

09-Eureka-搭建eureka服务_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p=11&spm_id_from=pageDriver&vd_source=d0dc59eeb02e4e4b81ee32c868da3cfe

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐