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

dubbo版本与分组

Dubbo服务中,接口并不能唯一确定一个服务,只有 接口+分组+版本号 的三元组才能唯一确定一个服务。

  • 当同一个接口针对不同的业务场景、不同的使用需求或者不同的功能模块等场景,可使用服务分组来区分不同的实现方式。同时,这些不同实现所提供的服务是可并存的,也支持互相调用。
  • 当接口实现需要升级又要保留原有实现的情况下,即出现不兼容升级时,我们可以使用不同版本号进行区分。

接口

public interface DevelopService {
    String invoke(String param);
}

服务提供者

import com.doudou.dubbo.api.DevelopService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService(group = "group1", version = "1.0")
public class DevelopProviderServiceV11 implements DevelopService {
    @Override
    public String invoke(String param) {
        StringBuilder s = new StringBuilder();
        s.append("ServiceV1 param:").append(param);
        return s.toString();
    }
}
import com.doudou.dubbo.api.DevelopService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService(group = "group1", version = "2.0")
public class DevelopProviderServiceV12 implements DevelopService {
    @Override
    public String invoke(String param) {
        StringBuilder s = new StringBuilder();
        s.append("ServiceV1 param:").append(param);
        return s.toString();
    }
}
import com.doudou.dubbo.api.DevelopService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService(group = "group2", version = "1.0")
public class DevelopProviderServiceV21 implements DevelopService {
    @Override
    public String invoke(String param) {
        StringBuilder s = new StringBuilder();
        s.append("ServiceV2 param:").append(param);
        return s.toString();
    }
}
import com.doudou.dubbo.api.DevelopService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService(group = "group2", version = "2.0")
public class DevelopProviderServiceV22 implements DevelopService {
    @Override
    public String invoke(String param) {
        StringBuilder s = new StringBuilder();
        s.append("ServiceV2 param:").append(param);
        return s.toString();
    }
}

服务消费者

import com.doudou.dubbo.api.DevelopService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class VersionAndGroupingConsumer implements CommandLineRunner {
    @DubboReference(group = "group1", version = "1.0")
    private DevelopService developServiceV11;
    @DubboReference(group = "group1", version = "2.0")
    private DevelopService developServiceV12;

    @DubboReference(group = "group2", version = "1.0")
    private DevelopService developServiceV21;
    @DubboReference(group = "group2", version = "2.0")
    private DevelopService developServiceV22;

    @Override
    public void run(String... args) throws Exception {
        //调用DevelopService的group1分组实现
        System.out.println("Dubbo Remote Return v11 ======> " + developServiceV11.invoke("11"));
        System.out.println("Dubbo Remote Return v11 ======> " + developServiceV12.invoke("12"));
        //调用DevelopService的另一个实现
        System.out.println("Dubbo Remote Return v22 ======> " + developServiceV21.invoke("21"));
        System.out.println("Dubbo Remote Return v22 ======> " + developServiceV22.invoke("22"));
    }
}

跨版本升级

按照以下的步骤进行版本迁移

  1. 在低压力时间段,先升级一半提供者为新版本
  2. 再将所有消费者升级为新版本
  3. 然后将剩下的一半提供者升级为新版本

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。

服务搭建可参考dubbo服务搭建

相关文章:

  • 大模型-提示词链
  • 【前端工程化】
  • 【嵌入式学习2】C语言 - VScode环境搭建
  • UE AI 模型自动生成导入场景中
  • 安装过程中,如何防止丝杆推入支撑座时损坏油封?
  • 【算法工程】大模型开发之windows环境的各种安装
  • 2300年直线公理使数学一直存在尖锐自相矛盾
  • 【大模型】什么是循环神经网络(RNNs)
  • 政安晨【超级AI工作流】—— 使用Dify通过工作流对接ComfyUI实现多工作流协同
  • 一道积分_2
  • PostgreSQL:数据类型与运算符
  • JDBC 连接字连接 KingbaseES支持主从负载均衡参数说明。
  • 人是怎么变强的?
  • Redis 内存优化
  • [C++游戏开发基础]:构造函数浅析,8000+字长文
  • 3.22日竞蓝全扫盘
  • git的底层原理
  • 参数问题~
  • 如何区别在Spring Boot 2 和 Spring Boot 3 中使用 Knife4j:集成与配置指南
  • SinoSteel生产企业ERP实施建议书final(143页PPT)(文末有下载方式)
  • 全国党委和政府秘书长会议在京召开,蔡奇出席并讲话
  • 陕西全省公开征集涉企行政执法问题线索,切实减轻企业负担
  • A股三大股指涨跌互现,工农中三大行股价创新高
  • 与包乐史驾帆航行|航海、钓鱼和写书:一个记者的再就业之路
  • 支持医企协同创新研究,上海已设立一系列产学研医融合项目
  • 同济研究生开发AI二维码拿下大奖,新一代00开发者掀起AI创业潮