您的位置:首页 > 编程语言 > Java开发

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上拉配置信息



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: