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

单体项目拆分成微服务项目—远程调用问题

1. 什么时候拆分微服务?

● 初创型公司或项目尽量采用单体项目,快速试错。随着项目发展到达一定规模再做拆分

2. 如何拆分微服务?

● 目标:高内聚、低耦合。

● 方式:纵向拆分、横向拆分

3. 拆分后碰到的第一个问题是什么,如何解决?

● 拆分后,某些数据在不同服务,无法直接调用本地方法查询数据

● 利用RestTemplate发送Http请求,实现远程调用

4. 远程调用方法

5. 举个例子

private void handleCartItems(List<CartVO> vos) { // 1.获取商品id Set<Long> itemIds = vos.stream().map(CartVO::getItemId).collect(Collectors.toSet()); // 2.查询商品 // List<ItemDTO> items = itemService.queryItemByIds(itemIds); // if (CollUtils.isEmpty(items)) { // throw new BadRequestException("购物车中商品不存在!"); // } // 2.1.利用RestTemplate发起http请求,得到http的响应 ResponseEntity<List<ItemDTO>> response = restTemplate.exchange( "http://localhost:8081/items?ids={ids}", HttpMethod.GET, null, new ParameterizedTypeReference<List<ItemDTO>>() { }, Map.of("ids", CollUtil.join(itemIds, ",")) ); // 2.2.解析响应 if (!response.getStatusCode().is2xxSuccessful()) { // 查询失败,直接结束 return; } List<ItemDTO> items = response.getBody(); if (CollUtils.isEmpty(items)) { return; } // 3.转为 id 到 item的map Map<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity())); // 4.写入vo for (CartVO v : vos) { ItemDTO item = itemMap.get(v.getItemId()); if (item == null) { continue; } v.setNewPrice(item.getPrice()); v.setStatus(item.getStatus()); v.setStock(item.getStock()); } }
http://www.jsqmd.com/news/1284822/

相关文章:

  • 网络学习系列之二:交换机、集线器、广播域与交换技术详解
  • AI品牌视觉设计不是工具选择题,而是战略卡点(附2024全球TOP10品牌AI视觉成熟度评估矩阵)
  • STM32F4 ADC从原理到实战:配置、优化与调试全解析
  • TV Bro电视浏览器:终极免费开源方案,大屏上网新体验
  • 地震检波器组合特性分析:从空间滤波原理到Python仿真实践
  • 字符串索引查找:多语言实现与避坑指南
  • Klipper双Z轴等高校准:解决3D打印第一层不平整的终极方案
  • 51单片机入门实战:Proteus仿真光控灯项目全流程解析
  • 复盘:2024年9月至今一年半二级市场全景复盘:所有涨跌本质,都是流动性的定价游戏 / 降息普涨周期 VS 存量K型分化周期
  • Web 应用中“敏感信息泄露“的常见位置?
  • LLM与知识库融合:RAG架构与实战优化
  • 测试1111111111111111111111
  • 17天金融量化入门 - Day8
  • MATLAB大型方程组求解:LU、QR与Cholesky分解原理与工程实战
  • 同一个产品,为什么你的CPM比别人高3倍?不是受众问题,是主页权重
  • NMAP实战:运维工程师内网排查必备工具
  • 基于Arduino/ESP32的PM2.5与CO2空气质量检测仪DIY全攻略
  • CTFWeb Writeup|dirsearch 目录爆破 + JSFuck + PHP 变形混淆解析
  • 从0603到AXIAL:电阻封装选型、库设计与焊接工艺全解析
  • C++/CLI实战:构建原生C++与.NET的互操作桥梁
  • 《大话文渊慧典》:外二篇-按次付费的云OCR有多坑?我用计算器按出了馆长的血压值
  • 为什么运维工程师都在偷偷学Python?看完这篇基础语法解析,你就懂了
  • C++面向对象编程:从类与对象基础到封装实践
  • 长治安防监控筛选指南:瑞创竣工资料规范说明
  • dvwa之weak session ids
  • RAG系统文档切片语义割裂问题分析与解决方案
  • 2026年7月肉类食品设备/梁山食品设备料车购销部哪家专业_梁山安捷二手设备购销部 - 行业平台推荐
  • 一文掌握大模型常用量化方法
  • (2026最新)银川本地人必选的靠谱漏水检测维修推荐:正规防水补漏防水-卫生间/厨房/屋顶/阳台/外墙渗漏水精准测漏,本地人的信赖之选 - 安佳防水
  • Python七大应用方向解析:从Web开发到AI,如何选择学习路径