带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(5)

简介: 带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(5)

带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(4)https://developer.aliyun.com/article/1339608?groupCode=taobaotech


例如批量查询门店列表,可以这么合并,核心实现如下:

public <T> List<T> queryList(List<Long> ids, Function<T, Long> idMapping) { if (CollectionUtils.isEmpty(ids)) {
return Collections.emptyList();
}

 

7

 

// 1. 查询老数据

8

 

Supplier<List<T>> oldSupplier = () -> targetRepository.queryList(ids);

9

 

// 2. 查询新数据

10

 

Supplier<List<T>> newSupplier = () -> proxyRepository.queryList(ids);

11

 

// 3. 根据合并规则合并,依赖合并工具(对合并逻辑进行抽象后的工具类)

12

 

return ProxyHelper.mergeWithSupplier(oldSupplier, newSupplier, idMapping);

13

}

 

合并工具类实现如下:

public class ProxyHelper {
/**
*核心去重逻辑,判断是否采用新表数据
*
*@param existOldData 是否存在老数据
*@param existNewData 是否存在新数据
* @param id 门店id
* @return 是否采用新表数据
*/
public static boolean useNewData(Boolean existOldData, Boolean existNewData, Long id) { if (!existOldData && !existNewData) {
//两张表都没有return true;
} else if (!existNewData) {
//新表没有return false;
} else if (!existOldData) {
//老表没有return true;
} else {
//新表老表都有,判断开关和灰度开关return 总开关打开 or 在灰度列表内
}
}
/**
*合并新/老表数据
*
*@param oldSupplier 老表数据
*@param newSupplier 新表数据
  * @return 合并去重后的数据34  */
public static <T> List<T> mergeWithSupplier(
Supplier<List<T>> oldSupplier, Supplier<List<T>> newSupplier, Function<T, Long> idMapping) { 
  List<T> old = Collections.emptyList(); 
if (总开关未打开) {
// 未完成切换,需要查询老的数据源
old = oldSupplier.get();
  }
    return merge(idMapping, old, newSupplier.get()); 
    }
  /**
  * 去重并合并新老数据
  *
* @param idMapping  门店id映射函数
* @param oldData  老数据
* @param newData  新数据
* @return 合并结果
  */
public static <T> List<T> merge(Function<T, Long> idMapping, List<T> oldData, List<T> newData) {
if (CollectionUtils.isEmpty(oldData) && CollectionUtils.isEmpty(newData)) {
return Collections.emptyList();
  }
if (CollectionUtils.isEmpty(oldData)) {
return newData;
  }
if (CollectionUtils.isEmpty(newData)) {
return oldData;
  }
Map<Long/*门店id*/, T> oldMap = oldData.stream().collect(
Collectors.toMap(idMapping, Function.identity(), (a, b) -> a)); 
  Map<Long/*门店id*/, T> newMap = newData.stream().collect(
Collectors.toMap(idMapping, Function.identity(), (a, b) -> a));
return ListUtils.union(oldData, newData)


 

77

 

 

.stream()

78

 

 

.map(idMapping)

79

 

 

.distinct()

80

 

 

.map(id -> {

81

 

 

boolean existOldData = oldMap.containsKey(id);

82

 

 

boolean existNewData = newMap.containsKey(id);

83

 

 

boolean useNewData = useNewData(existOldData, existNewData, id);

84

 

 

return useNewData ? newMap.get(id) : oldMap.get(id);

85

 

 

})

86

 

 

.filter(Objects::nonNull)

87

 

 

.collect(Collectors.toList());

88

 

}

 

89

}

 

 

 

 


带你读《2022技术人的百宝黑皮书》——一种可灰度的接口迁移方案(6)https://developer.aliyun.com/article/1339606?groupCode=taobaotech

