config作为Springcloud的五大神兽之一,也是我们玩SpringCloud必回的技术之一,它也给我们提供了相当程度的方便!
同时附上我练习时搭建的一个简单的SpringCloud项目,其中包含了feign、swagger-ui、rabbitmq、redis、aop、定时任务、文件上传于下载、excel导出、多数据源配置等demo,该项目也包含了SpringCloud的常用组件:
SpringCloud下载链接://download.csdn.net/download/weixin_45417573/12104123
Config配置下载链接://download.csdn.net/download/weixin_45417573/12104128
一、为什么要使用config配置中心
微服务时代,一个项目都是有很多个服务的,而且服务可能部署在不同的地方,这样一来,如果要修改某个服务的某个配置就变得不是那么方便,那么,有没有可能把这些配置文件都集中起来进行集中的管理和维护呢?这就是配置中心!
二、配置中心的大概实现思路
配置中心的大概实现思路是将所有服务的配置文件集中放在git服务器上,同时每个服务本地也存放一份配置,但git服务器上的配置优先于本地配置,这样如果我们需要修改配置只需要修改git服务器上的配置文件,就可以了,综上所述,config配置中心的大致实现方式可以猜测通过如下步骤来实现:
(1)在本地新建一个项目,将多有服务的配置文件存放到服务中
(2)新建一个git仓库,将所有服务的配置文件上传到仓库中
(3)创建一个config服务器,用于同步git仓库中的配置文件
(4)在每个服务中增加配置,实现优先加载git服务器上的配置
三、具体实现
1、创建一个普通的java项目,用于存放所有的配置文件,为了方便区分,将每个配置文件的文件名改成相应的服务名.yml
2、将配置文件上传到git服务器中,方便本地操作及更新提交
3、创建一个config服务
在创建之前,需要说明的一点是,就如eureka一样。config亦分为服务端和客户端,服务端就是我们的config服务。客户端就是我们管理配置的服务,这一点和eureka非常类似!
(1)添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>
spring-cloud-starter-netflix-eureka-client
</artifactId>
</dependency>
(2)启动类添加注解
@EnableConfigServer
(3)添加yml配置
server:
port: 8007
spring:
application:
name: jt-config
redis:
host: 192.168.40.152
port: 6379
cloud:
config:
server:
git:
uri: https://github.com/wwenyi/jt-config.git
search-paths: config
username: *****
password: ****
eureka:
instance:
prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
至此,服务端已准备完毕,接下来准备客户端,我们可以通过访问该服务+yml文件名来验证服务端是否正确,例如:
localhost:8007/jt-user.yml
4、修改客户端
(1)在所有需要管理配置的服务中添加依赖(暴露刷新端点,方便通过该端点刷新配置):
之前如果做过hystrix监控的服务中已经添加过该依赖
<!-- 暴露监控端点 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(2)新增yml文件
这里注意,是新增,不是修改!!!该yml文件先与application.yml加载,用于引导git上的配置
文件名:bootstrap.yml
配置内容如下:
spring:
cloud:
config:
discovery:
enabled: true
#config服务的服务名
service-id: jt-config
#yml文件名
name: user-config
#注意:eureka的配置不能省略!!!因为服务启动时会去eureka中找config服务
# 如果一旦省去了eureka的配置,就会出现找不到config的错误,同时,git上的配置也不会生效!!!!
eureka:
instance:
prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
好了,到这里config配置中心的工作就做完了,我们可以测试一下,
我们可以在git上的配置新增一个监控端点,如果访问到这个新增的端点,就说明我们的配置中心已生效:
#暴露监控断点,供hystrix仪表盘监控健康状态
#暴露刷新端点,两个端点之间用,隔开
management:
endpoints:
web:
exposure:
include: hystrix.stream,refresh
修改以后重启服务,访问一下ip+端口+/actuator,例如:
http://localhost:8002/user/actuator
我们如果能看到refresh端口已经打开了,那么说明我们配置中心已经完成:
四、bus+rabbitMQ实现动态刷新
以上的方法是需要我们重启服务,服务才会去重新拉取配置中心的配置,那么,有没有可能再不重启服务的前提下,只要修改了配置,服务就能动态的获取到配置呢?所以这里,我们就要利用到bus+rabbit了,关于rabbitmq我前面有简单的介绍安装和使用过程,这里就不赘述了!直接开干!
1、服务端修改:
(1)添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
(2)添加rabbitmq的配置,并暴露监控端口
#rabbitmq的配置
spring:
rabbitmq:
host: 192.168.40.152
username: admin
password: admin
port: 5672
#暴露端口
management:
endpoints:
web:
exposure:
include: bus-refresh
2、客户端
(1)添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
(2)添加rabbitmq的配置
#rabbitmq的配置
spring:
rabbitmq:
host: 192.168.40.152
username: admin
password: admin
port: 5672
到此为止,搞定!!
注意:springcloud默认的是git上的配置优先级大于本地的配置,如果要使用本地配置,需要将所有的配置文件放到config服务中,并修改yml中的配置打开本地配置,配置如下:
spring:
profiles:
active: native