一、服务注册和发现
服务注册和发现是微服务架构中比较重要的一环,而SpringBootNacos提供了强大的服务注册和发现功能,让我们的微服务架构更加健壮。关于Nacos的安装和配置,这里就不详细阐述了,下面直接从使用SpringBootNacos注册服务开始说明。
首先配置pom.xml文件,添加以下依赖(同时需要保证SpringBoot的版本不低于2.0.4):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
接着在application.yml中配置注册中心的地址:
spring:
application:
name: service-provider #服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务端地址
然后在启动类上添加注解@EnableDiscoveryClient即可实现服务的注册和发现。
二、动态配置管理
SpringBootNacos还提供了强大的动态配置管理功能,可以轻松实现配置的热更新、多环境配置等功能。下面我将从实际应用的角度来介绍。
我们可以在配置Nacos上配置多个配置集和多个配置文件。例如:
data-id: example
group: test
refreshable-dataid: true
data-type: json
content:
server:
port: 8080
context-path: /api
#读取其他配置文件
bootstrap:
#指定环境
profiles:
active: dev
cloud:
#指定从Nacos读取配置文件
nacos:
config:
server-addr: localhost:8848
file-extension: yaml #读取解析yaml格式文件
group: test
prefix: service-pro #配置文件的前缀
refreshable: true
可以看到我们使用的是yaml格式的配置文件,SpringBootNacos也支持其他常见的配置格式(properties、json等)。其中,bootstrap.yml用来设置环境变量,因为SpringBoot默认会读取配置文件中的application.yml,而bootstrap.yml比它的优先级更高。
配置好这些文件后,我们就可以在业务代码中直接使用@Value去读取配置文件中的值,如下所示:
@Configuration
public class AppConfig {
@Value("${server.port}")
private int port; //读取端口号
@Bean
public RestHighLevelClient restHighLevelClient(){
return new RestHighLevelClient(
RestClient.builder(
new HttpHost(host, port, "http")));
}
}
配置的变动会自动触发SpringBoot的刷新机制,几乎不需要进行额外的配置和代码编写。
三、分布式事务管理
SpringBootNacos提供了完整的分布式事务管理解决方案。本节介绍如何使用TXC透明分布式事务来实现跨数据库事务。
在pom.xml中引入相应的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata-all</artifactId>
<version>2.2.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>1.4.2</version>
</dependency>
然后需要在application.yml中添加seata的配置:
spring:
application:
name: txc-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
alibaba:
seata:
tx-service-group: my_test_tx_group #开启分布式事务
config:
enabled: true
type: nacos
nacos:
server-addr: localhost:8848
group: DEFAULT_GROUP #对应配置文件中的GROUP
namespace: 4ba55e16-16df-4bd7-a436-075a2bde0c32 #对应命名空间ID
label: master
在业务代码上通过添加@GlobalTransactional注解来实现分布式事务,其中TXC是Seata中专为分库分表场景设计的事务管理模式,可以在较低的性能损耗下完成一致性事务操作。
@Service
@Slf4j
public class TxcDemoServiceImpl implements ITxcDemoService {
@Autowired
private TxcMapper txcMapper;
@GlobalTransactional
public void insertUser(UserDO user) {
txcMapper.insertUser(user);
// insert other tables...
}
@GlobalTransactional
public void deleteAll() {
txcMapper.deleteAll();
// delete other tables...
}
}
结语
本文介绍了SpringBootNacos的三个重要功能:服务注册和发现、动态配置管理、分布式事务管理。不得不说,SpringBootNacos为微服务架构的实现提供了非常便捷的帮助,极大地降低了开发的难度和维护的成本。希望本文对大家了解SpringBootNacos有所帮助。