单体转微服务:正确的拆分思路与实战原则(上)

一.微服务拆分的标准

1.什么时候拆

<1>项目完成后拆(先易后难)

<2>直接选择微服务架构(先难后易)

2.重要标准

低藕和,高内聚

3.拆分方法

<1>按业务拆分(横向拆分)/按功能拆分(纵向拆分)

<2>完全解耦/Maven聚合

二.微服务的拆分实践核心解决办法-----黑马商城购物车模块

在购物车模块中,我们需要调用商品模块的方法,我们如果直接引入对象会让我们的耦合度过高,所以我们通过网洛进行远程调用。

在单体架构中,我们通常通过Retrofit框架来实现,这里我们通过restTemplate来实现微服务中的远程调用

1.远程调用的实现

<1>restTemplate对象加入spring容器

复制代码
@Configuration
public class RemoteCallConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

<2>远程调用

复制代码
// 2.TODO 查询商品 通过商品id查询商品
        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, ",")));
        if (!response.getStatusCode().is2xxSuccessful()){
            return;;
        }
        List<ItemDTO> items = response.getBody();
        if (CollUtils.isEmpty(items)) {
            return;
        }

三.注册中心优化远程调用

1.注册中心原理

服务调用者:消费者

当服务提供者初始化服务时,注册中心会自动登记该服务,当服务调用者需要调用某个服务时,

注册中心会将服务推送给服务调用者,服务调用者通过负载均衡的算法选取一个服务,然后像服务提供者发起调用请求。

当服务提供者的服务kill时怎么办呢?

注册中心通过心跳机制检测服务提供者的服务是否存活,当某个服务超过合理期限无法检测到时,注册中心会自动注销该服务,并立刻推送变更给订阅过该服务的服务调用者。

2.Nacos服务注册中心

1.部署Nacos
复制代码
docker run -d \
--name nacos \
--env-file ./nacos/custom.env \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=always \
nacos/nacos-server:v2.1.0-slim

运行不起来就降低版本,是因为虚拟机分配的内存太小。

http://192.168.150.101:8848/nacos/

2.引入依赖
复制代码
<!--nacos 服务注册发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.配置Nacos
复制代码
spring:
  application:
    name: item-service # 服务名称
  cloud:
    nacos:
      server-addr: 192.168.150.101:8848 # nacos地址
相关推荐
Bs_MoneyMagnet3 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
Shota Kishi7 小时前
Solana Shreds 的 UDP 直投架构:Shredstream UDP Forwarding 的设计与实现
网络协议·架构·udp·区块链·solana
野生技术架构师8 小时前
2026 Java 面试全套总结,八股 + 场景 + AI 相关面试考点
java·人工智能·面试
香吧香9 小时前
java服务异常日志只打印异常类型,没有堆栈定位分析
java·jvm·异常
qq_2518364579 小时前
AI 疾病自查功能SpringbootAI项目实战 · 技术实现文档
java·ai·ai编程
逆境不可逃10 小时前
Pi Agent 学习笔记:对话太长以后,如何压缩上下文
java
MetaLite10 小时前
JDK 8~26 核心特性一览:从 Stream 到 Scoped Values
java
mldong10 小时前
一份 JSON,一条能跑的审批流:把报销流程送上工作流引擎
后端·架构
wno70410 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
君顾110 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房