前言
Spring Cloud是Java微服务开发的事实标准,但很多开发者对它的核心组件还是一知半解。本文从零搭建一个完整的微服务项目,涵盖服务注册(Nacos)、网关(Spring Cloud Gateway)、负载均衡(LoadBalancer)三大核心组件。
一、项目架构
- microservice-demo/
- ├── service-gateway/ # API网关 (8080)
- ├── service-user/ # 用户服务 (8081)
- ├── service-order/ # 订单服务 (8082)
- └── pom.xml # 父POM
复制代码 二、依赖版本管理
- <properties>
- <java.version>17</java.version>
- <spring-boot.version>3.2.0</spring-boot.version>
- <spring-cloud.version>2023.0.0</spring-cloud.version>
- <spring-cloud-alibaba.version>2023.0.0.0</spring-cloud-alibaba.version>
- </properties>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- spring-cloud-alibaba-dependencies</artifactId>
- <version>${spring-cloud-alibaba.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
复制代码 三、服务注册中心 - Nacos
1. 下载安装Nacos
- # 下载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
复制代码 2. 服务注册配置
- # application.yml (用户服务)
- spring:
- application:
- name: service-user
- cloud:
- nacos:
- discovery:
- server-addr: localhost:8848
- namespace: dev
- server:
- port: 8081
复制代码 3. 启动类
- @SpringBootApplication
- @EnableDiscoveryClient
- public class UserServiceApplication {
- public static void main(String[] args) {
- SpringApplication.run(UserServiceApplication.class, args);
- }
- }
复制代码 四、API网关 - Spring Cloud Gateway
1. 添加依赖
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- spring-cloud-starter-gateway</artifactId>
- </dependency>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- spring-cloud-starter-loadbalancer</artifactId>
- </dependency>
复制代码 2. 网关路由配置
- 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
复制代码 五、服务间调用 + 负载均衡
- @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<Order> getOrdersByUserId(@PathVariable Long userId);
- }
- // 在启动类上添加
- @EnableFeignClients
复制代码 六、负载均衡策略配置
- # application.yml
- service-order:
- ribbon:
- NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
- # 或通过配置类
- @Configuration
- public class LoadBalancerConfig {
- @Bean
- public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(
- Environment environment, LoadBalancerClientFactory factory) {
- String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
- return new RandomLoadBalancer(
- factory.getLazyProvider(name, ServiceInstanceListSupplier.class),
- name
- );
- }
- }
复制代码 七、完整启动流程
- 启动 Nacos(8848)
- 启动 service-user(8081)
- 启动 service-order(8082)
- 启动 service-gateway(8080)
- 访问 http://localhost:8080/api/user/1
八、常见问题
- 服务注册失败? 检查Nacos地址和namespace配置
- 网关503? 确认下游服务已启动并注册到Nacos
- 负载均衡不生效? 确认使用了 lb:// 协议前缀
总结
本文完整搭建了Nacos + Gateway + LoadBalancer的微服务架构。核心要点:服务注册发现让服务解耦,网关统一入口,负载均衡实现高可用。后续可加入Sentinel限流、Seata分布式事务等组件。
本文由AI辅助创作。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |