5步搭建Java微服务帝国!Spring Cloud vs 单体架构大对比,代码全解析!

🔥关注墨瑾轩,带你探索编程的奥秘!🚀
🔥超萌技术攻略,轻松晋级编程高手🚀
🔥技术宝库已备好,就等你来挖掘🚀
🔥订阅墨瑾轩,智趣学习不孤单🚀
🔥即刻启航,编程之旅更有趣🚀

在这里插入图片描述在这里插入图片描述

** Java中间件与微服务的“组合拳”**

第一章:微服务架构VS单体架构——一场“变形记”

问题:为什么你的Java应用像“胖大海”?

答案
微服务架构是单体架构的“变形金刚”!

  • 单体架构缺点

    • “胖大海”式臃肿:一个应用包里塞满用户、订单、支付等模块。
    • “一损俱损”:一个模块出问题,整个系统瘫痪。
    • “龟速迭代”:新功能开发像给大象穿针线。
  • 微服务架构优势

    • “乐高积木”式灵活:拆分成小服务,独立开发、部署、扩展。
    • “故障隔离”:一个服务挂了,其他服务照常运转。
    • “闪电迭代”:团队并行开发,效率翻倍!

第二章:搭建微服务基础——3步启动“服务宇宙”

目标:用Spring Boot创建第一个微服务!

步骤1:安装依赖

# 创建Maven项目,添加Spring Boot starter依赖  
mvn archetype:generate \  
  -DgroupId=com.example \  
  -DartifactId=service-discovery \  
  -DarchetypeArtifactId=maven-archetype-quickstart \  
  -DinteractiveMode=false  

步骤2:编写服务注册中心(Eureka)

// application.yml配置  
server:  
  port: 8761  
eureka:  
  client:  
    fetch-registry: false  
    register-with-eureka: false  

// 启动类添加@EnableEurekaServer注解  
@SpringBootApplication  
@EnableEurekaServer  
public class EurekaServerApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(EurekaServerApplication.class, args);  
    }  
}  

步骤3:创建第一个微服务(User Service)

// pom.xml添加依赖  
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  
</dependency>  

// application.yml配置  
server:  
  port: 8081  
spring:  
  application:  
    name: user-service  
eureka:  
  client:  
    service-url:  
      defaultZone: http://localhost:8761/eureka  

// 控制器代码  
@RestController  
@RequestMapping("/users")  
public class UserController {  
    @GetMapping("/{id}")  
    public String getUser(@PathVariable String id) {  
        return "User " + id + " found!";  
    }  
}  

// 启动类添加@EnableEurekaClient注解  
@SpringBootApplication  
@EnableEurekaClient  
public class UserServiceApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(UserServiceApplication.class, args);  
    }  
}  

运行效果

  • 访问 http://localhost:8081/users/123 → 返回 “User 123 found!”
  • 访问 http://localhost:8761 → Eureka控制台显示注册的服务!

第三章:核心中间件集成——5大“瑞士军刀”详解

1. 服务注册与发现(Eureka)——“交通指挥官”

// 服务发现配置示例  
// 在消费者服务中添加@LoadBalanced注解  
@Bean  
@LoadBalanced  
public RestTemplate restTemplate() {  
    return new RestTemplate();  
}  

// 通过服务名调用  
@Autowired  
private RestTemplate restTemplate;  

@GetMapping("/call-user-service")  
public String callUserService() {  
    return restTemplate.getForObject("http://user-service/users/1", String.class);  
}  

2. 配置中心(Spring Cloud Config)——“远程遥控器”

// 配置中心服务配置  
// git仓库存放配置文件(如user-service-dev.properties)  
spring:  
  config:  
    import: configserver:http://localhost:8888  

// 配置中心启动类  
@EnableConfigServer  
@SpringBootApplication  
public class ConfigServerApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(ConfigServerApplication.class, args);  
    }  
}  

// 微服务读取配置  
// application.yml添加:  
spring:  
  application:  
    name: user-service  
  cloud:  
    config:  
      uri: http://localhost:8888  

3. API网关(Spring Cloud Gateway)——“流量守门人”

