前言
Spring Cloud
存在Spring Cloud1.x和Spring Cloud2.x
版本,目前主流使用2.x版本,因为服务注册组件eureka
的停止维护,所以目前很多公司都开始使用其他的替代方案,而阿里系的Spring-Cloud-Alibaba
成了微服务生态一个主流解决方案。目前我所在公司也准备使用阿里这套方案进行微服务开发。本文主要介绍服务注册中心nacos
的使用入门
概念
什么是Nacos?
Nacos
致力于帮助您发现、配置和管理微服务。Nacos
提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos
主要特性(目前我使用到的):
- 服务发现和服务健康监测
Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。
Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量 - 动态配置服务
Nacos提供对服务的动态配置,即支持动态修改服务配置文件application.yml
中的属性,利用此特性我们可以动态配置Spring Cloud Gateway动态路由。
快速安装
- 安装运行Nacos
安装教程查看nacos官网,推荐使用编译后压缩包安装方式,自己编译可能报错。
安装以后运行或关闭软件:
Windows直接运行startup.cmd
、shutdown.cmd
linux中执行脚本sh startup.sh -m standalone
、sh shutdown.sh
- 检测安装
访问http://ip:port/nacos
,打开nacos
后台主页说明安装成功
整合Spring Cloud生态
- 启动服务发现
服务注册实现:新建项目provider,添加依赖spring-cloud-starter-alibaba-nacos-discovery
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
复制代码
在启动类加上注解@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
复制代码
配置application.yml
文件
spring:
application:
name: service-provider
cloud:
nacos:
discovery:
server-addr: 10.0.0.205:8848
server:
port: 9005
feign:
sentinel:
enabled: true
复制代码
配置结束,启动provider,查看nacos管理后台查看服务是否注册成功(被检测到)
- 启动服务配置
Spring Cloud Alibaba Nacos Config
是Spring Cloud Config Server
和Client
的替代方案,客户端和服务器上的概念与Spring Environment 和 PropertySource
有着一致的抽象,在特殊的bootstrap
阶段,配置被加载到Spring
环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容
服务配置功能让我们可以通过Nacos
后台去修改微服务配置文件或者在此处来写,无需重启项目。我们以provider为例来检测Nacos
服务配置的强大功能。
此处我们以获取配置文件中nanshen.name
的值为例
1、服务端初始化
在Nacos配置管理列表里添加一个服务配置:
配置好以后点击发布即可!
2、客户端初始化
因为我们已经把服务配置放到Nacos上进行动态管理,所以我们就不需要在服务中去维护配置文件application.yml了,我们可以把它删除掉,但是存在一个问题,我的微服务怎么去发现Nacos中的配置呢,所以此时我们仍然需要一个bootstrap.properties配置文件用于识别Nacos中所在服务器中的配置文件。
编写一个接口返回配置文件中user.name值:此处需要使用
ConfigurableApplicationContext
类,不能使用
@Value
注解读取,因为
@Value
为一次性读取,读取一次后会把数据存到内存,不会再去读取配置环境中的值,所以如果要实现动态配置的话就不能使用
@Value
注解。
@RestController
public class TestController {
@Autowired
private ConfigurableApplicationContext configurableApplicationContext;
@GetMapping("/get_name")
public String getNanShenName(){
String username=configurableApplicationContext.getEnvironment().getProperty("user.name");
return username;
}
}
复制代码
测试动态配置:在Nacos对应的配置文件中修改user.name值为nanshen,然后发布,可以在微服务后台日志看到user.name值被修改。
如图可以看到实现了动态修改配置文件功能,此功能对于网关动态路由技术有非常大的意义。
示例源码更新中...