Loading...
Loading...
Provides comprehensive guidance for Spring Cloud Alibaba including Nacos, Sentinel, RocketMQ, and Alibaba Cloud integration. Use when the user asks about Spring Cloud Alibaba, needs to use Alibaba Cloud services, implement service discovery with Nacos, or work with Spring Cloud Alibaba components.
npx skill4agent add teachingai/full-stack-skills spring-cloud-alibaba# 下载 Nacos
wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
# 解压并启动
tar -xzf nacos-server-2.2.0.tar.gz
cd nacos/bin
sh startup.sh -m standalone@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}spring:
application:
name: user-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
namespace: dev
group: DEFAULT_GROUPspring:
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@RestController
@RefreshScope
public class ConfigController {
@Value("${app.name:default}")
private String appName;
@GetMapping("/config")
public String getConfig() {
return appName;
}
}<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>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@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(); // 降级处理
}
}@SentinelResource(
value = "getUser",
fallback = "getUserFallback",
blockHandler = "getUserBlockHandler"
)
public User getUser(Long id) {
// 业务逻辑
}
public User getUserFallback(Long id, Throwable ex) {
// 降级处理
return new User();
}<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-rocketmq</artifactId>
</dependency>spring:
cloud:
stream:
rocketmq:
binder:
name-server: localhost:9876
bindings:
output:
producer:
group: user-service-group@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);
}
}@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());
}
}<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>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@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());
}
}<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>spring:
cloud:
dubbo:
application:
name: user-service
registry:
address: nacos://localhost:8848
protocol:
name: dubbo
port: 20880@Service
@org.apache.dubbo.config.annotation.Service
public class UserServiceImpl implements UserService {
public User getUser(Long id) {
return userRepository.findById(id).orElseThrow();
}
}@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/
├── nacos-server/ # Nacos 服务
├── gateway/ # API 网关
├── user-service/ # 用户服务
├── order-service/ # 订单服务
└── product-service/ # 商品服务# 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<!-- 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>