相关文章
|
前端开发 数据可视化 JavaScript
前端vite+vue3——可视化页面性能耗时指标(fmp、fp)
前端vite+vue3——可视化页面性能耗时指标(fmp、fp)
1065 6
|
存储 网络安全 网络架构
网络技术基础(5)——VRP和telnet
VRP(Versatile Routing Platform)是其数据通信产品的操作系统,支持路由器和交换机的高效运行,提供统一用户界面和控制平面功能。VRP通过组件化结构实现功能裁剪和扩展。设备初始化时,BootROM先启动,然后运行系统软件,从默认路径读取配置文件。管理设备可通过命令行或Web网管,命令行包括用户界面和级别控制,提供权限管理。文件系统管理涉及存储设备如SDRAM、Flash、NVRAM等。用户可使用 PuTTY 工具通过Console口本地登录,或通过SSH远程登录。VRP命令行具有编辑和在线帮助功能,提供undo命令恢复默认设置。
|
XML 分布式计算 安全
hadoop升级流程
hadoop升级流程
|
7月前
|
机器学习/深度学习 人工智能 算法
ICLR 2026|面向问题 + 锚点验证,解锁 LLM 代码优化新范式
软件工程中代码效率优化至关重要。本文提出一种全新大模型代码优化方案,采用面向问题的优化视角与锚点验证框架,突破局部改进局限与优化税瓶颈,显著提升优化效果、执行效率与代码可靠性,为大模型自动化高性能代码生成开辟实用化新路径。
549 1
|
3月前
|
数据采集 安全 数据管理
DCMM 2.0 数据资产域技术架构与实施路径:从资产盘点、价值评估到合规流通的全链路设计
本文从架构师视角解析DCMM 2.0(2026年7月实施)新增“数据资产域”,拆解资产盘点、价值评估、资产运营、合规流通四大工程模块,映射“理采存管用”方法论,梳理五阶段实施路径与分层平台架构,助力企业构建可审计、可估值、可运营、可流通的数据资产技术体系。
|
9月前
|
存储 机器学习/深度学习 弹性计算
阿里云服务器2核4G、4核8G、8核16G选经济型、通用算力型和计算型哪个实例更好?
阿里云服务器提供经济型e、通用算力型u2a、计算型c9i三种实例,适配2核4G至8核16G配置。经济型e实例以共享CPU调度、低成本(如2核2G年付99元)适合轻量网站及开发测试;u2a实例基于AMD EPYC处理器,算力提升20%-40%,支持高I/O突发,适合企业级应用及中小型数据库;c9i实例搭载CIPU架构与Intel至强处理器,网络延迟<1ms,IOPS达百万级,适合机器学习推理、高并发游戏等高性能场景。用户需结合业务阶段、预算及性能需求选择最优实例。
1139 3
|
4月前
|
存储 人工智能 自动驾驶
阿里云蝉联中国GenAI IaaS市场份额第一
全球权威IT研究与咨询机构IDC发布最新一期《中国智算云服务市场(2025下半年)跟踪报告》,对中国智算云基础设施市场竞争格局进行了全面分析。报告显示,阿里云以30.3%的市场份额,蝉联中国GenAI IaaS市场份额第一,连续引领中国AI云服务市场发展。
|
运维 安全 Linux
【清爽加速】Windows 11 Pro 24H2-Emmy精简系统
“清爽加速”Windows 11 Pro 24H2 针对老旧或低配设备,通过精简系统、优化服务与简化装机流程,降低资源占用,提升运行流畅度,兼顾安全性与稳定性,让老设备也能轻松应对日常办公与轻度娱乐需求。
845 1
【清爽加速】Windows 11 Pro 24H2-Emmy精简系统
|
监控 安全 Windows
IObit Uninstaller卸载工具![驱动级软件卸载工具]IObit Uninstaller解锁版安装指南及使用教程
IObit Uninstaller是一款专业卸载工具,可彻底删除软件及残留文件、注册表信息,支持批量、强制卸载,清理浏览器插件,监控安装过程,保持系统纯净稳定。
1207 1
|
SQL 存储 关系型数据库
数据库的创建和增删查改使用操作(超详细)
本文主要带新手小白理解上手mysql的增删查改等操作