天天看点

SpringCloud之——Config

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

SpringCloud之——Config

2、将配置文件上传到git服务器中,方便本地操作及更新提交

SpringCloud之——Config

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)启动类添加注解

(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端口已经打开了,那么说明我们配置中心已经完成:

SpringCloud之——Config

四、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