灯土炟塘 發表於 2026-3-28 19:24:00

Spring Cloud微服务实战:服务注册、网关、负载均衡全家桶指南

<h2>前言</h2>
<p>Spring Cloud是Java微服务开发的事实标准,但很多开发者对它的核心组件还是一知半解。本文从零搭建一个完整的微服务项目,涵盖服务注册(Nacos)、网关(Spring Cloud Gateway)、负载均衡(LoadBalancer)三大核心组件。</p>
<h2>一、项目架构</h2>
<pre><code>microservice-demo/
├── service-gateway/      # API网关 (8080)
├── service-user/         # 用户服务 (8081)
├── service-order/          # 订单服务 (8082)
└── pom.xml               # 父POM</code></pre>
<h2>二、依赖版本管理</h2>
<pre><code>&lt;properties&gt;
    &lt;java.version&gt;17&lt;/java.version&gt;
    &lt;spring-boot.version&gt;3.2.0&lt;/spring-boot.version&gt;
    &lt;spring-cloud.version&gt;2023.0.0&lt;/spring-cloud.version&gt;
    &lt;spring-cloud-alibaba.version&gt;2023.0.0.0&lt;/spring-cloud-alibaba.version&gt;
&lt;/properties&gt;

&lt;dependencyManagement&gt;
    &lt;dependencies&gt;
      &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;
            &lt;artifactId&gt;spring-cloud-dependencies&lt;/artifactId&gt;
            &lt;version&gt;${spring-cloud.version}&lt;/version&gt;
            &lt;type&gt;pom&lt;/type&gt;
            &lt;scope&gt;import&lt;/scope&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
            &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;
            &lt;artifactId&gt;spring-cloud-alibaba-dependencies&lt;/artifactId&gt;
            &lt;version&gt;${spring-cloud-alibaba.version}&lt;/version&gt;
            &lt;type&gt;pom&lt;/type&gt;
            &lt;scope&gt;import&lt;/scope&gt;
      &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;/dependencyManagement&gt;</code></pre>
<h2>三、服务注册中心 - Nacos</h2>
<h3>1. 下载安装Nacos</h3>
<pre><code># 下载Nacos
wget https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.zip
unzip nacos-server-2.3.0.zip
cd nacos/bin
# 单机启动
./startup.sh -m standalone</code></pre>
<h3>2. 服务注册配置</h3>
<pre><code># application.yml (用户服务)
spring:
application:
    name: service-user
cloud:
    nacos:
      discovery:
      server-addr: localhost:8848
      namespace: dev

server:
port: 8081</code></pre>
<h3>3. 启动类</h3>
<pre><code>@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
    public static void main(String[] args) {
      SpringApplication.run(UserServiceApplication.class, args);
    }
}</code></pre>
<h2>四、API网关 - Spring Cloud Gateway</h2>
<h3>1. 添加依赖</h3>
<pre><code>&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;
    &lt;artifactId&gt;spring-cloud-starter-gateway&lt;/artifactId&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;
    &lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;
    &lt;artifactId&gt;spring-cloud-starter-loadbalancer&lt;/artifactId&gt;
&lt;/dependency&gt;</code></pre>
<h3>2. 网关路由配置</h3>
<pre><code>spring:
application:
    name: service-gateway
cloud:
    nacos:
      discovery:
      server-addr: localhost:8848
    gateway:
      routes:
      - id: user-service
          uri: lb://service-user    # lb表示负载均衡
          predicates:
            - Path=/api/user/**
          filters:
            - StripPrefix=1      # 去掉/api前缀
      - id: order-service
          uri: lb://service-order
          predicates:
            - Path=/api/order/**
          filters:
            - StripPrefix=1
      # 跨域配置
      globalcors:
      cors-configurations:
          '[/**]':
            allowedOrigins: "*"
            allowedMethods: "*"
            allowedHeaders: "*"

server:
port: 8080</code></pre>
<h2>五、服务间调用 + 负载均衡</h2>
<pre><code>@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {

    private final RestTemplate restTemplate;
    private final DiscoveryClient discoveryClient;

    // 方式1:使用RestTemplate + LoadBalancer
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
      return restTemplate.getForObject(
            "http://service-order/order/" + id,
            Order.class
      );
    }

    // 方式2:使用OpenFeign(推荐)
    // 定义Feign接口
}

// Feign接口
@FeignClient(name = "service-order")
public interface OrderFeignClient {
    @GetMapping("/order/{userId}")
    List&lt;Order&gt; getOrdersByUserId(@PathVariable Long userId);
}

// 在启动类上添加
@EnableFeignClients</code></pre>
<h2>六、负载均衡策略配置</h2>
<pre><code># application.yml
service-order:
ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

# 或通过配置类
@Configuration
public class LoadBalancerConfig {
    @Bean
    public ReactorLoadBalancer&lt;ServiceInstance&gt; randomLoadBalancer(
            Environment environment, LoadBalancerClientFactory factory) {
      String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
      return new RandomLoadBalancer(
            factory.getLazyProvider(name, ServiceInstanceListSupplier.class),
            name
      );
    }
}</code></pre>
<h2>七、完整启动流程</h2>
<ol>
<li>启动 Nacos(8848)</li>
<li>启动 service-user(8081)</li>
<li>启动 service-order(8082)</li>
<li>启动 service-gateway(8080)</li>
<li>访问 http://localhost:8080/api/user/1</li>
</ol>
<h2>八、常见问题</h2>
<ul>
<li><strong>服务注册失败?</strong> 检查Nacos地址和namespace配置</li>
<li><strong>网关503?</strong> 确认下游服务已启动并注册到Nacos</li>
<li><strong>负载均衡不生效?</strong> 确认使用了 lb:// 协议前缀</li>
</ul>
<h2>总结</h2>
<p>本文完整搭建了Nacos + Gateway + LoadBalancer的微服务架构。核心要点:服务注册发现让服务解耦,网关统一入口,负载均衡实现高可用。后续可加入Sentinel限流、Seata分布式事务等组件。</p>
<p><em>本文由AI辅助创作。</em></p>

</div>
<div id="MySignature" role="contentinfo">
   

---

📌 **如果觉得文章对你有帮助,欢迎点赞👍收藏⭐!**

💬 有问题或建议?欢迎在评论区留言讨论~

🔗 更多技术干货请关注作者:弥烟袅绕

📚 本文地址:https://www.cnblogs.com/czlws/p/19788410<br><br>
来源:https://www.cnblogs.com/czlws/p/19788410
頁: [1]
查看完整版本: Spring Cloud微服务实战:服务注册、网关、负载均衡全家桶指南