当前位置: 首页 > article >正文

dubbo3 负载均衡

dubbo3 负载均衡

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

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

服务端配置

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();
    }
}

配置文件的方式配置

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 注解配置

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));
    }
}

http://www.kler.cn/a/488283.html

相关文章:

  • el-select使用enter选中触发了另一个enter方法
  • js代理模式
  • 针对数据库系统安全的漏洞扫描加固工具【WebSocket + MySQL】
  • 《零基础Go语言算法实战》【题目 1-14】字符串的替换
  • 【可实战】Bug的判定标准、分类、优先级、定位方法、提交Bug(包含常见面试题)
  • JS进阶--JS听到了不灭的回响
  • js迭代器模式
  • python+camelot库:提取pdf中的表格数据
  • 工厂人员定位管理系统方案(二)人员精确定位系统架构设计,适用于工厂智能管理
  • 《零基础Go语言算法实战》【题目 2-1】使用一个函数比较两个整数
  • iOS - 数组的真实类型
  • .NET 终止或结束进程
  • [SAP ABAP] 使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数据
  • Unity3D使用GaussianSplatting加载高斯泼溅模型
  • React Error Boundary 错误边界限制
  • Java Web开发进阶——Spring Security基础与应用
  • 华为C语言编程规范总结
  • 用户界面的UML建模11
  • MIT 6.S081 Lab9 File System
  • jeecg-boot 表单选择一条数据保存
  • 深入学习Headers Exchange交换机
  • 打桩机:灾害救援中的 “应急尖兵”,稳固支撑的保障|鼎跃安全
  • 解锁无证身份核验:开启便捷安全新征程
  • 专精特新申报条件
  • 了解RabbitMQ的工作原理
  • tdengine数据库使用java连接