精华内容
下载资源
问答
  • 配置中心

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

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

    配置中心的作用

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

    元数据配置中心

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

    技术配置中心

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

    业务配置中心

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

    展开全文
  • 简介在分布式系统中,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
    扫码关注公众号有惊喜

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

    展开全文
  • 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...

    1.什么是Nacos?

    Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

    2.Nacos Config整合

    Nacos Config Starter实现Spring Cloud应用程序的外部化配置。

    2.1 启动 Nacos Server 并添加配置

    1.下载地址:

    1. 直接下载:Nacos Server 下载页
    2. 源码构建:Github 项目页面

    2.启动

    1. Linux/Unix/Mac 操作系统,执行命令 sh startup.sh -m standalone
    2. Windows 操作系统,执行命令 cmd startup.cmd
    3. 默认账户密码:nacos

    3.在命令行执行如下命令,向 Nacos Server 中添加一条配置,也可在控制台中手动添加。

     curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config-example.properties&group=DEFAULT_GROUP&content=user.id=1%0Auser.name=james%0Auser.age=17"
    
    添加的配置的详情如下
    
     dataId 为 nacos-config-example.properties
     group 为 DEFAULT_GROUP
     
     内容如下
     
     	user.id=1
     	user.name=james
     	user.age=17	
    

    在这里插入图片描述

    2.1 引入pom文件
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
     </dependency>
    
    2.2 添加bootstrap.properties
    spring.application.name=nacos-config-example
    spring.cloud.nacos.config.server-addr=ip:8848 #服务器ip或本地ip
    
    2.3 获取相应的配置
    @RefreshScope //打开动态刷新功能
     class SampleController {
    
     	@Value("${user.name}")
     	String userName;
    
     	@Value("${user.age}")
     	int age;
     }
    
    2.4 应用启动

    1.添加/application.properties

    server.port=18084
    management.endpoints.web.exposure.include=*
    

    2.App启动
    在这里插入图片描述

    2.5 原理

    1.Nacos Config 数据结构

    Nacos Config 主要通过 dataId 和 group 来唯一确定一条配置.

    Nacos Client 从 Nacos Server 端获取数据时,调用的是此接口 ConfigService.getConfig(String dataId, String group, long timeoutMs)

    2.Spring Cloud 应用获取数据

    dataId

    在 Nacos Config Starter 中,dataId 的拼接格式如下

    ${prefix} - ${spring.profiles.active} . ${file-extension}
    
    • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

    • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档

      注意,当 activeprofile 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{prefix}.{file-extension}

    • file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 目前只支持 properties 类型。

    group
    • group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 配置。

    3.自动注入

    Nacos Config Starter 实现了 org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。

    在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用 @Value 注解也能直接获取 Nacos Server 端配置的内容。

    4.动态刷新

    Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。

    如果需要对 Bean 进行动态刷新,给类添加 @RefreshScope@ConfigurationProperties注解。

    5.Endpoint 信息查看

    Springboot支持这一点,Nacos Config也同时可以使用Endpoint来暴露信息。

    在maven 中添加 spring-boot-starter-actuator依赖,并在配置中允许 Endpoints 的访问。

    • Spring Boot 1.x 中添加配置 management.security.enabled=false
    • Spring Boot 2.x 中添加配置 management.endpoints.web.exposure.include=*

    Spring Boot 1.x 可以通过访问 http://127.0.0.1:18084/nacos_config 来查看 Nacos Endpoint 的信息。

    Spring Boot 2.x 可以通过访问 http://127.0.0.1:18084/actuator/nacos-config 来访问。
    在这里插入图片描述

    2.6 更多
    配置项 key 默认值 说明
    服务端地址 spring.cloud.nacos.config.server-addr
    DataId前缀 spring.cloud.nacos.config.prefix spring.application.name
    Group spring.cloud.nacos.config.group DEFAULT_GROUP
    dataID后缀及内容文件格式 spring.cloud.nacos.config.file-extension properties dataId的后缀,同时也是配置内容的文件格式,目前只支持 properties
    配置内容的编码方式 spring.cloud.nacos.config.encode UTF-8 配置的编码
    获取配置的超时时间 spring.cloud.nacos.config.timeout 3000 单位为 ms
    配置的命名空间 spring.cloud.nacos.config.namespace 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源隔离等。
    AccessKey spring.cloud.nacos.config.access-key
    SecretKey spring.cloud.nacos.config.secret-key
    相对路径 spring.cloud.nacos.config.context-path 服务端 API 的相对路径
    接入点 spring.cloud.nacos.config.endpoint UTF-8 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
    是否开启监听和自动刷新 spring.cloud.nacos.config.refresh.enabled true

    3.Nacos Discovery 整合

    Nacos Discovery Starter 完成 Spring Cloud 应用的服务注册与发现。

    3.1 添加依赖
    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
    
    3.2 application.properties
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
    3.3 服务注册和发现
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
    
     	public static void main(String[] args) {
     		SpringApplication.run(Application.class, args);
     	}
    
     	@RestController
     	class EchoController {
     		@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
     		public String echo(@PathVariable String string) {
     				return string;
     		}
     	}
     }
    
    3.4 启动Nacos服务端
    1. 通过从源代码下载或构建来安装Nacos Server。推荐的最新版本Nacos Server
      1. 下载Nacos Server 下载页面
      2. 从源代码构建:通过git clone git@github.com获取源代码:来自Github Nacos的alibaba / Nacos.git并构建您的代码。有关详细信息,请参阅构建
    2. 运行
      1. Linux / Unix / Mac,执行 sh startup.sh -m standalone
      2. Windows,执行 cmd startup.cmd
    3.5 启动客户端

    1.添加application.properties配置

     spring.application.name=service-provider
     server.port=18082
    
    3.6 查询服务
    http://127.0.0.1:8848/nacos/v1/ns/instances?serviceName=service-provider
    

    在这里插入图片描述

    3.7 服务发现

    Nacos Discovery Starter默认集成了Ribbon,因此对于使用Ribbon进行负载平衡的组件,您可以直接使用Nacos服务发现。

    NacosServerList实现com.netflix.loadbalancer.ServerList接口并在@ConditionOnMissingBean下自动注入它。

    使用RestTemplate和FeignClient

    1. 添加@LoadBlanced注释以使Ribbon可以访问RestTemplate

       @Bean
       @LoadBalanced
       public RestTemplate restTemplate() {
           return new RestTemplate();
       }
      
    2. FeignClient默认集成了功能区,显示了如何配置FeignClient。

       @FeignClient(name = "service-provider")
       public interface EchoService {
           @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
           String echo(@PathVariable("str") String str);
       }
      

      使用@FeignClient批注将EchoService接口包装为FeignClient,其属性名称对应于服务名称service-provider

      方法的@RequestMapping注释echo将echo方法与URL对应/echo/{str}@PathVariable注释映射{str}strecho方法的参数的URL路径中。

    3. 完成上述配置后,将它们注入TestController。

       @RestController
       public class TestController {
       
           @Autowired
           private RestTemplate restTemplate;
           @Autowired
           private EchoService echoService;
      
           //RestTemplate
           @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
           public String rest(@PathVariable String str) {
               return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
           }
           //FeignClient
           @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
           public String feign(@PathVariable String str) {
               return echoService.echo(str);
           }
       }
      
    4. 添加application.properties配置

       spring.application.name=service-consumer
       server.port=18083
      
    5. 运行

    验证

    1. http://127.0.0.1:18083/echo-rest/1234在浏览器地址栏中输入并单击转到,我们可以看到浏览器显示nacos-discovery-provider-example返回的消息“hello Nacos Discovery 1234”,以证明服务发现有效。
      在这里插入图片描述
    1. http://127.0.0.1:18083/echo-feign/12345在浏览器地址栏中输入并单击转到,我们可以看到浏览器显示nacos-discovery-provider-example返回的消息“hello Nacos Discovery 12345”,以证明服务发现有效。

    在这里插入图片描述

    3.8 原理

    服务注册

    在Spring云应用程序的启动阶段,将监视WebServerInitializedEvent事件。在初始化Web容器后收到WebServerInitializedEvent事件时,将触发注册操作,并调用ServiceRegistry注册方法以将服务注册到Nacos Server。

    服务发现

    NacosServerList实现com.netflix.loadbalancer.ServerList接口并在@ConditionOnMissingBean下自动注入它。功能区默认为集成。

    端点

    Nacos Discovery Starter还支持Spring Boot执行器端点的实现。

    先决条件:

    将依赖spring-boot-starter-actuator添加到pom.xml文件中,并配置端点安全策略。

    Spring Boot 1.x:添加配置management.security.enabled = false

    Spring Boot 2.x:添加配置management.endpoints.web.exposure.include = *

    要查看端点信息,请访问以下URL:

    Spring Boot1.x:Nacos Discovery端点URL是http://127.0.0.1:18083/nacos_discovery

    Spring Boot2.x:Nacos Discovery端点URL是http://127.0.0.1:18083/actuator/nacos-discovery

    在这里插入图片描述

    3.9 更多
    配置项 默认值 描述
    服务器地址 spring.cloud.nacos.discovery.server-addr nacos注册中心地址
    服务名 spring.cloud.nacos.discovery.service spring.application.name 服务名
    权重 spring.cloud.nacos.discovery.weight 1 值从1到100,值越大,重量越大
    IP spring.cloud.nacos.discovery.ip ip address to registry,最高优先级
    网络接口 spring.cloud.nacos.discovery.network-interface 未配置IP时,注册的IP地址为网络接口对应的IP地址。如果未配置此项,则默认采用第一个网络接口的地址。
    端口 spring.cloud.nacos.discovery.port -1 注册端口,无需配置即可自动检测
    namesapce spring.cloud.nacos.discovery.namespace 开发环境(dev、pro等)
    accesskey spring.cloud.nacos.discovery.access-key
    secretkey spring.cloud.nacos.discovery.secret-key
    元数据 spring.cloud.nacos.discovery.metadata 扩展数据,使用Map格式配置
    日志名称 spring.cloud.nacos.discovery.log-name
    端点 spring.cloud.nacos.discovery.endpoint 服务的域名,通过该域名可以动态获取服务器地址。
    集成功能区 ribbon.nacos.enabled true
    展开全文
  • 当服务很多时,都需要同时从配置中心读取文件的时候,这时我们可以考虑将配置中心做成一个微服务,并且将其集群化,从而达到高可用,架构图如下:一、准备工作继续使用上一篇文章的工程,创建一个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
    扫码关注公众号有惊喜

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

    展开全文
  • name: nacos-client #应用名,后面用到配置中心则需要根据这个值和扩展名在配置中心上建配置文件 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 file-...
  • SpringBoot使用Nacos作为配置中心服务和服务注册中心

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

    万次阅读 热门讨论 2019-01-26 18:27:59
    本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心。 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计。它可以帮助您轻松构建云本机应用程序和微服务平台。 ...
  • Nacos配置中心

    万次阅读 2020-12-18 16:55:17
    一、配置中心介绍 ** 1、Spring Cloud Config Spring Cloud Config 为分布式系统的外部配置提供了服务端和客户端的支持方案。在配置的服务端您可以在所有环境中为应用程序管理外部属性的中心位置。客户端和服务端...
  • 一、前言 之前一直学习SpringCloud, 对于配置中心,一直也是采用的Spring Cloud Config,但是用久了,发现很多地方满足不了要求,同时也感觉很low(个人看法勿喷)。在学习Spring cloud config 的时候也有听到过携程的...
  • 配置中心-Apollo分布式部署指南

    万次阅读 2020-09-24 19:30:43
    apollo-portal/config/apollo-env.properties 这个配置文件也是配置各环境的configservice地址的,但是 apollo.portal.meta.servers 优先级大于配置文件,也就是说如果apollo.portal.meta.servers 配置了会先使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,965
精华内容 19,986
关键字:

配置中心