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

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服务搭建


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

相关文章:

  • 经典笔试题 小于 n 的最大整数 贪心 回溯 剪枝 全排列
  • S32K144入门笔记(十八):DMAMUX解读
  • 告别低效人工统计!自动计算计划进度
  • Spring:AOP
  • 《Partial-label learning with a guided Prototypical classifier》23年CVPR 文献速读
  • Linux中mutex机制
  • 【CXX-Qt】2.2 生成的 QObject
  • 语法基础课1.1 变量、输入输出、表达式和顺序语句
  • Spring6:6 单元测试-JUnit
  • Cursor从小白到专家
  • redis操作
  • 超硬核区块链算法仿真:联盟链PBFT多线程仿真实现 :c语言完全详解版
  • 集成学习之随机森林
  • 全面总结:编程中的上下文(Context)
  • c#获取使用串口信息
  • 新版 React19使用 react-quill
  • 使用C++在Qt框架下调用DeepSeek的API接口实现自己的简易桌面小助手
  • 【transformer理论+实战(三)】必要的 Pytorch 知识
  • qt介绍之qscreen
  • OpenLayers集成天地图服务开发指南