Java微服务构建需遵循“单一职责+独立部署+轻量通信”,以DDD限界上下文划分服务(如user-service、order-service),禁用技术层拆分;选用精简Spring Boot+Spring Cloud Alibaba,独立jar部署;通过Feign或消息队列通信,禁跨库直连与共享实体;配套Docker/K8s/监控/链路追踪实现基础设施即代码。

Java微服务模块的构建,核心在于“单一职责+独立部署+轻量通信”。不是简单把代码按包拆开,而是围绕业务能力划分边界,用技术手段保障自治性。
明确限界上下文,划定服务边界
从领域驱动设计(DDD)出发,识别核心业务子域。比如电商系统中,“用户管理”“订单处理”“库存校验”应是三个独立上下文,各自拥有完整数据模型和业务逻辑,不共享数据库表或内部Service类。
- 避免按技术层拆分(如所有Controller放一个服务、所有DAO放另一个)
- 每个服务只暴露明确的API(如REST/Feign接口),内部实现细节对外不可见
- 用Bounded Context命名服务(如user-service、order-service),而非api-service、data-service
选型轻量框架,聚焦运行时自治
Spring Boot是主流选择,但需精简依赖:禁用默认Web容器外的冗余starter(如spring-boot-starter-data-mongodb若不用MongoDB就排除),优先使用Spring Cloud Alibaba或Spring Cloud Netflix(注意版本兼容性)做服务治理。
- 每个服务内置嵌入式Tomcat/Jetty,打成独立jar包,通过java -jar启动
- 配置中心统一管理(Nacos/Apollo),避免application.yml硬编码
- 健康检查端点(/actuator/health)必须启用,供注册中心和服务网格探测
定义清晰通信契约,规避紧耦合
服务间调用首选同步HTTP(RestTemplate/Feign)或异步消息(RocketMQ/Kafka)。禁止直接JDBC跨库访问、禁止RPC直连未注册服务、禁止共享实体类jar(易引发版本冲突)。
立即学习“Java免费学习笔记(深入)”;
- Feign接口定义放在调用方,DTO对象单独建xxx-api模块,仅含字段和Jackson注解
- 关键流程(如下单)引入Saga模式,用本地消息表+定时任务补偿,而非强一致性分布式事务
- 超时、重试、熔断(Sentinel/Resilience4j)策略在客户端配置,不依赖服务端配合
基础设施即代码,支撑快速交付
每个服务配套Dockerfile、K8s Deployment YAML、Prometheus监控指标埋点(Micrometer)、ELK日志格式规范(JSON结构化输出)。
- Docker镜像基于openjdk:17-jre-slim,体积控制在200MB内
- K8s中为每个服务设独立Namespace,ResourceQuota限制CPU/Memory防雪崩
- 日志中强制输出traceId(通过MDC集成Sleuth),便于全链路追踪










