0


Spring Cloud Alibaba nacos配置中心

系列文章目录

第一章 Java线程池技术应用
第二章 CountDownLatch和Semaphone的应用
第三章 Spring Cloud 简介
第四章 Spring Cloud Netflix 之 Eureka
第五章 Spring Cloud Netflix 之 Ribbon
第六章 Spring Cloud 之 OpenFeign
第七章 Spring Cloud 之 GateWay
第八章 Spring Cloud Netflix 之 Hystrix
第九章 代码管理gitlab 使用
第十章 SpringCloud Alibaba 之 Nacos discovery
第十一章 SpringCloud Alibaba 之 Nacos Config

在这里插入图片描述


文章目录

前言

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。
在这里插入图片描述

1、Nacos配置中心配置信息

准备配置,nacos server中新建nacos-config.properties
在这里插入图片描述

2、项目里配置

2.1、添加依赖,配置pom.xml

<dependen®cy><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2021.0.4.0</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

2.2、添加bootstrap.yml

spring:profiles:#开发环境dev,测试环境test,生产环境prodactive: dev
  application:name: app-api-service #服务名cloud:nacos:config:server-addr: 127.0.0.1:8848group: DEFAULT_GROUP
        file-extension: yml #指定yaml格式的配置refresh-enabled:true

2.3、添加bootstrap.yml

server:port:80spring:cloud:nacos:discovery:server-addr: localhost:8848#Nacos server 的地址feign:client:config:default:#建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间ConnectTimeOut:3000#指建立连接后从服务端读取到可用资源所用的时间ReadTimeOut:5000kelvin:address: cat

2.3.1、增加Nacos配置

备注:Data ID为:服务名-环境名称.yml
在这里插入图片描述

2.4、动态刷新配置验证

@RestController
@RequestMapping("/user")
//@DefaultProperties(defaultFallback = "userInfoListFallBack")
@RefreshScope
public class UserController {
    
    @Value("${kelvin.address}")
    private String url;
   
    @GetMapping("/url")
    public String url(){
        return url;
    }}

2.5、网关与配置中心

2.5.1、添加依赖,配置pom.xml

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2021.0.4.0</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

2.5.2、添加bootstrap.yml文件

server:port:80spring:application:name: drp-gateway-service
  profiles:#开发环境dev,测试环境test,生产环境prodactive: dev
  jackson:time-zone: GMT+8
  cloud:loadbalancer:ribbon:enabled:falsenacos:discovery:server-addr: localhost:8848#Nacos server 的地址config:server-addr: localhost:8848name: gateway-router
        namespace: public
        group: DEFAULT_GROUP
        #file-extension: json #指定yaml格式的配置refresh-enabled:true#支持刷新

2.5.3、Nacos添加配置

在这里插入图片描述

[{
    "id": "user-router",
    "order": 0,
    "predicates": [{
        "args": {
            "pattern": "/user/userInfoList/**"
        },
        "name": "Path"
    }],
    "uri": "lb://user-service"
 }  
]

2.5.4、添加类

packagecom.kelvin.drp.gateway.config;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.alibaba.nacos.api.NacosFactory;importcom.alibaba.nacos.api.config.ConfigService;importcom.alibaba.nacos.api.config.listener.Listener;importcom.alibaba.nacos.api.exception.NacosException;importlombok.extern.slf4j.Slf4j;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.cloud.context.config.annotation.RefreshScope;importorg.springframework.cloud.gateway.event.RefreshRoutesEvent;importorg.springframework.cloud.gateway.route.RouteDefinition;importorg.springframework.cloud.gateway.route.RouteDefinitionWriter;importorg.springframework.context.ApplicationEventPublisher;importorg.springframework.context.ApplicationEventPublisherAware;importorg.springframework.stereotype.Component;importreactor.core.publisher.Mono;importjavax.annotation.PostConstruct;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.Executor;@RefreshScope@Component@Slf4jpublicclassDynamicRouteConfigimplementsApplicationEventPublisherAware{/**
     * nacos 配置dataId
     */@Value("${config.dynamic.route.dataId:gateway-router}")privateString dataId ="gateway-router";/**
     * nacos 配置group
     */@Value("${config.dynamic.route.group:DEFAULT_GROUP}")privateString group ="DEFAULT_GROUP";/**
     * nacos 配置地址
     */@Value("${spring.cloud.nacos.config.server-addr}")privateString serverAddr;@AutowiredprivateRouteDefinitionWriter routeDefinitionWriter;privateApplicationEventPublisher applicationEventPublisher;privatestaticfinalList<String>ROUTE_LIST=newArrayList<>();@PostConstructpublicvoiddynamicRouteByNacosListener(){try{ConfigService configService =NacosFactory.createConfigService(serverAddr);// 程序首次启动, 并加载初始化路由配置String initConfigInfo = configService.getConfig(dataId, group,5000);this.addAndPublishBatchRoute(initConfigInfo);//添加监听路由变化
            configService.addListener(dataId, group,newListener(){@OverridepublicvoidreceiveConfigInfo(String configInfo){clearRoute();try{List<RouteDefinition> gatewayRouteDefinitions =JSONObject.parseArray(configInfo,RouteDefinition.class);for(RouteDefinition routeDefinition : gatewayRouteDefinitions){addRoute(routeDefinition);}publish();}catch(Exception e){
                        e.printStackTrace();}}@OverridepublicExecutorgetExecutor(){returnnull;}});}catch(NacosException e){
            e.printStackTrace();}}privatevoidpublish(){this.applicationEventPublisher.publishEvent(newRefreshRoutesEvent(this.routeDefinitionWriter));}@OverridepublicvoidsetApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher){this.applicationEventPublisher = applicationEventPublisher;}/**
     * 批量 添加及发布 路由
     *
     * @param configInfo 配置文件字符串, 必须为json array格式
     */privatevoidaddAndPublishBatchRoute(String configInfo){try{clearRoute();List<RouteDefinition> gatewayRouteDefinitions =JSONObject.parseArray(configInfo,RouteDefinition.class);for(RouteDefinition routeDefinition : gatewayRouteDefinitions){addRoute(routeDefinition);}publish();
            log.info("Dynamic config gateway route finished. {}",JSON.toJSONString(gatewayRouteDefinitions));}catch(Exception e){
            e.printStackTrace();}}/**
     * 清除路由信息
     */privatevoidclearRoute(){for(String id:ROUTE_LIST){this.routeDefinitionWriter.delete(Mono.just(id)).subscribe();}ROUTE_LIST.clear();}/**
     * 添加路由
     *
     * @param definition
     */privatevoidaddRoute(RouteDefinition definition){try{
            routeDefinitionWriter.save(Mono.just(definition)).subscribe();ROUTE_LIST.add(definition.getId());}catch(Exception e){
            e.printStackTrace();}}}

本文转载自: https://blog.csdn.net/s445320/article/details/134025992
版权归原作者 青花锁 所有, 如有侵权,请联系我们删除。

“Spring Cloud Alibaba nacos配置中心”的评论:

还没有评论