100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > SpringCloud版本Hoxton SR5 --- 第七讲:SpringCloud Config 分布式配置中心+整合bus rabbitmq actuator

SpringCloud版本Hoxton SR5 --- 第七讲:SpringCloud Config 分布式配置中心+整合bus rabbitmq actuator

时间:2024-05-21 00:47:38

相关推荐

SpringCloud版本Hoxton SR5 --- 第七讲:SpringCloud Config 分布式配置中心+整合bus rabbitmq actuator

传送门:SpringCloud版本Hoxton SR5 --- 第一讲:认识先看SpringCloud Config 可以完成的功能,或者说他在项目中的定位和作用。

SpringCloud config也可以使用Eureka配置集群高可用.

建议将eureka注册中心 与 springcloud config服务端分开部署。

在上面建议的前提下,运行的时候,启动是有顺序的:

单机版:

1. 当eureka使用了springcloud config客户端,必须先启动springcloud config服务端,再启动eureka服务端,再启动其他微服务。

2. 当eureka没有使用springcloud config客户端,springcloud config服务端与eureka服务端没有先后顺序,但是其他微服务必须最后启动。

集群版:

如果是集群的话,eureka服务端一定使用不到springcloud config组件。

这时候,eureka集群 与 springcloud config集群服务端,没有启动顺序。但是其他微服务需要在上面两个集群启动后在启动。

先来单机版:

===================================== SpringCloud config 单机版 =======================================

服务端: 单机模式没必要注册到Eureka,所以我将Eureka的配置删掉了,不过也可以与之整合,看需求。

依赖:<!-- springcloud config 服务端依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency>

配置:#################################################### 基础公共配置 #######################################################server:port: 7500 # 配置项目访问端口#################################################### config 配置 #######################################################spring:application:name: config-servercloud:config:server:git:uri: /w_wangqinmin/config.git # http格式的仓库地址,不管是GitHub,码云都是这样的。亲自测试,官网也是这么写的。search-paths: eureka,item,login,order,zuul # 匹配搜索(有些配置文件放在git仓库的自定义目录之下,直接访问不到,这里就是自动匹配,比较懒的人可以直接配: '*' 不过不建议)。git仓库,我们可能建不同的目录,比如:myone、mytwo、mythree 这些文件夹。当mythree里面有一个要使用的配置文件时,前面就配置myt*就可以自动找到配置文件了。clone-on-start: true # 是否启动的时候就clone远程仓库到本地服务端(相当于懒加载)。意思就是当该微服务启动的时候,就将git仓库里的代码clone下来。如果设位置false,就表示用的时候再去git仓库clone。skipSslValidation: true #禁用配置服务器对Git服务器的SSL证书的验证 (默认false)timeout: 5 # 配置服务器将等待获取HTTP连接的时间(默认 5秒,以秒为单位)force-pull: true # 当本地仓库clone的副本出问题的时候,从远程存储库强制拉取(默认false)deleteUntrackedBranches: false # 为使本地仓库与远程仓库一致,强制将Spring Cloud Config本地服务端未跟踪的分支删除。(默认false)default-label: master # 访问分支force-pull: true # 与服务器本地副本冲突的情况下,从远程存储库强制拉出

启动类:package com.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.config.server.EnableConfigServer;/*** @author: wangqinmin* @date : /6/16* @description: 仰天大笑出门去,我辈岂是蓬蒿人*/@SpringBootApplication@EnableConfigServerpublic class ConfigApplication {public static void main(String[] args) {SpringApplication.run(ConfigApplication.class);}}

这里有几点说明:

1. 上面配置的git远程仓库:就是存储配置文件的地方。

2. 当这个项目启动后,可以直接使用 http://localhost:7500/配置文件名 打开。

3. git仓库里的配置文件名,这个取名字,也是有规则的,不能随便乱取。

