从零开始搭建SpringCloud(二) 配置中心configserver搭建

一、序

    上篇文章配置好了Eureka服务注册中心,接下来需要搭建分布式配置中,这里想的是最基础的配置文件直接在各模块中写好,其他的一些扩展配置直接放在github上,这样可以实现动态的加载而不需要重启项目,要实现动态的加载就需要用到Spring Cloud Bus来实现消息的传递。这里使用RabbitMQ来作为消息队列。而对于rabbitMQ的配置可以放在github上,实现动态加载。

二、具体搭建

(一)configserver

   首先是新建项目configserver,引入以下包:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

   接下来是在yml中配置:

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/ZhongWanYuXi/hfz-config
          search-paths: release
          username: name
          password: pass
      label: master
  rabbitmq:
    host: ip地址
    port: 5672
    username: name
    password: pwd

server:
  port: 8888

eureka:
  client:
    serviceUrl:
      defaultZone:  http://${security.user.name}:${security.user.password}@${eureka.instance.hostname}/eureka/
  instance:
    ip-address: IP
    prefer-ip-address: true
security:
  basic:
    enabled: true
  user:
    name: name
    password: pwd

   这里无论是注册中心还是configserver都添加了密码,可以根据自己的需求修改密码,rabbitmq的ip地址也需要改成自己的地址,在spring.cloud.config.server.git.uri后面改为自己的地址即可。eureka.instance.ip-address后写上自己的IP地址,在部署到服务器上时需要根据自己服务器上的公网IP来设置,不然后出现在注册中心通过名字无法访问的情况。

(二)configClient

    接下来通过配置一个客户端来读取配置中心的文件实现动态更新。pom文件内容如下:

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

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
        <version>RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

    其中有些包是后面要用到的断路器和链路追踪,接下来是yml文件,需要说明的是需要新建一个bootstrap.yml,项目启动时会优先加载bootstrap.yml中的配置内容,如果还是使用application.yml,就可能会出现无法读取配置内容的情况,因为默认的配置中心地址是localhost:8888,之前遇到一个坑就是在本地测试成功,但是将configserver部署到服务器上时就报错,找了好久,最后发现是配置文件的问题。bootstrap.yml内容如下:

eureka:
  client:
    serviceUrl:
      defaultZone: http:// \${security.user.name}:\${security.user.password}@${eureka.instance.hostname}/eureka/
  instance:
    ip-address: ip地址
    prefer-ip-address: true

spring:
  application:
    name: server-hi
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIG-SERVER
      label: master
      profile: dev
      name: name
      username: name
      password: pass
server:
  port: 8763

    在spring.cloud.config.name 和spring.cloud.config.profile配置读取的文件名字,username和password设置在configserver中配置的密码。

spring.cloud.config.server.git.uri:配置git仓库地址
spring.cloud.config.server.git.searchPaths:配置仓库路径
spring.cloud.config.label:配置仓库的分支
spring.cloud.config.server.git.username:访问git仓库的用户名
spring.cloud.config.server.git.password:访问git仓库的用户密码

http请求地址和资源文件映射如下:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

   然后可以通过localhost:8763测试,测试动态刷新可以先更改github上文件内容然后访问http://localhost:8763/bus/refresh刷新,在需要刷新的文件上需要加上@RefreshScope注解才能刷新,否则不会生效。

猜你喜欢

转载自blog.csdn.net/u013305783/article/details/80303454