spring boot / cloud (十七) 快速搭建注册中心和配置中心

本文将使用spring cloud的eureka和config server来搭建.

然后搭建的模式,有很多种,本文主要聊的是将注册中心和配置中心整合成一个服务的方式.

对于其他方式,如果有同学感兴趣,还请自行百度,谢谢.

为什么将注册中心和配置中心整合在一起?

其实整合在一起和分开,在使用层面上并没有太大的区别,主要就是节省资源,启动一个服务就够了

开始搭建

添加pom依赖

<!-- eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- config server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- amqp rabbitmq -->
<dependency>
<groupId>org.itkk.udf</groupId>
<artifactId>udf-starter-amqp-rabbitmq</artifactId>
</dependency>

以上为主要的依赖,引入了eureka server和config server以及amqp

amqp主要是为了支持config server的在runtime刷新各个子服务的配置文件的这个特性

pom关键配置

<resources>
<resource>
<directory>${project.basedir}/src/main/resources/</directory>
<filtering>true</filtering>
</resource>
</resources>

以上配置可以使我们在待会的配置文件中引用maven的上下文属性,通过${xxx}的方式

<!-- package -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${springboot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

添加打包插件,会将这个应用打包成一个可执行的jar包(内置容器,可直接启动应用)

编写启动类

@SpringCloudApplication
@EnableEurekaServer
@EnableConfigServer
public class UdfEurekaConfigServerDemoApplication extends BaseApplication { /**
* 描述 : spring boot的入口
*
* @param args 参数
*/
public static void main(String[] args) {
SpringApplication.run(UdfEurekaConfigServerDemoApplication.class, args);
} }

标记@SpringCloudApplication,@EnableEurekaServer,@EnableConfigServer开启注册中心和配置中心

同时这里继承了BaseApplication,这个类是前面博客中udf-starter-core中的一个类,此类做了一些简单的封装,详情大家可查阅

bootstrap.properties主要配置文件详解

info.build.group=${project.groupId}
info.build.artifact=${project.artifactId}
info.build.version=${project.version}
info.build.name=${project.name}
info.build.time=${project.build.date}
info.build.encoding=${project.build.sourceEncoding}
info.build.java.source=${java.version}
info.build.java.target=${java.version}

以上配置,主要定义了应用的一些基础信息,并且这些基础信息都是通过${xxx}的方式直接从maven变量中获取的

这些信息在应用启动了之后,可以通过http://localhost:port/info访问

注意,这里的${project.build.date}是UTC时间,不是北京时间,所以查看的时候,要+8小时

spring.application.name=${project.name}
server.port=${server.port}
management.security.enabled=false
spring.profiles.active=${profiles.activation}

以上配置主要设定了应用名称(使用项目的名称),应用端口(从pom中获取),以及profiles

bootstrap-xxx.properties主要配置文件详解

security.user.name=admin
security.user.password=123456

设置应用的basic认证用户名和密码

eureka.instance.preferIpAddress=true
eureka.client.enabled=true
eureka.client.serviceUrl.defaultZone=http://admin:123456@127.0.0.1:${server.port}/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

配置eureka实例和客户端信息,注意的是,因为这里是讲config server整合到注册中心上了,所以这里必须要将自身也注册到eureka上,否则,其他应用无法找到config server

spring.cloud.config.server.prefix=config-server
spring.cloud.config.server.git.uri=https://git.oschina.net/wangkang/udf-sample.git
spring.cloud.config.server.git.searchPaths=udf-config-hub/{application}
spring.cloud.config.server.git.defaultLabel=master
spring.cloud.config.server.git.forcePull=true

这里配置了config server的主要信息 ,

首先prefix是为了配置中心的上下文根和注册中心区分开来

然后在searchPaths中,spring cloud为我们预留了{application(应用名)}/{profile(环境)}/{label(分支)}这三个变量

大家可以根据这3个变量,灵活的组合远端git仓库中目录的结构,如下 :

usf-server-a
-> usf-server-a-dev.properties
-> usf-server-a-qa.properties
usf-server-b
-> usf-server-b-dev.properties
-> usf-server-b-qa.properties

在这里的话,我只使用了{application}

spring.rabbitmq.host=itkk.org
spring.rabbitmq.port=5672
spring.rabbitmq.username=dev_udf-sample
spring.rabbitmq.password=1qazxsw2
spring.rabbitmq.virtual-host=/dev_udf-sample
spring.rabbitmq.template.retry.enabled=true

以上配置了消息中间件rabbitmq的信息

.properties和.yml的区别 ?

本质上没有什么区别 , yml格式是属性结构的 , 可能对于某些同学来说 , 感觉更易于阅读 .

不过我不喜欢(哈哈) , 习惯用properties了 , 所以本文全部使用的是.properties文件进行配置的 , 此格式的文件等价于.yml , 如有偏好yml的同学 , 可自行转换

application.properties和bootstrap.properties的区别 ?

首先共同点 , 他们都可以用来配置参数 .

但是bootstrap的加载优先级高于application

在spring cloud应用中,官方也推荐使用bootstrap来存放配置

所以本文以及后续的配置项都会存放在bootstrap.properties中

如何区分profiles,来加载不同环境的配置文件 ?

在spring boot的中是通过spring.profiles.active属性来设置环境的,默认为dev

然后spring boot预先约定配置文件通过"-"分隔,"-"之后,".properties"之前,之间的部分就是profiles,例如 :

bootstrap.properties
bootstrap-dev.properties
bootstrap-qa.properties
bootstrap-xxxx.properties

注意,没有带profiles的配置文件,称为默认配置,不管什么环境下,都是必然会被加载的.

然后在启动应用的时候,指定profiles即可,如下 :

java -server -jar demo-1.0.jar --spring.profiles.active=qa

如何动态刷新配置 ?

可在任何config client或者config service上执请求如下的HTTP服务 :

POST http://localhost:port/bus/refresh

那么,config server就会通过消息中间件rabbitmq将配置文件更新的事件通知到各个微服务中了.

结束

今天跟大家分享了整个注册中心和配置中心的样例和主要的配置,相关完整的项目大家可在udf-sample中的udf-eureka-config-server-demo中查阅

欢迎大家的意见跟建议

代码仓库 (博客配套代码)


想获得最快更新,请关注公众号

spring boot / cloud (十七) 快速搭建注册中心和配置中心的更多相关文章

  1. Spring boot 集成 Dubbo 快速搭建

    架构: 1.ZooKeeper:服务注册中心 2.api工程:提供对外暴露的服务API 3.provider:服务提供者 4.consumer:服务消费者 示例如下: (一)新建 Maven 项目 a ...

  2. 快速搭建 SpringCloud Alibaba Nacos 配置中心!

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud Alibaba 的核心 ...

  3. Spring Boot基础:Spring Boot简介与快速搭建(1)

    1. Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Spring Boot默认使用tomca ...

  4. Spring Boot 学习(一) 快速搭建SpringBoot 项目

    快速搭建一个 Spring Boot 项目 部分参考于<深入实践Spring Boot>.<Spring实战 第四版>与程序猿DD的有关博客. 参考(嘟嘟独立博客):http: ...

  5. spring boot框架eclipse快速搭建

    1.maven安装配置好,使用eclipse创建maven项目(选择maven-archetype-quickstart) 2.然后进入http://docs.spring.io/spring-boo ...

  6. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  7. spring boot / cloud (十五) 分布式调度中心进阶

    spring boot / cloud (十五) 分布式调度中心进阶 在<spring boot / cloud (十) 使用quartz搭建调度中心>这篇文章中介绍了如何在spring ...

  8. Spring Cloud+nacos+Feign,实现注册中心及配置中心

    写在前面 注册中心.配置中心的概念就不在这里解释了.发现服务原来一直用的是Eureka,因为这家伙闭源了,不爽.然后就发现了nacos,阿里巴巴的,好东西,一个搞定注册中心和配置中心.官网:https ...

  9. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

随机推荐

  1. msbuildtoolspath is not specified for the toolsversion xx

    本地先是安装的vs2015,由于项目需求又安装了vs2008,在用vs2008打开.csproj工程文件,出现了上图的错误. 这一般是由于安装了vs2015和vs2008冲突产生的问题. 解决方案: ...

  2. 中点Bresenham画圆

    这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步. 算法步骤: (1) 输入圆的半径R. (2) 计算初始值d = 1 - ...

  3. Java企业微信开发_05_消息推送之发送消息(主动)

    一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...

  4. Oracle12c 在windonServer2012中安装的步骤

    oracle12c在windownServer2012中安装步骤  前期工作:<这个必须要安装:而且c$的C必须大写> 第一步:控制面板>所有控制面板项>管理工具>服务& ...

  5. 一次FCK拿bc全过程

    和大家简单的弄下fckeditor 漏洞在红客我看到好多人对fck 这个漏洞很干兴趣 其实这个漏洞这的很老了 也非常好利用  我也扫了一点fck的漏洞网址  下面我们就来打开一个我们看看这个一号站平台 ...

  6. SoapUI 之 JDBC请求

    之前有试过Jmeter的JDBC请求,挺方便的,今天下午闲来没事,看见soapUI里面也有一个JDBC请求,便也来试试. 首先添加一个JDBC请求,然后直接把Jmeter的一些链接参数复制过去,一直报 ...

  7. redis 安装及启动关闭

    1.redis下载 方式1:直接去官网下载 https://redis.io/download 方式2:通过命令下载 wget http://download.redis.io/releases/re ...

  8. [Spring面试] 问题整理

    1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC:Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spri ...

  9. javascript创建数组的所有方式【Array老师】

    1.采用直接量创建 var arr = [];//创建一个空数组 var arr2 = [1,2,3];//创建一个有三个元素的数组 2.采用构造函数创建 a.var arr1 = new Array ...

  10. LAMP一键安装

    author:JevonWei 版权声明:原创作品 #!/bin/bash 定义变量 export MDB=$(rpm -qa *mariadb*) export HTT=$(rpm -qa *htt ...