这是在官网copy的规则:/ {application} / {profile} [/ {label}]/{application}-{profile}.yml/{label}/{application}-{profile}.yml/{application}-{profile}.properties/{label}/{application}-{profile}.properties

解释一下:

当springcloud config服务端启动好了,并且git仓库准备好了,且有配置文件后。直接访问http://localhost:7500/配置文件名

如果胡乱给配置文件取名字,而且不知道访问规则, 可能你得到的就是404。 下面给访问例子:

每一个访问地址对应上面官网copy的一个规则。Login-Server.yml就是git仓库中配置文件的文件名。

http://localhost:7500/Login-Server/dev/master master可以不加,通常情况配置文件都在git的master目录(默认访问master)

http://localhost:7500/Login-Server-dev.yml 有没有发现,我的配置文件名是Login-Server.yml。 但是访问加了 -dev

http://localhost:7500/master/Login-Server-dev.yml 默认访问master所以可以访问:http://localhost:7500/Login-Server-dev.yml

http://localhost:7500/Login-Server-dev.properties

http://localhost:7500/master/Login-Server-dev.properties 这里也是一样的,默认master。

看了上面的规则一定有一个疑问,就是-dev是哪里来的,dev需要在配置文件里面配置,就是对环境的选择。

给一个git仓库Login-Server1.yml的文件做参考学习:码云git仓库 Login-Server1.yml文件配置, 下面是解释git仓库配置文件中某些配置作用:

--- # 不同环境配置用 三个减号 分割。# (注释用 #)spring:profiles: dev # 本地环境(Initialization) ### 这里就是定义的dev,上面访问地址加的dev,就表示访问这个配置文件中的这个配置。如果这里是自定义的 test,那么访问地址后面就将 -dev 换成 -test上面3行,每一行都是对当前行配置的解释。

客户端:就是我们的微服务端,使用起来非常简单。只需2步:

1.引入依赖

2. 增加配置文件bootstrap.yml ( 放在resource目录下,不是把application.yml删除,而是新增一个bootstrap.yml文件)

依赖:<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency>

## bootstrap.yml 文件里面的配置。spring:cloud:config:name: Login-Server #这是我们要读取的配置文件名 对应获取规则的{application}profile: local #这个是要获取的环境 对应的便是{profile}label: master #这个就是获取的节点 对应的是{label}uri: http://localhost:7777/ #单机版, 指定Spring cloud config服务端的地址,就是让这个服务去git仓库中获取所需的配置数据。

对于客户端增加的bootstrap.yml的配置文件,我要说明几点:

1. 文件名必须是bootstrap.yml 。他和application.yml在同一个目录下,并且它的级别比application.yml级别高。就是说,bootstrap.yml中配置的属性优先使用。 比如:application.yml中配置了 server.port = 6060 ,bootstrap.yml读取git仓库中的 server.port = 5050, 那么程序运行起来后,一定是5050端口。如果远程读取或者本地读取不成功,就是使用本地application.yml的配置文件。

2. boostrap.yml文件, 默认情况下它们不能被本地配置。解释:就是说当你打开idea 或者 eclipse ,你需要创建bootstrap.yml这个文件。但是文件里面需要配置的是:去git 或者 本地配置仓库 获取配置数据的地址,而不是直接在里面进行端口、eureka等等的配置,注意这里面配置的只是获取配置文件的地址。

3. boostrap.yml 中的:

name,就是对应git仓库中配置文件的名称。

profile就是对应git仓库Login-Server.yml配置文件内部的环境。

label 就是对应配置文件在git仓库的哪个目录。

单机版的SpringCloud config就到这里了。引入依赖、添加bootstrap.yml文件。直接就完成了对SpringCloud Config客户端的整合,没有其他的配置了。也不需要在启动类上加注解。

===================================== SpringCloud config 集群版 =====================================

通常情况下,小项目是不需要集群的,如果使用集群一定是很大的项目,主要做高可用。

