转载

Config统一配置中心

  • 方便维护:微服务可能成百个,如果一个个配置都是在项目中配置的话,会给运维造成不必要的麻烦
  • 安全:配置统一是由运维来操作,如果涉及到数据库的账户和密码,肯定是不能让开发知道的

服务端

  • 添加依赖:
<!-- config server的依赖 -->
	<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>
  • 配置如下:
    • 这里使用的是git仓库,当然也是可以使用svn
server:
port: 3344
eureka:
client:
serviceUrl:
defaultZone: http://localhost:7001/eureka  # eureka的暴露地址,直接注册
spring:
application:
name: config-server   #应用的名称,在同一个eureka中必须不重复
cloud:
config:
server:
git:
uri: https://github.com/chenjiabing666/dept-config.git  # git仓库的地址,如果是ssh方式的不需要指定用户名和密码,但是需要在github上添加秘钥
username: ****** # 用户名
password: ******     # 密码
basedir: C:/images/config-server   # 本地的路径,将会自动在这个路径创建一个git仓库
  • 在主启动类上添加 @EnableConfigServer 这个注解,如下:
@SpringBootApplication
@EnableEurekaClient   //开启eureka
@EnableConfigServer  //开启config sever
public class ConfigServerApplication{
  • 此时需要在远程的github仓库创建如下内容:
  • Config统一配置中心
  • 此时访问如下的路径: http://localhost:3344/orderClient9002-{profile}.yml ,就会输出orderClient9002的内容
    • 如果后缀写的是 .json 就会以json格式输出,是 .properties 就会以properties的格式输出
    • 如果输出报错说明配置的内容有错误

访问方式

  • /name-{profile}.yml
    • name是github仓库中的文档名称
    • {profile}是springBoot的profile,可以指定任意的环境
    • 这里默认是master分支的内容
  • /label/name-{profile}.yml
    • lable是仓库的分支名称

源码

  • https://github.com/chenjiabing666/cloud-config-server.git

客户端

思路

  • 启动配置中心的服务端,将其注入到eureka的注册中心
  • 客户端相通过注册中心找到服务端的实例,然后读取到github仓库中对应的配置

使用

  • 添加依赖:
<!-- 统一配置中心的客户端 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

<!-- eureka注册中心的客户端 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 在配置文件中( bootstrap.xml )中配置:
    • bootstrap.xml 是最高级的,其中的配置项不会被application.yml或者application.properties覆盖
    • 其中一定要配置eureka的客户端,否则将不能找到统一配置中心的配置
eureka:   # 配置eureka客户端,一定要bootstrap文件中配置,因为需要到注册中心获取配置中心的服务端的地址,如果配置在github上面的配置,那么将会找不到配置中心的服务端
client:
serviceUrl:
defaultZone: http://localhost:7001/eureka  # eureka的暴露地址,直接注册
register-with-eureka: false
spring:
application:
name: orderClient9002   # 配置项目的名称,也是github中对应配置文件的名称(去掉后缀)
cloud:
config:
discovery:
enabled: true   # 开启config的客户端
service-id: config-server   # 指定eureka中的配置中心服务端的实例名称
profile: dev   # 指定配置文件的环境
label: master  # 指定需要访问github上的分支,这里不填默认是master分支
  • 在主启动类上不需要对应的注解,只需要添加eureka客户端的注解即可,如下:
@SpringBootApplication
@EnableEurekaClient   //开启eureka
public class OrderClient9001Application{

源码

  • https://github.com/chenjiabing666/config-client.git

配置中心服务端的高可用

  • 只需要同时开启多个服务端即可,相当于配置了一个集群

spring cloud bus

  • git仓库的配置改变了,但是统一配置中心并不能及时更新,因此我们需要一种机制能够保证git仓库中的配置改变了就会及时通知配置中心,bus就是这种机制

使用(bus + rabbitmq)

配置中心的服务端

