SpringCloudConfig 的作用是可以进行配置的更新处理,这个的确是很好,但是原始的SpringCloudNetflix 架构所提供的动态的抓取配置实在是太繁琐了,包括还要使用到SpringCloudBus进行Actuator处理
SpringCloudAlibaba套件之中是基于Nacos 实现的服务管理,Nacos里面有一个动态的监听配置,只要你在Nacos之中定义了配置项,那么就可以在程序里面动态抓取(不再需要config-server,不再需要springcloudbus)。
1.1、【microcloud项目】创建“provider-message-8201”模块
build.gradle
project(":provider-message-8201") { // 消息微服务dependencies {implementation("org.springframework.boot:spring-boot-starter-web")implementation(libraries.'spring-boot-admin-starter-client')// 以下的依赖库为Nacos注册中心所需要的依赖配置implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除旧版本的Nacos依赖}implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') {exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除旧版本的Nacos依赖}implementation(libraries.'nacos-client') // 引入与当前的Nacos匹配的依赖库}
}
1.2、【provider-message-8201】配置文件
application.yml
server: # 服务端配置port: 8201 # 8201端口
spring:application: # 配置应用信息name: message.provider # 是微服务的名称cloud: # Cloud配置nacos: # Nacos注册中心配置discovery: # 发现服务weight: 80service: ${spring.application.name} # 使用微服务的名称作为注册的服务名称server-addr: nacos-server:8848 # Nacos服务地址namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空间IDgroup: MICROCLOUD_GROUP # 一般建议大写cluster-name: MuyanCluster # 配置集群名称metadata: # 根据自身的需要配置元数据version: 1.0 # 自定义元数据项register-enabled: true
bootstrap.yml
spring: # Spring配置项application:name: message.provider # 应用名称cloud: # SpringCloud配置项nacos: # Nacos注册中心的配置config: # gRPC通讯配置server-addr: nacos-server:8848 # Nacos地址namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空间IDgroup: MICROCLOUD_GROUP # 一般建议大写cluster-name: MuyanCluster # 配置集群名称discovery: # 发现服务weight: 80service: ${spring.application.name} # 使用微服务的名称作为注册的服务名称server-addr: nacos-server:8848 # Nacos服务地址namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空间IDgroup: MICROCLOUD_GROUP # 一般建议大写cluster-name: MuyanCluster # 配置集群名称metadata: # 根据自身的需要配置元数据version: 1.0 # 自定义元数据项
1.3、【provider-message-8201】MessageAction
package com.yootk.provider.action;import com.yootk.provider.vo.MessageConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping("/provider/message/*")
public class MessageAction {@Autowiredprivate MessageConfig messageConfig;@RequestMapping("config")public Object config() {Map<String, Object> result = new HashMap<>();result.put("flag", this.messageConfig.getFlag());result.put("content", this.messageConfig.getContent());return result;}
}
1.4、【provider-message-8201】MessageConfig
package com.yootk.provider.vo;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;@Data
@Component // 必须添加为Bean
@RefreshScope // 动态加载
public class MessageConfig {@Value("${yootk.message.flag}") // 配置文件的加载KEYprivate String flag;@Value("${yootk.message.content}") // 配置文件的加载KEYprivate String content;
}
1.5、【provider-message-8201】StartMessageApplication
package com.yootk.provider;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class StartMessageApplication {public static void main(String[] args) {SpringApplication.run(StartMessageApplication.class, args);}
}
2、【Nacos控制台】既然现在不再通过GITLab存储了,那么就可以将所有的存储项保存在Nacos里面
message.provider-dev.yml
yootk:message:flag: devcontent: yootk111
message.provider-test.yml
yootk:message:flag: testcontent: yootk222
message.provider-prod.yml
yootk:message:flag: prodcontent: yootk333
3、【provider-message-8201子模块】修改bootstrap.yml配置文件:
spring.cloud.nacos.config.file-extension
speing.peofiles.active
spring: # Spring配置项application:name: message.provider # 应用名称profiles:active: dev # 使用的profile配置项cloud: # SpringCloud配置项nacos: # Nacos注册中心的配置config: # gRPC通讯配置server-addr: nacos-server:8848 # Nacos地址namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空间IDgroup: MICROCLOUD_GROUP # 一般建议大写cluster-name: MuyanCluster # 配置集群名称file-extension: yml # 配置文件类型discovery: # 发现服务weight: 80service: ${spring.application.name} # 使用微服务的名称作为注册的服务名称server-addr: nacos-server:8848 # Nacos服务地址namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空间IDgroup: MICROCLOUD_GROUP # 一般建议大写cluster-name: MuyanCluster # 配置集群名称metadata: # 根据自身的需要配置元数据version: 1.0 # 自定义元数据项
程序启动日志
此时通过日志信息可以发现,指定的配置项已经开启了订阅,那么就意味着只要修改了Nacos里面的配置项的内容,当前的消息服务就可以获取到最新的配置了。
当Nacos里面成功的修改了配置项的内容之后,对应的微服务的后台会有日志信息的输出:
Refresh keys changed: [yootk.message.content]
这个时候不再需要繁琐的ConfigServer加载,也不再需要各种的Actuator处理操作,更不需要使用到消息组件,而整个的配置可以通过可视化的环境进行方便的维护,所以技术不能够停止更新,哪怕现在技术已经跑通了,也不要停止思考。