// 网关路由配置  
spring:  
  cloud:  
    gateway:  
      routes:  
        - id: user-service  
          uri: lb://user-service  
          predicates:  
            - Path=/api/users/**  

// 启动类添加@EnableGateway注解  
@SpringBootApplication  
@EnableGateway  
public class GatewayApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(GatewayApplication.class, args);  
    }  
}  

// 现在访问:http://localhost:9090/api/users/1 → 转发到user-service!  

4. 容错与熔断(Hystrix)——“安全气囊”

// 添加依赖  
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>  
</dependency>  

// 控制器添加@HystrixCommand  
@HystrixCommand(fallbackMethod = "fallbackMethod")  
@GetMapping("/call-user-service")  
public String callUserService() {  
    return restTemplate.getForObject("http://user-service/users/1", String.class);  

// 定义降级方法  
public String fallbackMethod() {  
    return "服务不可用!";  
}  

5. 消息队列(RabbitMQ)——“异步快递员”

// 生产者代码  
@Autowired  
private RabbitTemplate rabbitTemplate;  

@PostMapping("/send-message")  
public String sendMessage(@RequestBody String message) {  
    rabbitTemplate.convertAndSend("user-queue", message);  
    return "Message sent!";  

// 消费者代码  
@RabbitListener(queues = "user-queue")  
public void receiveMessage(String message) {  
    System.out.println("Received: " + message);  
}  

第四章:实战案例——电商系统微服务化改造

目标:将单体电商系统拆分为用户、订单、库存3个微服务!

步骤1:拆分服务

// 用户服务(User Service)  
@RestController  
@RequestMapping("/users")  
public class UserController {  
    @GetMapping("/{id}")  
    public User getUser(@PathVariable String id) {  
        // 从数据库查询用户  
    }  
}  

// 订单服务(Order Service)  
@RestController  
@RequestMapping("/orders")  
public class OrderController {  
    @PostMapping  
    public Order createOrder(@RequestBody Order order) {  
        // 创建订单并调用库存服务  
    }  
}  

// 库存服务(Inventory Service)  
@RestController  
@RequestMapping("/inventory")  
public class InventoryController {  
    @PostMapping("/reduce/{productId}")  
    public boolean reduceStock(@PathVariable String productId, @RequestParam int quantity) {  
        // 减少库存  
    }  
}  

步骤2:服务间通信(Feign)

// 订单服务调用库存服务  
@FeignClient(name = "inventory-service")  
public interface InventoryClient {  
    @PostMapping("/inventory/reduce/{productId}")  
    boolean reduceStock(@PathVariable String productId, @RequestParam int quantity);  
}  

// 在订单服务中使用  
@Autowired  
private InventoryClient inventoryClient;  

@PostMapping  
public Order createOrder(@RequestBody Order order) {  
    boolean success = inventoryClient.reduceStock(order.getProductId(), order.getQuantity());  
    if (success) {  
        // 保存订单  
    }  
}  

步骤3:全链路监控(Sleuth + Zipkin)

// 添加依赖  
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-sleuth</artifactId>  
</dependency>  
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-sleuth-zipkin</artifactId>  
</dependency>  

// 配置Zipkin服务  
spring.zipkin.base-url=http://localhost:9411  

运行效果

  • 订单服务调用库存服务时,请求链路在Zipkin中清晰可见!
  • 故障时快速定位是库存服务超时还是网络问题!

第五章:性能优化与常见问题——“微服务避坑指南”

Q1:服务雪崩怎么办?
A:

  • 熔断+降级:用Hystrix + 本地缓存返回。
  • 隔离级别:设置线程池隔离不同服务。

Q2:分布式事务如何保证?
A:

  • 最终一致性:用消息队列+补偿机制。
  • Saga模式:分阶段提交,失败回滚。

Q3:配置中心如何动态更新?
A:

// 配置中心添加@RefreshScope  
@RefreshScope  
@Configuration  
public class DynamicConfig {  
    @Value("${custom.config}")  
    private String configValue;  
}  

Q4:服务间通信卡顿?
A:

  • 负载均衡:Eureka + Ribbon自动分配。
  • 缓存:Redis缓存高频数据。

第六章:微服务架构VS单体架构——数据对比
维度单体架构微服务架构
开发效率低(耦合严重)高(并行开发)
扩展性差(整体部署)强(按需扩容)
故障影响全系统瘫痪局部影响(如订单服务故障)
部署复杂度简单(单个JAR)复杂(需Docker/K8s)
学习成本高(需掌握中间件)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨瑾轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值