本文将使用spring cloud的eureka和config server来搭建.java
而后搭建的模式,有不少种,本文主要聊的是将注册中心和配置中心整合成一个服务的方式.git
对于其余方式,若是有同窗感兴趣,还请自行百度,谢谢.spring
其实整合在一块儿和分开,在使用层面上并无太大的区别,主要就是节省资源,启动一个服务就够了bootstrap
<!-- 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以及amqpspringboot
amqp主要是为了支持config server的在runtime刷新各个子服务的配置文件的这个特性app
<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包(内置容器,可直接启动应用)maven
@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开启注册中心和配置中心spring-boot
同时这里继承了BaseApplication,这个类是前面博客中udf-starter-core中的一个类,此类作了一些简单的封装,详情你们可查阅微服务
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
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的信息
本质上没有什么区别 , yml格式是属性结构的 , 可能对于某些同窗来讲 , 感受更易于阅读 .
不过我不喜欢(哈哈) , 习惯用properties了 , 因此本文所有使用的是.properties文件进行配置的 , 此格式的文件等价于.yml , 若有偏好yml的同窗 , 可自行转换
首先共同点 , 他们均可以用来配置参数 .
可是bootstrap的加载优先级高于application
在spring cloud应用中,官方也推荐使用bootstrap来存放配置
因此本文以及后续的配置项都会存放在bootstrap.properties中
在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中查阅
欢迎你们的意见跟建议
想得到最快更新,请关注公众号