  • 添加依赖
<!-- spring cloud bus 消息总线的依赖 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  • 在配置文件中配置 eurekarabbitmq
server:
port: 3344
eureka:
client:
serviceUrl:
defaultZone: http://localhost:7001/eureka  # eureka的暴露地址,直接注册
spring:
application:
name: config-server   # 应用的名称,在同一个eureka中必须不重复
rabbitmq:              # rabbitmq配置的
host: 39.105.123.197  # 主机的地址
port: 5672            # 端口
username: guest       # 用户名
password: guest      # 密码
virtual-host: /     # 虚拟主机

cloud:
config:
server:
git:
uri: https://github.com/chenjiabing666/dept-config.git  # git仓库的地址,如果是ssh方式的不需要指定用户名和密码,但是需要在github上添加秘钥
username: ****** # 用户名
password: ******     # 密码
basedir: C:/images/config-server   # 本地的路径,将会自动在这个路径创建一个git仓库
  • 开启刷新配置的uri:
management:   # 开启刷新配置的地址 /bus-refresh
endpoints:
web:
exposure:
include:
- bus-refresh
  • 主启动类上添加eureka和config的server
@SpringBootApplication
@EnableEurekaClient   //开启eureka
@EnableConfigServer  //开启config sever
public class ConfigServerApplication{
  • 启动之后将会发现在rabbitmq中新增了一个队列,如下:

Config统一配置中心

  • 在github仓库中新增一个配置文件orderClient9001.yml:
server:
port: 9001
  
person:
name: chenjaibing
age: 20

完整的配置

server:
port: 3344
eureka:
client:
serviceUrl:
defaultZone: http://localhost:7001/eureka  # eureka的暴露地址,直接注册
spring:
application:
name: config-server   # 应用的名称,在同一个eureka中必须不重复
rabbitmq:              # rabbitmq配置的
host: 39.105.123.197  # 主机的地址
port: 5672            # 端口
username: guest       # 用户名
password: guest      # 密码
virtual-host: /     # 虚拟主机

cloud:
config:
server:
git:
uri: https://github.com/chenjiabing666/dept-config.git  # git仓库的地址,如果是ssh方式的不需要指定用户名和密码,但是需要在github上添加秘钥
username: chenjiabing666 # 用户名
password: as676767as     # 密码
basedir: C:/images/config-server   # 本地的路径,将会自动在这个路径创建一个git仓库
          
management:   # 开启刷新配置的地址 /bus-refresh
endpoints:
web:
exposure:
include:
- bus-refresh

配置中心的客户端

  • 添加依赖
<!-- spring cloud bus 消息总线的依赖 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  • 添加eureka、rabbitmq、config client的配置( bootstrap.xml
eureka:   # 配置eureka客户端,一定要bootstrap文件中配置,因为需要到注册中心获取配置中心的服务端的地址,如果配置在github上面的配置,那么将会找不到配置中心的服务端
client:
serviceUrl:
defaultZone: http://localhost:7001/eureka  # eureka的暴露地址,直接注册
register-with-eureka: false
spring:
application:
name: orderClient9001   # 配置项目的名称,也是github中对应配置文件的名称(去掉后缀)
rabbitmq:              # rabbitmq配置的
host: 39.105.123.197  # 主机的地址
port: 5672            # 端口
username: guest       # 用户名
password: guest      # 密码
virtual-host: /     # 虚拟主机
cloud:
config:
discovery:
enabled: true   # 开启config的客户端
service-id: config-server   # 指定eureka中的配置中心服务端的实例名称
profile: dev   # 指定配置文件的环境
label: master  # 指定需要访问github上的分支,这里不填默认是master分支
  • 新增一个Person类,其中的属性来自配置文件,并且通过controller读取其中的值,用作测试
@Component
@ConfigurationProperties(prefix="person")  //读取配置文件中前缀为person的值,并且赋值给其中的变量
@Data
public class Person{
	private String name;
	private String age;
}


@RestController
public class PersonController{
	@Resource
	private Person person;
	
	/**
	 * 获取配置文件中的值
	 * @return
	 */
	@GetMapping("/person")
	public Person getPerson(){
		return person;
	}
}
  • 在主启动类上只需要开启eureka客户端即可
@SpringBootApplication
@EnableEurekaClient   //开启eureka
public class OrderClient9001Application{

测试

http://localhost:9001/person
http://localhost:9001/person
http://localhost:3344/actuator/bus-refresh
原文  https://chenjiabing666.github.io/2018/12/25/Config(统一配置中心)/
正文到此结束
Loading...