如果是这样的话,Eureka也一定是集群。所以我下面的配置,也是用了 Eureak集群。

服务端:

相比较springcloud的单机模式,添加了对Eureak的依赖:<!-- springcloud config 服务端依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

对于集群版来说下面的配置:

端口需要改改、instance-id(注册到Eureka的服务名)需要改改不能重复、配置的ip地址修改成自己的、search-paths根据自己git仓库的文件名改改,可以直接改成 ’*‘ ,就是匹配所有,配置中也有解释。

其他都是一样的。

#################################################### 基础公共配置 #######################################################server:port: 7501 # 配置项目访问端口#################################################### eureka客户端配置 #######################################################eureka: # 注意下面的时间设置,是在网络不稳定的时候生效,但是如果是手动关闭eureka的客户端实例,会直接给eureka服务端发送信息,直接关闭在eureka中注册的服务client:serviceUrl:# defaultZone: :6001/eureka #集群配置 我建议使用这种,但是服务端的配置中,需要打开自我注册,默认也是打开的。defaultZone: :6001/eureka,http://127.0.0.1:6002/eureka,http://localhost:6003/eureka #集群配置# 将本项目的客服端注册到所有的服务端中,为了防止服务端不注册自己的情况#(一般情况下不会出现这种问题,就是怕有些人不懂eureka,胡乱配置集群服务端,所以这是一个最稳妥的方式,如果就按照我服务端的配置来,就不会出现这样的问题。)# 其实会出问题的原因就是:手动的把自我注册的配置关闭了。# 这种配置还有一个缺点,没有连上的服务会不停的在日志中报错instance:instance-id: client-config-1 #此实例注册到eureka服务端的唯一的实例ID(也就是给当前项目指定一个ID,当当前项目运行起来后,就会将这个ID注册到eureka的服务端)prefer-ip-address: true #是否显示IP地址leaseRenewalIntervalInSeconds: 30 #eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒 (与下面配置的单位都是秒)leaseExpirationDurationInSeconds: 90 #Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒#################################################### config 配置 #######################################################spring:application:name: cluster-configcloud:config:server:git:uri: /w_wangqinmin/config.git # http格式的仓库地址,不管是GitHub,码云都是这样的。亲自测试,官网也是这么写的。search-paths: eureka,item,login,order,zuul # 匹配搜索(有些配置文件放在git仓库的自定义目录之下,直接访问不到,这里就是自动匹配,比较懒的人可以直接配: '*' 不过不建议)。git仓库,我们可能建不同的目录,比如:myone、mytwo、mythree 这些文件夹。当mythree里面有一个要使用的配置文件时,前面就配置myt*就可以自动找到配置文件了。# search-paths: myone,mytwo,myt* # 匹配搜索(有些配置文件放在git仓库的自定义目录之下,直接访问不到,这里就是自动匹配,比较懒的人可以直接配: '*' 不过不建议)。git仓库,我们可能建不同的目录,比如:myone、mytwo、mythree 这些文件夹。当mythree里面有一个要使用的配置文件时,前面就配置myt*就可以自动找到配置文件了。clone-on-start: true # 是否启动的时候就clone远程仓库到本地服务端(相当于懒加载)。意思就是当该微服务启动的时候,就将git仓库里的代码clone下来。如果设位置false,就表示用的时候再去git仓库clone。skipSslValidation: true #禁用配置服务器对Git服务器的SSL证书的验证 (默认false)timeout: 5 # 配置服务器将等待获取HTTP连接的时间(默认 5秒,以秒为单位)force-pull: true # 当本地仓库clone的副本出问题的时候,从远程存储库强制拉取(默认false)deleteUntrackedBranches: false # 为使本地仓库与远程仓库一致,强制将Spring Cloud Config本地服务端未跟踪的分支删除。(默认false)default-label: master # 访问分支force-pull: true # 与服务器本地副本冲突的情况下,从远程存储库强制拉出

