springcloud结合rabbitmq动态获取配置
2018-04-08 17:16
316 查看
rabbitmq 的安装,启动,这里就不多说了,这里主要是介绍在git 仓库上有你的配置仓库,现在通过消息广播的形式,达到这样的效果:
git上的配置信息更改之后,可以在不重启服务的情况下,让服务读取到新的配置内容!
现在上例子:
1:创建config-server 服务用于从git 仓库上拉取信息
配置如下:
spring.application.name=config-server
server.port=2007
spring.cloud.config.server.git.uri=你的Git地址
spring.cloud.config.server.git.search-paths={application}
spring.cloud.config.server.git.username=你的Git账户
spring.cloud.config.server.git.password=你的Git密码
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/
spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=5672
management.security.enabled=false
pom如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.yyc</groupId>
<artifactId>config-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>config-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project> 启动类的注解需要加上@EnableConfigServer注解 启动配置服务 从git上拉配置信息
![](https://img-blog.csdn.net/20180408164256528?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NzZG5tdXlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2:创建config-client项目 从config-server 获取配置信息 相当于我们平时的各种微服务,这里单拿一个出来做介绍!
配置:用的yml 格式 这个配置文件一定要使用bootstrap.yml或者bootstrap.properties
下面这段是百度的:////
说明:其实yml和properties文件是一样的原理,主要是说明application和bootstrap的加载顺序。且一个项目上要么yml或者properties,二选一的存在。
Bootstrap.yml(bootstrap.properties)在application.yml(application.properties)之前加载,就像application.yml一样,但是用于应用程序上下文的引导阶段。它通常用于“使用Spring Cloud Config Server时,应在bootstrap.yml中指定spring.application.name和spring.cloud.config.server.git.uri”以及一些加密/解密信息。技术上,bootstrap.yml由父Spring ApplicationContext加载。父ApplicationContext被加载到使用application.yml的之前。
例如,当使用Spring Cloud时,通常从服务器加载“real”配置数据。为了获取URL(和其他连接配置,如密码等),您需要一个较早的或“bootstrap”配置。因此,您将配置服务器属性放在bootstrap.yml中,该属性用于加载实际配置数据(通常覆盖application.yml [如果存在]中的内容)。
当然,在一些情况上不用那么区分这两个文件,你只需要使用application文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。
spring:
application:
name: config-client
rabbitmq:
host: localhost
password: guest
username: guest
port: 5672
cloud:
config:
label: master
uri: http://localhost:2007/ profile: test
discovery:
enabled: true
service-id: config-server
fail-fast: true
name: config-client
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:1111/eureka/ server:
port: 2008pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.yyc</groupId>
<artifactId>config-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>config-client</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR5</spring-cloud.version>
</properties>
<dependencies>
<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.cloud</groupId>
<artifactId>spring-cloud-starter-config</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</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
测试controller
@RestController
@RefreshScope //必须的否则不能动态获取配置的值
public class HelloController {
@Value("${yang}")
String yang;
@RequestMapping("/yang")
public String sang() {
return this.yang;
}
}
现在我们服务配置提供者和消费者已经写完了 接下来在git上新建一个项目,把配置文件上传上去 比如:
码云上有个项目 文件夹的名称是config-client
![](https://img-blog.csdn.net/20180408192255702?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NzZG5tdXlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](https://img-blog.csdn.net/20180408192338152?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NzZG5tdXlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
然后启动eureka, rabbitmq, config-server,config-client
访问http://localhost:2008/yang 得到内容,然后修改git仓库的内容,因为我上面启动的时候用的是test所以改变test文件,然后发送请求http://localhost:2007/bus/refresh/ 注意:这是个post请求,所以使用postman进行访问!然后你再访问http://localhost:2008/yang 你会发现内容已经变了
3:这里面存在的坑:
一开始如果你的配置文件不写这个配置的话:management.security.enabled=false你会发现你访问不了http://localhost:2007/bus/refresh/ 地址,报错如下
![](https://img-blog.csdn.net/20180408171114328?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NzZG5tdXlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
可是有的小伙伴也发现了,我的依赖里面没有加spring-boot-starter-actuator依赖啊!
但是是有的,只是在这个里面:
![](https://img-blog.csdn.net/2018040817143787?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NzZG5tdXlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
也就是说你引用的
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>这个依赖里面是有的!因此暂时先加上
git上的配置信息更改之后,可以在不重启服务的情况下,让服务读取到新的配置内容!
现在上例子:
1:创建config-server 服务用于从git 仓库上拉取信息
配置如下:
spring.application.name=config-server
server.port=2007
spring.cloud.config.server.git.uri=你的Git地址
spring.cloud.config.server.git.search-paths={application}
spring.cloud.config.server.git.username=你的Git账户
spring.cloud.config.server.git.password=你的Git密码
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/
spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=5672
management.security.enabled=false
pom如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.yyc</groupId>
<artifactId>config-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>config-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project> 启动类的注解需要加上@EnableConfigServer注解 启动配置服务 从git上拉配置信息
2:创建config-client项目 从config-server 获取配置信息 相当于我们平时的各种微服务,这里单拿一个出来做介绍!
配置:用的yml 格式 这个配置文件一定要使用bootstrap.yml或者bootstrap.properties
下面这段是百度的:////
说明:其实yml和properties文件是一样的原理,主要是说明application和bootstrap的加载顺序。且一个项目上要么yml或者properties,二选一的存在。
Bootstrap.yml(bootstrap.properties)在application.yml(application.properties)之前加载,就像application.yml一样,但是用于应用程序上下文的引导阶段。它通常用于“使用Spring Cloud Config Server时,应在bootstrap.yml中指定spring.application.name和spring.cloud.config.server.git.uri”以及一些加密/解密信息。技术上,bootstrap.yml由父Spring ApplicationContext加载。父ApplicationContext被加载到使用application.yml的之前。
例如,当使用Spring Cloud时,通常从服务器加载“real”配置数据。为了获取URL(和其他连接配置,如密码等),您需要一个较早的或“bootstrap”配置。因此,您将配置服务器属性放在bootstrap.yml中,该属性用于加载实际配置数据(通常覆盖application.yml [如果存在]中的内容)。
当然,在一些情况上不用那么区分这两个文件,你只需要使用application文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。
spring:
application:
name: config-client
rabbitmq:
host: localhost
password: guest
username: guest
port: 5672
cloud:
config:
label: master
uri: http://localhost:2007/ profile: test
discovery:
enabled: true
service-id: config-server
fail-fast: true
name: config-client
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:1111/eureka/ server:
port: 2008pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.yyc</groupId>
<artifactId>config-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>config-client</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR5</spring-cloud.version>
</properties>
<dependencies>
<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.cloud</groupId>
<artifactId>spring-cloud-starter-config</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</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
测试controller
@RestController
@RefreshScope //必须的否则不能动态获取配置的值
public class HelloController {
@Value("${yang}")
String yang;
@RequestMapping("/yang")
public String sang() {
return this.yang;
}
}
现在我们服务配置提供者和消费者已经写完了 接下来在git上新建一个项目,把配置文件上传上去 比如:
码云上有个项目 文件夹的名称是config-client
然后启动eureka, rabbitmq, config-server,config-client
访问http://localhost:2008/yang 得到内容,然后修改git仓库的内容,因为我上面启动的时候用的是test所以改变test文件,然后发送请求http://localhost:2007/bus/refresh/ 注意:这是个post请求,所以使用postman进行访问!然后你再访问http://localhost:2008/yang 你会发现内容已经变了
3:这里面存在的坑:
一开始如果你的配置文件不写这个配置的话:management.security.enabled=false你会发现你访问不了http://localhost:2007/bus/refresh/ 地址,报错如下
可是有的小伙伴也发现了,我的依赖里面没有加spring-boot-starter-actuator依赖啊!
但是是有的,只是在这个里面:
也就是说你引用的
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>这个依赖里面是有的!因此暂时先加上
management.security.enabled=false
相关文章推荐
- spring cloud搭建微服务second-fiberhome(三):consul结合config以及bus实现配置文件通过RabbitMQ动态调用
- php 配置文件php.ini文件的动态设置与获取
- jsp+javaScript结合dom4j动态生成网站配置文件
- struts2的XML配置、动态方法调用、获取页面表单元素的方法
- Linux文件系统使用udhcpc动态获取ip配置
- SpringCloud的Archaius - 动态管理属性配置
- php结合js动态获取空间时间
- LigerUI 表格 LigerGrid 动态结合 Struts2 获取数据
- 使用配置文件动态获取WebService地址
- linux下部署和执行kettle——(配置文件、动态获取、后台执行)
- Springcloud学习——结合RabbitMQ实现消息总线更新分布式配置
- Flex中动态获取 services-config.xml中配置的ChannelSet
- Forms表单登陆,动态获取web.config里面的cookies配置
- 批处理自动配置IP(静态IP)和批处理自动获取IP(动态IP):有线、无线均可使用此脚本
- 配置cisco路由器为DHCP客户端,使之动态获取ip地址
- 使用配置文件动态获取WebService地址
- WCF随客户端软件一起发布,客户端自动识别WCF服务地址,不通过配置文件绑定WCF服务,客户端动态获取版本号
- 动态获取配置文件里的value
- Linux文件系统--udhcpc动态获取ip配置
- echarts结合ajax动态获取数据库数据