注册中心
1. 服务注册与发现流程
角色说明
- 服务注册中心(Register Service):它是一个 Nacos Server,可以为服务提供者和服务消费者提供服务注册和发现功能。
- 服务提供者(Provider Service):它是一个 Nacos Client,用于对外服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现和调用。
- 服务消费者(Consumer Service):它是一个 Nacos Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。
流程说明
- 从 Nacos 官方提供的下载页面中,下载 Nacos Server 并运行。
- 服务提供者 Nacos Client 启动时,会把服务以服务名(spring.application.name)的方式注册到服务注册中心(Nacos Server);
- 服务消费者 Nacos Client 启动时,也会将自己的服务注册到服务注册中心;
- 服务消费者在注册服务的同时,它还会从服务注册中心获取一份服务注册列表信息,该列表中包含了所有注册到服务注册中心上的服务的信息(包括服务提供者和自身的信息);
- 在获取了服务提供者的信息后,服务消费者通过 HTTP 或消息中间件远程调用服务提供者提供的服务。
2. 单机版客户端搭建
引入依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
编写配置文件
management: endpoints: web: exposure: include: '*' #暴露所有端点 server: port: 8081 spring: application: name: service-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #nacos地址 启动类添加注解 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ServiceProviderApplication { public static void main(String[] args) { SpringApplication.run(ServiceProviderApplication.class, args); } }
页面查看
配置中心
1. 配置获取流程图
2.单机版客户端搭建
引入依赖
编写bootstrap.yml配置文件
bootstrap.yml
是系统级别的,加载优先级高于application.yml
,负责从外部加载配置并解析
management: endpoints: web: exposure: include: '*' #springboot监控开启所有端点 server: port: 8083 spring: application: name: config-client cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #服务注册到nacos注册中心的地址 config: server-addr: 127.0.0.1:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 编写application.yml配置文件 可以通过指定不同的激活文件配合Data Id从nacos获取不同环境下的配置 spring: profiles: active: dev #激活 dev 的配置 nacos 控制台添加配置
Nacos Server 配置的Data ID的完整格式如下:${prefix}-${spring.profiles.active}.${file-extension} dataId 格式中各参数说明如下:
- ${prefix}:默认取值为微服务的服务名,即配置文件中
spring.application.name
的值,我们可以在配置文件中通过配置spring.cloud.nacos.config.prefix
来指定。 - ${spring.profiles.active}:表示当前环境对应的 Profile,例如 dev、test、prod 等。当没有指定环境的 Profile 时,其对应的连接符也将不存在, dataId 的格式变成 ${prefix}.${file-extension}。
- ${file-extension}:表示配置内容的数据格式,可以在配置文件中通过配置项
spring.cloud.nacos.config.file-extension
来配置,例如 properties 和 yaml。
启动类添加注解
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ConfigClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } }
编写配置类获取配置
注意注解@RefreshScope
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "config") @RefreshScope public class Config { private String version; private String name; public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
配置使用
注意注解@RefreshScope
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RefreshScope @RestController @RequestMapping("api/vi/config-client") public class Controller { @Autowired private Config config; @GetMapping public String get() { return "name:" + config.getName() + " | version:" + config.getVersion(); } }