spring-cloud-alibaba
29
总安装量
29
周安装量
#7155
全站排名
安装命令
npx skills add https://github.com/teachingai/full-stack-skills --skill spring-cloud-alibaba
Agent 安装分布
claude-code
24
opencode
23
gemini-cli
21
antigravity
19
qoder
19
Skill 文档
Spring Cloud Alibaba å¼åæå
æ¦è¿°
Spring Cloud Alibaba æ¯é¿éå·´å·´æä¾çå¾®æå¡è§£å³æ¹æ¡ï¼æä¾äº Nacosï¼æå¡æ³¨åä¸é ç½®ï¼ãSentinelï¼æµéæ§å¶ï¼ãRocketMQï¼æ¶æ¯éåï¼ãSeataï¼åå¸å¼äºå¡ï¼çç»ä»¶ã
æ ¸å¿ç»ä»¶
1. Nacosï¼æå¡æ³¨åä¸é ç½®ä¸å¿ï¼
Nacos Server å®è£ ï¼
# ä¸è½½ 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);
}
}
application.ymlï¼
spring:
application:
name: user-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
namespace: dev
group: DEFAULT_GROUP
é 置管çï¼
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
卿é ç½®å·æ°ï¼
@RestController
@RefreshScope
public class ConfigController {
@Value("${app.name:default}")
private String appName;
@GetMapping("/config")
public String getConfig() {
return appName;
}
}
2. Sentinelï¼æµéæ§å¶ï¼
ä¾èµï¼
<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();
}
3. RocketMQï¼æ¶æ¯éåï¼
ä¾èµï¼
<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());
}
}
4. Seataï¼åå¸å¼äºå¡ï¼
ä¾èµï¼
<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
ä½¿ç¨ @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 æ¡æ¶ï¼
ä¾èµï¼
<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
æä½³å®è·µ
1. æå¡æ³¨å
- ä½¿ç¨ Nacos ä½ä¸ºæå¡æ³¨åä¸å¿
- é ç½®åéçå½å空é´ååç»
- 设置å¥åº·æ£æ¥
2. é 置管ç
- ä½¿ç¨ Nacos é ç½®ä¸å¿ç»ä¸ç®¡ç
- åºåç¯å¢é ç½®ï¼devãtestãprodï¼
- æ¯æå¨æå·æ°
3. æµéæ§å¶
- ä½¿ç¨ Sentinel è¿è¡æµéæ§å¶
- é ç½®éæµãçæãé级è§å
- çæ§æå¡è°ç¨æ åµ
4. åå¸å¼äºå¡
- ä½¿ç¨ Seata å¤çåå¸å¼äºå¡
- åçä½¿ç¨ @GlobalTransactional
- é¿å é¿äºå¡
常ç¨ä¾èµ
<!-- 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>
ç¤ºä¾ Prompt
- “å¦ä½ä½¿ç¨ Spring Cloud Alibaba æå»ºå¾®æå¡æ¶æï¼”
- “Nacos å¦ä½é ç½®æå¡æ³¨ååé 置管çï¼”
- “å¦ä½å¨ Spring Cloud Alibaba ä¸ä½¿ç¨ Sentinel è¿è¡æµéæ§å¶ï¼”
- “Spring Cloud Alibaba ä¸å¦ä½ä½¿ç¨ Seata å¤çåå¸å¼äºå¡ï¼”
- “å¦ä½é ç½® RocketMQ æ¶æ¯éåï¼”