Eureka+Ribbon使用指南

在微服务架构中,Eureka 作为服务注册与发现中心,能够让各个微服务实例在启动时将自身的信息注册到 Eureka 服务器,并从 Eureka 服务器获取其他服务的实例信息。而 Ribbon 是一个客户端负载均衡器,负责在多个服务实例之间进行负载均衡,将客户端的请求合理地分配到不同的服务实例上。下面将详细介绍 Eureka 与 Ribbon 混合使用的相关内容。

集成配置

依赖添加

在 Spring Cloud 项目中,使用 spring-cloud-starter-netflix-eureka-client 时会自带 spring-cloud-starter-ribbon 引用。在 Maven 项目的 pom.xml 中添加如下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

配置文件设置

在应用的配置文件(如 application.ymlapplication.properties)中进行相关配置:

# 开启从 Eureka 获取服务列表
ribbon.eureka.enabled=true
# 请求连接超时时间,单位 ms
ribbon.ConnectTimeout=1000
# 请求处理的超时时间,单位 ms
ribbon.ReadTimeout=3000
# 是否重试所有的接口
ribbon.OkToRetryOnAllOperations=false
# 切换实例的重试次数
ribbon.MaxAutoRetriesNextServer=2
# 对当前实例的重试次数,当 Eureka 中可以找到服务,但是服务连不上时将会重试
ribbon.MaxAutoRetries=1

如果使用 application.properties,则配置如下:

ribbon.eureka.enabled=true
ribbon.ConnectTimeout=1000
ribbon.ReadTimeout=3000
ribbon.OkToRetryOnAllOperations=false
ribbon.MaxAutoRetriesNextServer=2
ribbon.MaxAutoRetries=1

工作原理

Ribbon 在与 Eureka 混合使用时,工作过程分为两步:

  1. 选择 Eureka Server:优先选择在同一个区域内负载较少的 Eureka Server。
  2. 选择服务实例:根据用户指定的负载均衡策略,在从 Eureka Server 获取到的服务注册列表中选择一个具体的服务实例地址。

负载均衡策略

Ribbon 提供了多种负载均衡策略,常见的有:

  • 轮询(RoundRobinRule):按顺序循环选择服务实例,这是默认的策略。例如,有三个服务实例 A、B、C,请求会依次发送到 A、B、C、A、B、C……
  • 随机(RandomRule):每次随机选择一个服务实例,适用于请求量不均衡的场景。
  • 加权轮询(WeightedRoundRobinRule):根据每个实例的权重动态分配流量,适用于不同处理能力的服务实例。比如,服务实例 A 的权重为 2,服务实例 B 的权重为 1,那么在多次请求中,A 被选中的概率是 B 的两倍。

使用示例

以下是一个使用 RestTemplate 和 Ribbon 结合 Eureka 的简单示例:

服务提供者

创建一个简单的 Spring Boot 服务提供者,在 application.yml 中配置服务名和端口:

spring:
  application:
    name: microservice-provider
server:
  port: 8001
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

创建一个简单的控制器:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProviderController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello from provider!";
    }
}

服务消费者

在服务消费者项目中,配置 Eureka 客户端和 Ribbon:

spring:
  application:
    name: microservice-consumer
server:
  port: 8080
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

创建一个配置类,注入 RestTemplate 并使用 Ribbon 进行负载均衡:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

创建一个控制器来调用服务提供者的接口:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/callProvider")
    public String callProvider() {
        return restTemplate.getForObject("http://microservice-provider/hello", String.class);
    }
}

注意事项

  • 服务名一致性:服务提供者和消费者在 Eureka 中注册和调用时使用的服务名要保持一致,否则 Ribbon 无法正确找到对应的服务实例。
  • 超时设置:合理设置 ribbon.ConnectTimeoutribbon.ReadTimeout,避免因超时时间过短导致请求频繁失败,或过长导致响应时间过长。
  • 重试机制:根据实际业务需求,合理配置重试次数和是否重试所有操作,避免无限重试导致系统资源浪费。

通过以上步骤,就可以实现 Eureka 与 Ribbon 的混合使用,让微服务系统更加稳定和高效地运行。

原创文章,作者:zhiji,如若转载,请注明出处:https://zube.cn/archives/22

(0)
zhijizhiji
上一篇 21小时前
下一篇 2天前

相关推荐

  • C语言:一步一步教你实现超有趣猜数字游戏

    游戏规则介绍 猜数字游戏是C语言学习中一个经典且实用的练习项目。在这个游戏里,程序会自动随机生成一个1到100之间的整数,玩家需要不断猜测这个数字。每次猜测后,程序会给出提示,若猜…

    编程 21小时前
  • 零基础掌握C语言:猜数字游戏实现全攻略

    一、游戏规则 猜数字游戏是C语言学习中经典且实用的练习项目。程序会自动随机生成一个1到100之间的整数,玩家需要不断猜测这个数字,程序则会给出“大了”或“小了”的提示,直至玩家猜中…

    编程 2小时前
  • Git进阶秘籍:从高效分支管理到自动化脚本实战

    一、Git分支管理的重要性及基础概念 重要性 在软件开发过程中,多人协作是常态。如果没有合理的分支管理,不同开发者的代码很容易相互冲突,导致项目进度受阻。Git分支管理就像是给不同…

    编程 2天前
  • C语言猜数字游戏全流程实现指南

    一、游戏概述 猜数字游戏是C语言学习中经典且实用的练习项目,它能帮助我们掌握基本的输入输出、分支判断、循环结构,还涉及随机数的生成和交互设计。游戏规则很简单:程序自动随机生成一个1…

    编程 21小时前
  • C语言实现猜数字游戏的详尽教程

    一、游戏规则与涉及知识点 在C语言里实现猜数字游戏,是一个经典且实用的练习项目。游戏规则为:程序自动随机生成一个1到100之间的整数,玩家不断进行数字猜测,程序会给出“大了”或“小…

    编程 21小时前

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注