dubbo3 负载均衡

dubbo3 负载均衡

负载均衡在分布式服务中任何一个解决方案都是要考虑的问题常见的分布式负载均衡算法也很多,对于 dubbo 来说负载均衡的配置可以在配置文件中设置全局的配置,也可以在服务注解 @DubboReference(loadbalance = LoadbalanceRules.SHORTEST_RESPONSE) @DubboService(protocol = "tri", loadbalance = LoadbalanceRules.CONSISTENT_HASH) 这里做配置,优先级最高的肯定是注解的方式

  • 轮训
  • 随机(随机 + weight)
  • 一致性 hash
  • 活跃度
  • 响应时间

服务端配置

Java 复制代码
package com.rpc.dubbo.loadbalance.random;

import com.rpc.dubbo.loadbalance.OrderService;
import org.apache.dubbo.common.constants.LoadbalanceRules;
import org.apache.dubbo.config.annotation.DubboService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.UUID;

/**
 * @author xl-9527
 * @since 2025/1/9
 **/
@DubboService(protocol = "tri", loadbalance = LoadbalanceRules.CONSISTENT_HASH)
public class OrderServiceImpl implements OrderService {

    private static final Logger log = LoggerFactory.getLogger(OrderServiceImpl.class);

    @Override
    public String getOrderNumber(final Long orderId) {
        log.info("orderId -> {}", orderId);
        return UUID.randomUUID().toString();
    }
}

配置文件的方式配置

yml 复制代码
spring:
  application:
    name: dubbo-rpc-load-balance-consumer
dubbo:
  application:
    register-mode: instance
    metadata-type: remote
    qos-enable: false
  protocol:
    name: tri
    port: -1
  registry:
    address: ${NACOS_ADDRESS:127.0.0.1}:8848
    protocol: nacos
    group: xl-9527
    parameters:
      namespace: 096e0cc4-f6c3-428a-a712-71dd2c3162a4
  consumer:
    loadbalance: random

consumer 注解配置

Java 复制代码
package com.rpc.dubbo.loadbalance;

import org.apache.dubbo.common.constants.LoadbalanceRules;
import org.apache.dubbo.config.annotation.DubboReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

/**
 * @author xl-9527
 * @since 2025/1/9
 **/
@Service
public class OrderServiceStub {

    private static final Logger log = LoggerFactory.getLogger(OrderServiceStub.class);

    @DubboReference(loadbalance = LoadbalanceRules.SHORTEST_RESPONSE)
    private OrderService orderService;

    public void getOrderNumber(final Long orderId) {
        log.info("orderId -> {}, num -> {}", orderId, orderService.getOrderNumber(orderId));
    }
}
相关推荐
海的透彻3 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat3 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习4 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one4 小时前
算法--构造
java·数据结构·算法
SL_staff4 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff5 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko76 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.6 小时前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
SL_staff6 小时前
JVS-APS的7个刚性约束设计:从无限产能幻觉到可执行排产的工程实践
java·spring cloud·全栈
代码山河7 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目