启动类: 添加了对Eureak整合的注解

package com.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.config.server.EnableConfigServer;import org.flix.eureka.EnableEurekaClient;/*** @author: wangqinmin* @date : /6/16* @description: 仰天大笑出门去,我辈岂是蓬蒿人*/@SpringBootApplication@EnableConfigServer@EnableEurekaClientpublic class Config7501Application {public static void main(String[] args) {SpringApplication.run(Config7501Application.class);}}

服务端: 微服务端其他要用组件自己加,集群版的Springcloud Config只需要这两个依赖。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency>

在resource目录下,增加一个bootstrap.yml 的配置文件

spring:cloud:config:name: Login-Server #这是我们要读取的配置文件名 对应获取规则的{application}profile: local #这个是要获取的环境 对应的便是{profile}label: master #这个就是获取的节点 对应的是{label}discovery: ### 下面是集群版的配置enabled: true # 打开对Eureka服务注册中心的支持service-id: cluster-config # 集群版 配置config在Eureka上注册的应用名称eureka: # 注意下面的时间设置,是在网络不稳定的时候生效,但是如果是手动关闭eureka的客户端实例,会直接给eureka服务端发送信息,直接关闭在eureka中注册的服务client:serviceUrl:defaultZone: :6001/eureka,http://127.0.0.1:6002/eureka,http://localhost:6003/eureka #集群配置

上面的配置需要说明一下:

这里剔除了单机版的对 uri 的配置,因为springcloud config集群整合Eureka之后,所有的SpringCloud Config注册到了Eureak的集群上,所以访问的话,直接访问Eureka注册后的应用名称就好了。就不需要单独的去访问某一个SpringCloud config的服务端了。

并且将Eureka的集群访问地址,配置在bootstra.yml的配置文件中。

这样集群版的SpringCloud Config就好了。

如果不需要修改代码里的属性,上面的springcloud config直接使用就够了。

如果需要修改代码里注入的属性,可以参考下面的整合 springcloud bus + actuator。

上面虽然把springcloud config服务端、客户端的配置都弄好了,但是要实现动态的修改配置,并应用到已经启动好的微服务上,还需要借助: springcloud bus +actuator组件:

所以,需要springcloud config动态配置功能的微服务,还需要以下步骤:

添加依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- RabbitMQ 消息总线依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>

添加配置:# actuator组件监听:management:endpoints:web:exposure:include: '*' # 暴露所有端口, 单独开项目HystrixDashBoard,查看本微服务调用情况。# include: hystrix.stream # 暴露所有端口, 单独开项目HystrixDashBoard,查看本微服务调用情况。endpoint:health:show-details: always# bus整合mq的mq连接配置spring:rabbitmq:host: 47.96.100.61port: 5673 # 默认是5672,这里是我自己修改的。username: adminpassword: admin

rabbitmq的linux安装传送门:docker快速安装rabbitmq ,当然如果不会安装docker的话:Linux CentOS7.2安装Docker

基本配置算是做好了。

还需要指定哪些地方,使用springcloud config的动态配置功能,因为我虽然修改了配置,但是不是项目每个地方都需要修改吧,所以需要修改的地方,要提前在该类上加上@RefreshScope注解,类似:

@RestController@RequestMapping("/login")@RefreshScopepublic class LoginController {@Value("${month}")private String month; // 这个就是我再git仓库中配置的一个属性,修改的也是git仓库的这个属性,然后测试在微服务运行的前提下,看看这个属性是否动态修改了,测试就自己测了,不贴具体步骤了。}

然后:必须post请求调用,http://localhost:8080/actuator/bus-refresh用idea的httpclient/postman/其他 看自己的习惯。

注意这里的 localhost:8080 是任意一个使用springcloud config客户端 + bus + actuator的微服务 的ip和端口,都是可以的。

到这里就真正的结束了,具体怎么测试,就不写了,功能已经完成,测试就自己慢慢测吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。