springcloud的配置中心及消息总线

  • springcloudconfig高可用的服务配置中心

在单体式应用中,我们通常的做法是将配置文件和代码放在一起,这没有什么不妥。当你的应用变得越来越大从而不得不进行服务化拆分的时候,会发现各种provider实例越来越多,修改某一项配置越来越麻烦,你常常不得不为修改某一项配置而重启某个服务所有的provider实例,甚至为了灰度上线需要更新部分provider的配置。这个时候有一套配置文件集中管理方案就变得十分重要,SpringCloudConfig和SpringCloudBus就是这种问题的解决方案之一。

SpringCloudConfig就是我们通常意义上的配置中心,把应用原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。SpringCloudConfig分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh

1、所以我们先来构建一个高可用的配置中心。


【简单的说就是,我们的每个微服务都可以从配置中心读取配置,配置中心可以从我们的git版本管理上读取东西,同时使配置中心也成为一个微服务】


创建一个module命名为configserver,步骤如同之前,这里不做赘述。


添加依赖




<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-config-server</artifactId>
 <version>1.4.0.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

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

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


配置文件


server:
 port: 8882

eureka:
 client:
 serviceUrl:
 defaultZone: http://localhost:8072/eureka/

spring:
 cloud:
 config:
 server:
 git:
 uri: http://172.16.20.14:7990/scm/ycm/configurationcenter.git
          search-paths: springcloud-configs
          username: hanyulong
          password: 1q2w3e4R
      label: master
  application:
 name: config-server


在这里我们看到它也是注册在eureka的一个服务,我们核心来关注


spring.cloud.config:
以下的配置,


spring.cloud.config.server.git.uri=http://172.16.20.14:7990/scm/ycm/configurationcenter.git


spring.cloud.config.label=master


spring.cloud.config.server.git.username= your username


spring.cloud.config.server.git.password= your password


git.url指向配置文件的git地址


label指分支


git.username指用户名


git.password指密码


通过这些配置config.server就会从git上去读我们的代码仓库的文件


同时需要在核心启动类中添加注解


@EnableConfigServer 【此注解标明这是一个配置中心服务】
@EnableEurekaClient

此时访问http://localhost:8882/from/config-client-dev

你就会看到返回

<Environment>
<name> from </name>
<profiles>
<profiles> config-client-dev </profiles>
</profiles>
<label/>
<version> f074c66c462da2e9aa8e605f7196d4d2c187fd64 </version>
<state/>
<propertySources/>
</Environment>

证明配置服务中心可以从远程程序获取配置信息。


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


  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.propertie
2、然后我们来构建一个配置服务消费者

【简单地说就是可以获取配置中心的从git上获取的配置的配置消费者】

创建一个基本的Eureka的消费者cnfigclient。

以下是依赖

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

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

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

创建配置文件bootstrap.yml,注意:这里不再使用application.yml,同时名称必须是bootstrap

配置如下
spring:
 application:
 name: config-client
  cloud:
 config:
 label: master
      profile: dev
      discovery:
 enabled: true
 service-id: config-server
server:
 port: 8881
eureka:
 client:
 serviceUrl:
 defaultZone: http://localhost:8072/eureka/


这里我们核心关注

spring.application.name=config-client   【对应上面提到映射的application部分】

spring.cloud.config.label=master            【对应上面提到映射的label部分】

spring.cloud.config.profile=dev              【对应上面提到映射的profile部分】

spring.cloud.config.discovery.enabled=true     【是否从注册服务发现】

spring.cloud.config.discovery.serviceId=config-server        【注册服务ID】



创建一个简单的REST接口

@Value("${from}")
String from;
@RequestMapping(value = "/hi")
public String hi(){
   return from;
}

然后依次启动eurekaserver,启动configserver,启动configclient

调用http://localhost:8881/hi  可以看到返回

git-dev-1.0

这里我们的高可用配置中心就完成了。

3、然后我们来实现消息总线
Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。
也就是说服务之间状态的传播。
当我们的config修改之后,我们希望与之相关的全部服务都能同步刷新其配置而不需要我们一个个的手动去刷新。
首先,在配置消费端 pom文件加上起步依赖spring-cloud-starter-bus-amqp
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-bus-amqp</artifactId>
 <version>1.3.2.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework.retry</groupId>
 <artifactId>spring-retry</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

然后在application.ym配置文件中添加RabbitMQ的配置

rabbitmq:
 host: 172.16.20.19
  port: 5672
 username: jiak
  password: jiak

这样就完了。你可以在多个端口启动这个配置消费实例查看当前配置。

然后在GIT中修改配置,再使用POST方式请求其中一个实例的http://地址:端口/bus/refresh  ,你会看到,在程序的控制塔输出从配置中心重新拉取的输出。在不重启服务的情况下再次查看其配置。

你会发现,全部实例的配置都修改了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值