SuperAPI AI Directory

spring-cloud-alibaba

General & other

View repository

Updated 10-15 21:48

About this skill

Spring Cloud Alibaba Development Guide

Overview

Spring Cloud Alibaba is a microservices solution provided by Alibaba, offering components such as Nacos (service registration and configuration), Sentinel (traffic control), RocketMQ (message queue), and Seata (distributed transactions).

Core Components

1. Nacos (Service Registration and Configuration Center)

Nacos Server Installation:

# 下载 Nacos
wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
Extract and Start

tar -xzf nacos-server-2.2.0.tar.gz cd nacos/bin sh startup.sh -m standalone


**服务注册**:

```java
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

application.yml:

spring:
  application:
    name: user-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: dev
        group: DEFAULT_GROUP

Configuration Management:

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        namespace: dev
        group: DEFAULT_GROUP
        shared-configs:
          - data-id: common-config.yaml
            group: DEFAULT_GROUP
            refresh: true

Dynamic Configuration Refresh:

@RestController
@RefreshScope
public class ConfigController {
    @Value("${app.name:default}")
    private String appName;

    @GetMapping("/config")
    public String getConfig() {
        return appName;
    }
}

2. Sentinel (Traffic Control)

Dependencies:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

Configuration:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
      datasource:
        flow:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow

Traffic Control:

@Service
public class UserService {
    @SentinelResource(value = "getUser", blockHandler = "getUserBlockHandler")
    public User getUser(Long id) {
        return userRepository.findById(id)
            .orElseThrow(() -> new UserNotFoundException(id));
    }

    public User getUserBlockHandler(Long id, BlockException ex) {
        return new User(); // 降级处理
    }
}

Circuit Breaking and Degradation:

@SentinelResource(
    value = "getUser",
    fallback = "getUserFallback",
    blockHandler = "getUserBlockHandler"
)
public User getUser(Long id) {
    // 业务逻辑
}

public User getUserFallback(Long id, Throwable ex) {
    // 降级处理
    return new User();
}

3. RocketMQ (Message Queue)

Dependencies:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-rocketmq</artifactId>
</dependency>

Configuration:

spring:
  cloud:
    stream:
      rocketmq:
        binder:
          name-server: localhost:9876
        bindings:
          output:
            producer:
              group: user-service-group

Message Sending:

@Service
public class UserService {
    private final RocketMQTemplate rocketMQTemplate;

    public UserService(RocketMQTemplate rocketMQTemplate) {
        this.rocketMQTemplate = rocketMQTemplate;
    }

    public void sendUserCreatedEvent(User user) {
        rocketMQTemplate.convertAndSend("user-topic", user);
    }
}

Message Receiving:

@Component
@RocketMQMessageListener(
    topic = "user-topic",
    consumerGroup = "user-consumer-group"
)
public class UserEventListener implements RocketMQListener<User> {
    @Override
    public void onMessage(User user) {
        // 处理消息
        System.out.println("Received user: " + user.getName());
    }
}

4. Seata (Distributed Transactions)

Dependencies:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

Configuration:

spring:
  cloud:
    alibaba:
      seata:
        tx-service-group: my-tx-group
        enabled: true

seata:
  enabled: true
  application-id: ${spring.application.name}
  tx-service-group: my-tx-group
  config:
    type: nacos
    nacos:
      server-addr: localhost:8848
      namespace: ""
      group: SEATA_GROUP
  registry:
    type: nacos
    nacos:
      server-addr: localhost:8848
      namespace: ""
      group: SEATA_GROUP

Using @GlobalTransactional:

@Service
public class OrderService {
    @GlobalTransactional
    public void createOrder(Order order) {
        // 1. 创建订单
        orderRepository.save(order);

        // 2. 扣减库存
        productService.reduceStock(order.getProductId(), order.getQuantity());

        // 3. 扣减余额
        accountService.deductBalance(order.getUserId(), order.getAmount());
    }
}

5. Dubbo (RPC Framework)

Dependencies:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>

Configuration:

spring:
  cloud:
    dubbo:
      application:
        name: user-service
      registry:
        address: nacos://localhost:8848
      protocol:
        name: dubbo
        port: 20880

Service Provider:

@Service
@org.apache.dubbo.config.annotation.Service
public class UserServiceImpl implements UserService {
    public User getUser(Long id) {
        return userRepository.findById(id).orElseThrow();
    }
}

Service Consumer:

@Service
public class OrderService {
    @org.apache.dubbo.config.annotation.Reference
    private UserService userService;

    public Order createOrder(Long userId, Order order) {
        User user = userService.getUser(userId);
        // 创建订单逻辑
        return order;
    }
}

Microservices Architecture Example

Project Structure

microservices/
├── nacos-server/           # Nacos 服务
├── gateway/                # API 网关
├── user-service/           # 用户服务
├── order-service/          # 订单服务
└── product-service/        # 商品服务

Configuration Example

Unified Configuration Management:

# Nacos 配置中心
spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        namespace: ${spring.profiles.active}
        group: DEFAULT_GROUP
        extension-configs:
          - data-id: common-datasource.yaml
            group: DEFAULT_GROUP
            refresh: true
          - data-id: common-redis.yaml
            group: DEFAULT_GROUP
            refresh: true

Best Practices

1. Service Registration

  • Use Nacos as the service registry
  • Configure appropriate namespaces and groups
  • Set up health checks

2. Configuration Management

  • Use Nacos Configuration Center for unified management
  • Distinguish environment configurations (dev, test, prod)
  • Support dynamic refresh

3. Traffic Control

  • Use Sentinel for traffic control
  • Configure rate limiting, circuit breaking, and degradation rules
  • Monitor service invocation status

4. Distributed Transactions

  • Use Seata to handle distributed transactions
  • Use @GlobalTransactional appropriately
  • Avoid long transactions

Common Dependencies

<!-- Nacos Discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!-- Nacos Config -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!-- Sentinel -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<!-- RocketMQ -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-rocketmq</artifactId>
</dependency>

<!-- Seata -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

Example Prompts

  • "How to build a microservices architecture using Spring Cloud Alibaba?"
  • "How does Nacos configure service registration and configuration management?"
  • "How to use Sentinel for traffic control in Spring Cloud Alibaba?"
  • "How to use Seata to handle distributed transactions in Spring Cloud Alibaba?"
  • "How to configure RocketMQ message queue?"