精华内容
参与话题
问答
  • 配置中心

    千次阅读 2020-07-02 20:41:32
    在阿里有很多配置中心,这其中有集团公共的服务,也有BU自己内部的配置中心。我当时就有了疑问,为啥搞这么多配置中心啊,一两个不就好了嘛。问了帅帅的师兄,他提示了我。 配置中心的作用 配置中心其实就是为了统一...

    在阿里有很多配置中心,这其中有集团公共的服务,也有BU自己内部的配置中心。我当时就有了疑问,为啥搞这么多配置中心啊,一两个不就好了嘛。问了帅帅的师兄,他提示了我。

    配置中心的作用

    配置中心其实就是为了统一的管理配置的,但是其实这也分很多场景的。在阿里基本可以分为三类:元数据配置中心,技术配置中心,业务配置中心。

    元数据配置中心

    这个就是存放一些服务的元数据的,比如rpc的注册中心。

    技术配置中心

    这个一般都是存放代码里面的一些配置的,比如数据库的信息,白名单等等。这些是为了辅助程序功能。

    业务配置中心

    这个其实主要是业务上的一些配置,比如用户的个性化设置等等。
    其实这三个配置中心确实需要分开,各司其职。元数据里面,比如Dubbo+ZK的形式,技术配置是一般都是代码里面的一些配置,业务就是面向用户的配置。这样区分一下,就很清晰了。

    展开全文
  • 当服务很多时,都需要同时从配置中心读取文件的时候,这时我们可以考虑将配置中心做成一个微服务,并且将其集群化,从而达到高可用,架构图如下:一、准备工作继续使用上一篇文章的工程,创建一个eureka-server工程...

    转载请标明出处:
    https://www.fangzhipeng.com/springcloud/2017/06/07/sc07-config.html
    本文出自方志朋的博客

    个人博客纯净版:https://www.fangzhipeng.com/springcloud/2017/06/07/sc07-config.html

    最新Finchley版本请访问:
    https://www.fangzhipeng.com/springcloud/2018/08/07/sc-f7-config.html
    或者
    http://blog.csdn.net/forezp/article/details/81041045

    上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下:

    在这里插入图片描述

    一、准备工作

    继续使用上一篇文章的工程,创建一个eureka-server工程,用作服务注册中心。

    在其pom.xml文件引入Eureka的起步依赖spring-cloud-starter-eureka-server,代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.forezp</groupId>
    	<artifactId>eureka-server</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<name>eureka-server</name>
    	<description>Demo project for Spring Boot</description>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.5.2.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka-server</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>Dalston.RC1</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    	<repositories>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    		</repository>
    	</repositories>
    
    
    </project>
    
    

    在配置文件application.yml上,指定服务端口为8889,加上作为服务注册中心的基本配置,代码如下:

    server:
      port: 8889
    
    eureka:
      instance:
        hostname: localhost
      client:
        registerWithEureka: false
        fetchRegistry: false
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

    入口类:

    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaServerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(EurekaServerApplication.class, args);
    	}
    }
    
    

    二、改造config-server

    在其pom.xml文件加上EurekaClient的起步依赖spring-cloud-starter-eureka,代码如下:

    <dependencies>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-config-server</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka</artifactId>
    		</dependency>
    	</dependencies>
    
    

    配置文件application.yml,指定服务注册地址为http://localhost:8889/eureka/,其他配置同上一篇文章,完整的配置如下:

    spring.application.name=config-server
    server.port=8888
    
    spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
    spring.cloud.config.server.git.searchPaths=respo
    spring.cloud.config.label=master
    spring.cloud.config.server.git.username= your username
    spring.cloud.config.server.git.password= your password
    eureka.client.serviceUrl.defaultZone=http://localhost:8889/eureka/
    

    最后需要在程序的启动类Application加上@EnableEureka的注解。

    三、改造config-client

    将其注册微到服务注册中心,作为Eureka客户端,需要pom文件加上起步依赖spring-cloud-starter-eureka,代码如下:

    <dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-config</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    

    配置文件bootstrap.properties,注意是bootstrap。加上服务注册地址为http://localhost:8889/eureka/

    spring.application.name=config-client
    spring.cloud.config.label=master
    spring.cloud.config.profile=dev
    #spring.cloud.config.uri= http://localhost:8888/
    
    eureka.client.serviceUrl.defaultZone=http://localhost:8889/eureka/
    spring.cloud.config.discovery.enabled=true
    spring.cloud.config.discovery.serviceId=config-server
    server.port=8881
    
    
    
    • spring.cloud.config.discovery.enabled 是从配置中心读取文件。
    • spring.cloud.config.discovery.serviceId 配置中心的servieId,即服务名。

    这时发现,在读取配置文件不再写ip地址,而是服务名,这时如果配置服务部署多份,通过负载均衡,从而高可用。

    依次启动eureka-servr,config-server,config-client
    访问网址:http://localhost:8889/

    在这里插入图片描述

    访问http://localhost:8881/hi,浏览器显示:

    foo version 3

    本文源码下载:
    https://github.com/forezp/SpringCloudLearning/tree/master/chapter7

    四、参考资料

    spring_cloud_config

    更多阅读

    史上最简单的 SpringCloud 教程汇总

    SpringBoot教程汇总

    Java面试题系列汇总

    SouthEast
    扫码关注公众号有惊喜

    (转载本站文章请注明作者和出处 方志朋的博客

    展开全文
  • 简介在分布式系统中,spring cloud config ...我们可用用配置服务中心区集中的管理所有的服务的各种环境配置文件。配置服务中心采用git的方式存储配置文件,因此我们很容易部署修改,有助于对环境配置进行版本管理。

    转载请标明出处:
    https://www.fangzhipeng.com/springcloud/2017/06/06/sc06-config.html
    本文出自方志朋的博客

    个人博客纯净版:https://www.fangzhipeng.com/springcloud/2017/06/06/sc06-config.html

    最新Finchley版本:
    https://www.fangzhipeng.com/springcloud/2018/08/06/sc-f6-config.html
    或者
    http://blog.csdn.net/forezp/article/details/81041028

    在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件。它就是Spring Cloud Config。

    一、简介

    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

    二、构建Config Server

    创建一个spring-boot项目,取名为config-server,其pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.forezp</groupId>
    	<artifactId>config-server</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<name>config-server</name>
    	<description>Demo project for Spring Boot</description>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.5.2.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-config-server</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka</artifactId>
    		</dependency>
    	</dependencies>
    
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>Camden.SR6</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    	<repositories>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    		</repository>
    	</repositories>
    
    
    </project>
    
    
    

    在程序的入口Application类加上@EnableConfigServer注解开启配置服务器的功能,代码如下:

    
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ConfigServerApplication.class, args);
    	}
    }
    
    

    需要在程序的配置文件application.properties文件配置以下:

    spring.application.name=config-server
    server.port=8888
    
    
    spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
    spring.cloud.config.server.git.searchPaths=respo
    spring.cloud.config.label=master
    spring.cloud.config.server.git.username=your username
    spring.cloud.config.server.git.password=your password
    
    
    
    • spring.cloud.config.server.git.uri:配置git仓库地址
    • spring.cloud.config.server.git.searchPaths:配置仓库路径
    • spring.cloud.config.label:配置仓库的分支
    • spring.cloud.config.server.git.username:访问git仓库的用户名
    • spring.cloud.config.server.git.password:访问git仓库的用户密码

    如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写,本例子是公开仓库,放心使用。

    远程仓库https://github.com/forezp/SpringcloudConfig/ 中有个文件config-client-dev.properties文件中有一个属性:

    foo = foo version 3

    启动程序:访问http://localhost:8888/foo/dev

    {"name":"foo","profiles":["dev"],"label":"master",
    "version":"792ffc77c03f4b138d28e89b576900ac5e01a44b","state":null,"propertySources":[]}
    
    

    证明配置服务中心可以从远程程序获取配置信息。

    http请求地址和资源文件映射如下:

    • /{application}/{profile}[/{label}]
    • /{application}-{profile}.yml
    • /{label}/{application}-{profile}.yml
    • /{application}-{profile}.properties
    • /{label}/{application}-{profile}.properties

    三、构建一个config client

    重新创建一个springboot项目,取名为config-client,其pom文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.forezp</groupId>
    	<artifactId>config-client</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<name>config-client</name>
    	<description>Demo project for Spring Boot</description>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.5.2.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-config</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>Dalston.RC1</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    	<repositories>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    		</repository>
    	</repositories>
    
    
    </project>
    
    
    

    其配置文件bootstrap.properties

    spring.application.name=config-client
    spring.cloud.config.label=master
    spring.cloud.config.profile=dev
    spring.cloud.config.uri= http://localhost:8888/
    server.port=8881
    
    
    • spring.cloud.config.label 指明远程仓库的分支

    • spring.cloud.config.profile

      • dev开发环境配置文件
      • test测试环境
      • pro正式环境
    • spring.cloud.config.uri= http://localhost:8888/ 指明配置服务中心的网址。

    程序的入口类,写一个API接口“/hi”,返回从配置中心读取的foo变量的值,代码如下:

    @SpringBootApplication
    @RestController
    public class ConfigClientApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ConfigClientApplication.class, args);
    	}
    
    	@Value("${foo}")
    	String foo;
    	@RequestMapping(value = "/hi")
    	public String hi(){
    		return foo;
    	}
    }
    
    
    

    打开网址访问:http://localhost:8881/hi,网页显示:

    foo version 3

    这就说明,config-client从config-server获取了foo的属性,而config-server是从git仓库读取的,如图:

    在这里插入图片描述

    本文源码下载:
    https://github.com/forezp/SpringCloudLearning/tree/master/chapter6

    四、参考资料

    spring_cloud_config

    更多阅读

    史上最简单的 SpringCloud 教程汇总

    SpringBoot教程汇总

    Java面试题系列汇总

    SouthEast
    扫码关注公众号有惊喜

    (转载本站文章请注明作者和出处 方志朋的博客

    展开全文
  • SpringBoot使用Nacos作为配置中心服务和服务注册中心

    万次阅读 多人点赞 2019-03-07 18:15:41
    简介 ...目前已有的配置中心 携程开源的Apollo:数据保存在mysql中,支持命名空间和分发更新配置 springcloud 中的springcloud config:必须使用git保存配置信息 阿里的开源Nacos 其他项目未关注 最次...

    简介

    从spring开始,所有的配置文件都放在项目中,如果需要修改配置文件内容,则需要登陆服务器重启服务。想象一下如果你有一百台服务的需要修改,那是不可想象的工作量。

    目前已有的配置中心

    • 携程开源的Apollo:数据保存在mysql中,支持命名空间和分发更新配置
    • springcloud 中的springcloud config:必须使用git保存配置信息
    • 阿里的开源Nacos

    其他项目未关注
    最次的就是springcloud config 必须从git,svn才能更新

    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 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

    • 动态 DNS 服务
      动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。
      Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.

    • 服务及其元数据管理
      Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
      在这里插入图片描述

    Nacos 确实是极易上手,几乎免安装,只需要简单的解压包, 启动 server 即可,它除了提供配置中心还提供注册中心的作用,可以替代Eureka。
    不足。但是官方特别强调了 Nacos v0.8.0 Production Ready 之前不建议在生产上大规模使用,建议使用之后版本在稳定性上要高很多。
    Spring Cloud支持使用Eureka、Zookeeper、Consul实现服务发现的能力。Eureka 是其默认的也是推荐的服务注册中心组件。但从Eureka切换成Zookeeper、consul只需要改个依赖,加两行配置就可以了。

    辟谣
    Eureka没有闭源,是Eurkea 2.x分支不再维护!
    Spring Cloud并不强依赖Eureka,不要过分解读

    简单入门

    官方demo https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-boot-example
    官方git上是有它的demo的,我这里有写了一下
    本文配置中心demo源码如下:
    https://github.com/BambooZhang/springboot-study.git

    服务中心安装和启动

    1.JDK环境
    2.直接去官网git上下载 tar.gz或者zip格式到本地。
    https://github.com/alibaba/nacos

    windows安装方式
    解压后,直接双击starup.bat

    centos

      unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
      cd nacos/bin
    #启动
    sh startup.sh -m standalone
    

    启动成功后
    访问http://localhost:8848/nacos/index.html即可看到如下管理界面

    springboot客户端

    新建一个springboot工程,我这里直接拷贝了一个springboot项目,修改文件名和工程名以及pom

    pom如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>springboot</groupId>
        <artifactId>springboot-nacos</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springboot-nacos :: 整合 nacos配置中心</name>
    
        <!-- Spring Boot 启动父依赖 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
        </parent>
    
        <properties>
            <nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version>
        </properties>
    
        <dependencies>
    
            <!-- Spring Boot Web 依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!-- Spring Boot Test 依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    
            <!-- nacos 依赖 -->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>nacos-config-spring-boot-starter</artifactId>
                <version>${nacos-config-spring-boot.version}</version>
            </dependency>
    
    
            <!-- Junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
    </project>
    
    

    启动类

    package org.spring.springboot;
    
    import com.alibaba.nacos.api.config.annotation.NacosValue;
    import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import static org.springframework.web.bind.annotation.RequestMethod.GET;
    
    /**
     * Spring Boot 应用启动类
     *
     * Created by bambo on 19/2/7.
     */
    // Spring Boot 应用的标识
    @SpringBootApplication
    @RestController
    @NacosPropertySource(dataId = "bamboo.test", autoRefreshed = true)
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class,args);
        }
    
        @NacosValue(value = "${service.name:1}", autoRefreshed = true)
        private String serverName;
    
        @RequestMapping(value = "/test", method = GET)
        @ResponseBody
        public String get() {
            return serverName;
        }
    
    
    }
    
    

    配置文件
    application.properties

    nacos.config.server-addr=127.0.0.1:8848
    

    配置中心配置

    这里直接配置管理新增,注意默认group不变哦
    在这里插入图片描述
    保存发布,然后启动springboot服务,访问http://localhost:8080/test可以看到结果如下,说明成功了,如果修改这个值再发布,刷新url值也会更接着变化。自动刷新的基本功能就实现了

    bamboo
    

    扩展知识

    其他配置信息

    客户端配置文件类型设置

    在bootstrap.properties文件中
    spring.cloud.nacos.config.file-extension=properties,yml,yaml
    属性声明从配置中心中读取的配置文件格式
    该配置的缺省值为properties,即默认是读取properties格式的配置文件。当客户端没有配置该属性,并且在nacos server添加的是yml格式的配置文件,则给客户端会读取不到配置文件,导致启动失败。
    非properties配置格式,必须添加如下配置才可生效

    spring.cloud.nacos.config.file-extension=yml
    

    根据profile设置不同的环境配置

    springboot中我们可以通过配置spring.profiles.active 实现在开发、测试、生产环境下采用不同的配置文件
    同样,我们同科可以在nacos server分别创建

    ${application.name}-dev.properties
    ${application.name}-test.properties
    ${application.name}-prod.properties
    

    然后通过命令启动jar时 设置spring.profiles.active来实现不同环境下使用不同的配置文件。

    java -jar nacos-client-0.0.1-SNAPSHOT.jar --spring.profiles.active=test
    

    同样也适用于yml/yaml文件,只是客户端设置spring.cloud.nacos.config.file-extension=yaml具体可见上一个说明

    自定义group

    在同一个group下,配置文件名不能重复,所以当需要创建文件名称相同的两个配置文件时,将两个配置文件创建在不同的group下即可。当我们再同一个group下创建一个已有的配置文件时,nacos会将其视为配置文件的修改,而不是新建。
    因此我们可以把group作为一个project名称,相当于pom中的artifactId来标示不同的工程,每个工程拥有不同的配置文件即可。
    在这里插入图片描述
    但是如果创建了新的group那么客户端需要显式的配置group信息否则默认DEFAULT_GROUP空间中会出现找不到或者配置信息不符合你真实想法的情况。

    #spring.cloud.nacos.config.file-extension=yaml
    spring.cloud.nacos.config.group=bamboo_group
    

    自定义 namespace 命名空间

    相应的如果是服务,我们一般是按照一个服务一个隔离空间的,比如公司有两个不同的业务项目都有amdin服务,那么为了避免不会发生冲突,服务配置中就使用命名空间作为隔离开来。
    在这里插入图片描述
    上图我创建了一个private服务命名空间,这样只有配置了该命名空间的服务客户端才会找到,否则就找不到了

    # 根据自己nacos server生成的命名空间ID进行修改
    spring.cloud.nacos.config.namespace=fd69214f-54f1-47e8-affb-d19bc6616c13
    

    注:该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespace,否则将会导致读取不到正确的配置。

    服务中心使用mysql保存数据

    在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

    1.安装数据库,版本要求:5.6.5+
    2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
    3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

    具体操作:
    1.在mysql server 新建数据库:nocas(名字自己随意)
    2.在nacos server的 conf目录下找到nacos-mysql.sql 文件,并在创建的nacos数据库下执行表nacos-mysql.sql中的SQL语句
    3.修改nacos server application.properties配置文件,修改后如下图所示

    # spring
     
    server.contextPath=/nacos
    server.servlet.contextPath=/nacos
    server.port=8848
     
    spring.datasource.platform=mysql
     
    db.num=1
    db.url.0=jdbc:mysql://数据库IP:端口号/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=数据库用户名
    db.password=数据库密码
    

    4.重启Nacos server并添加配置文件,就可以看到mysql数据库数据表中出现了自己的配置文件内容

    注:由嵌入式数据库切换为mysql数据库后,数据并不能自动转移到mysql中,导致之前的配置文件丢失

    注 :当然为了可用性较高,生产使用建议至少主备模式,或者采用高可用数据库。

    配置中心的高可用集群

    nacos server的集群部署

    集群部署架构图
    官方的推荐部署架构图:
    [外链图片转存失败(img-x4go827X-1568616387514)(https://nacos.io/img/deployDnsVipMode.jpg)]
    推荐用户把所有服务列表放到一个vip(虚拟IP,主机宕机后可以自动漂移到备用机器上)下面,然后挂到一个域名下面
    http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
    http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。
    http://nacos.com:port/openAPI 域名+VIP模式,可读性好,而且换ip方便,推荐模式

    具体操作实践
    注:目前器群模式下不采用mysql作为配置文件的存储方式,所以需要先配置为采用mysql数据源模式,我在上一篇博客中已经说明了,这里不再介绍,直接配置集群。

    步骤如下:

    1.conf文件夹下的文件如下图所示,其中下载的压缩包解压出来是没有cluster.conf的,通过复制cluster.conf-example并修改文件名得来。
    修改cluster.conf,将部署nacos server的三台服务器ip地址写上即可
    三台服务器cluster.conf文件相同,都是协商这三个IP地址即可

    #it is ip
    #example
    114.116.137.***
    132.232.159.***
    47.107.122.***
    

    2.分别启动三台nacos server
    修改客户端,在客户端的bootstrap.properties文件中修改server的IP地址
    注:修改成自己的三台服务器ip地址,用逗号分隔

    spring.cloud.nacos.config.server-addr=114.116.137.***:8848,132.232.159.***:8848,47.107.122.***:8848
     ``
    
    启动客户端 发现可以正常启动
    
    
    
    ## 更多功能
    关于如何在这些生态中使用 Nacos,请参考以下文档:
    
    Nacos与Spring Cloud一起使用
    Nacos与Kubernetes一起使用
    Nacos与Dubbo一起使用
    Nacos与gRPC一起使用
    Nacos与Istio一起使用
    
    
    
    展开全文
  • SpringBoot使用Nacos配置中心

    万次阅读 热门讨论 2019-01-26 18:27:59
    本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心。 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计。它可以帮助您轻松构建云本机应用程序和微服务平台。 ...
  • 一、前言 之前一直学习SpringCloud, 对于配置中心,一直也是采用的Spring Cloud Config,但是用久了,发现很多地方满足不了要求,同时也感觉很low(个人看法勿喷)。在学习Spring cloud config 的时候也有听到过携程的...
  • 上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下...
  • 什么是配置中心 不使用配置中心 没有采用独立的配置中心,每次修改配置参数只能通过手动修改配置文件的方式,然后再重启重启重启,而且机器又是多台,这种方式无疑是非常低下的,而且极容易出错。 何为配置中心? ...
  • 配置中心(Config-Server)

    万次阅读 2019-03-01 16:17:46
    搭建配置中心 引入依赖 创建启动类 添加配置 创建Git仓库 配置Git仓库 搭建客户端 引入依赖 修改配置 在Git仓库创建配置文件 参考文章 Spring Cloud 配置中心为分布式系统中的服务器端和客户端提供外部化...
  • Spring Cloud Alibaba教程:使用Nacos作为配置中心

    万次阅读 多人点赞 2019-06-01 15:50:48
    转载请标明出处: ...本文出自方志朋的博客 ...Nacos除了可以作为服务注册中心,它还有服务配置中心的功能。类似于consul config,Nacos 是支持热加载的。本篇文章将讲述如何使用Nacos作为配置中心。 本案例是在上一篇...
  • springboot 整合 nacos 作为注册中心和配置中心,三分钟学会的超简单的教程。
  • SpringBoot+Nacos实现配置中心

    千次阅读 多人点赞 2020-08-05 00:00:36
    为什么需要配置中心 不知道你是否遇到过以下情况: 同一个项目有多套配置,分布在不同的配置文件中,需要修改时,要改多个文件,有时候会遗漏配置 某天突然需要修改线上的一个配置,只能修改、提交,重启服务 项目...
  • Nacos 配置中心

    千次阅读 2020-05-09 18:14:58
    如果微服务架构中没有使用统一配置中心时,所存在的问题: 配置文件分散在各个项目里,不方便维护 配置内容安全与权限 更新配置后,项目需要重启 nacos配置中心:系统配置的集中管理(编辑、存储、
  • Nacos配置中心

    2020-12-18 16:55:17
    一、配置中心介绍 ** 1、Spring Cloud Config Spring Cloud Config 为分布式系统的外部配置提供了服务端和客户端的支持方案。在配置的服务端您可以在所有环境中为应用程序管理外部属性的中心位置。客户端和服务端...
  • 本文采取的配置中心为Apollo,携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境,不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 微服务体系,采用的为...
  • 携程Apollo统一配置中心的搭建和使用(java)

    万次阅读 多人点赞 2018-08-06 18:40:15
    一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备...
  • 在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件。它就是Spring Cloud Config。 一、简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以...
  • Nacos整合SpringCloud(配置中心、注册中心)

    万次阅读 多人点赞 2019-06-03 12:14:27
    2.Nacos配置中心整合 2.1 启动 Nacos Server 并添加配置 1.下载地址: 直接下载:Nacos Server 下载页 源码构建:Github 项目页面 2.启动 Linux/Unix/Mac 操作系统,执行命令 sh startup.sh -m s...
  • springboot配置中心

    千次阅读 2017-12-22 15:06:01
    Spring Boot,配置中心
  • Etcd - 分布式配置中心

    万次阅读 2019-07-15 14:05:46
    Etcd 简介 Etcd 是一种分布式 kv 存储设施, ... 简单直接的应用就是配置中心 架构设计总览 clients 为多个需要 配置的服务, 中间层为 多个 grpc-proxy 做均衡负载, 以免一个 proxy 挂了之后 导致单点问题. grpc...
  • 目标:改造user_service工程,配置文件不再由微服务项目提供,而是从配置中心获取。 实现步骤: 添加配置中心客户端启动依赖 修改服务提供者的配置文件 启动服务 测试效果 一、添加依赖 <!--spring cloud 配置...
  • APOLLO配置中心

    千次阅读 2018-07-27 13:34:00
    Apollo配置中心介绍 2016年 07月 09日 1、What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址…… 对程序配置的期望值也越来越高:配置修改后...
  • 分布式配置中心

    千次阅读 2018-08-08 17:23:39
    分布式配置中心 1. 配置中心定位:为了解决什么问题? 在应用生命周期管理里面,开发人员通常会将应用中需要变更的一些配置项或元数据信息从代码中分离出来,放在一个单独的配置文件里面;这些单独管理的内容就...
  • Apollo配置中心介绍

    万次阅读 2018-03-06 16:28:39
    最近公司订单中心重构,利用spring boot集成apollo配置中心,因此学习一下apollo配置中心 因为如今程序功能越来越复杂,程序的配置日益增多:各种功能的开关、参数配置、服务器地址、数据库链接等 对于配置的期望...
  • 九、分布式配置中心Config

    万次阅读 2020-04-18 00:12:29
    SpringCloud分布式配置中心Config

空空如也

1 2 3 4 5 ... 20
收藏数 40,947
精华内容 16,378
关键字:

配置中心