Spring Cloud(七)《基于RabbitMQ消息总线方式刷新配置服务》

简介: 在微服务架构中,为了更方便的向微服务实例广播消息,我们通常会构建一个消息中心,让所有的服务实例都连接上来,而该消息中心所发布的消息都会被微服务实例监听和消费,我们把这种机制叫做消息总线(SpringCloud Bus)

前言介绍

在微服务架构中,为了更方便的向微服务实例广播消息,我们通常会构建一个消息中心,让所有的服务实例都连接上来,而该消息中心所发布的消息都会被微服务实例监听和消费,我们把这种机制叫做消息总线(SpringCloud Bus)

当我们的微服务达到是几个到百个以上,在更新配置时,不太可能一个个刷新或者重启,这样既不能保证效率也容易导致遗漏造成事故。因此我们需要SpringCloud Bus 提供总线服务,在我们push代码到Git的时候,通过Webhooks(http://localhost:port/actuator/bus-refresh/)执行刷新,消息总线会通知各个实例更新配置,以达到自动更新全服务配置。

25.jpg

环境准备

  1. jdk 1.8、idea2018、Maven3
  2. Spring Boot 2.0.6.RELEASE
  3. Spring Cloud Finchley.SR2
  4. 需要有一个Git帐号,用来创建配置中心以及开启Webhooks服务,添加回调
  5. RabbitMQ服务端环境安装
  • cd D:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.1\sbin
  • rabbitmq-plugins.bat enable rabbitmq_management
  • rabbitmq-service.bat stop
  • rabbitmq-service.bat start
  • 浏览器访问;http://127.0.0.1:15672
  • 服务端口5672
  1. 下载Erlang;http://www.erlang.org/downloads {安装后配置环境变量:D:\Program Files\erl10.5}
  2. 下载rabbitMQ;http://www.rabbitmq.com/download.html {安装后CMD依次执行}

代码示例

1itstack-demo-springcloud-07
 2├── itstack-demo-springcloud-config-client
 3│   └── src
 4│       └── main
 5│           ├── java
 6│           │   └── org.itstack.demo
 7│           │        ├── web
 8│           │        │   └── ConfigClientController.java      
 9│           │        └── ConfigClientApplication.java
10│           └── resources   
11│               ├── application.yml
12│               └── bootstrap.yml
13├── itstack-demo-springcloud-config-server
14│   └── src
15│       └── main
16│           ├── java
17│           │   └── org.itstack.demo   
18│           │        └── ConfigServerApplication.java
19│           └── resources   
20│               └── application.yml
21└── itstack-demo-springcloud-eureka-server
22     └── src
23        └── main
24            ├── java
25            │   └── org.itstack.demo   
26            │        └── EurekaServerApplication.java
27            └── resources   
28                └── application.yml

完整代码欢迎关注公众号:bugstack虫洞栈 回复“SpringCloud专题”进行下载

itstack-demo-springcloud-config-client | 配置获取客户端方,提供自动刷新Http

web/ConfigClientController.java & 添加注解@RefreshScope自动刷新配置

1/**
 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例
 3 * 论坛:http://bugstack.cn
 4 * Create by 付政委 on @2019
 5 */
 6@RestController
 7@RefreshScope
 8public class ConfigClientController {
 9
10    @Value("${info.profile:error}")
11    private String profile;
12
13    @GetMapping("/config")
14    public Mono<String> config() {
15        return Mono.justOrEmpty(profile);
16    }
17
18}
1

ConfigClientApplication.java & 普通配置即可

1/**
 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例
 3 * 论坛:http://bugstack.cn
 4 * Create by 付政委 on @2019
 5 */
 6@SpringBootApplication
 7public class ConfigClientApplication {
 8
 9    public static void main(String[] args) {
10        SpringApplication.run(ConfigClientApplication.class, args);
11    }
12
13}

application.yml & 需要配置endpoints,这样才可以暴漏刷新服务

1spring:
 2  application:
 3    name: itstack-demo-springcloud-config-client
 4  cloud:
 5    bus:
 6      trace:
 7        enabled: true
 8      enabled: true
 9server:
10  port: 9001
11
12# 如果不使用消息总线,则开启如下配置 /actuator/refresh 这个 Endpoint 暴露出来
13#management:
14#  endpoints:
15#    web:
16#      exposure:
17#        include: refresh

bootstrap.yml & 配置中心服务配置,http://localhost:7397 添加配置服务

1spring:
 2  cloud:
 3    config:
 4      name: config-client         # 对应 {application} 部分,例如;config-client-dev = 只取最后一个符号'-'之前的
 5      profile: dev                # 对应 {profile} 部分
 6      label: master               # 对应 {label} 部分,即 Git 的分支。如果配置中心使用的是本地存储,则该参数无用
 7      discovery:
 8        enabled: true             # 开启 config 服务发现支持
 9        service-id: itstack-demo-springcloud-config-server        # 配置服务name
10
11#配置文件会被转换成 Web,访问规则如下;
12#/{application}/{profile}[/{label}]
13#/{application}-{profile}.yml
14#/{label}/{application}-{profile}.yml
15#/{application}-{profile}.properties
16#/{label}/{application}-{profile}.properties
17
18eureka:
19  client:
20    service-url:
21      defaultZone: http://localhost:7397/eureka/

itstack-demo-springcloud-config-server | 配置提供服务端方,链接Git配置工程地址

ConfigServerApplication.java & 添加注解@EnableConfigServer设置成配置服务中心

1/**
 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例
 3 * 论坛:http://bugstack.cn
 4 * Create by 付政委 on @2019
 5 */
 6@SpringBootApplication
 7@EnableConfigServer
 8public class ConfigServerApplication {
 9
10    public static void main(String[] args) {
11        SpringApplication.run(ConfigServerApplication.class, args);
12    }
13
14}

application.yml & 配置信息,消息总线刷新

1server:
 2  port: 8080
 3
 4spring:
 5  application:
 6    name: itstack-demo-springcloud-config-server
 7  cloud:
 8    config:
 9      server:
10        git:
11          uri: https://github.com/fuzhengwei/itstack-demo-config  # 换成自己的配置Git仓库的地址,如果没有可以新建工程地址,也可以克隆我的;https://github.com/fuzhengwei/itstack-demo-config
12          search-paths: config-repo                               # Git仓库地址下的底层配置文件名称,如果配置多个用逗号','分割。
13
14# 如果配置中心需要访问权限,则开启配置
15# spring.cloud.config.server.git.username:Github账户
16# spring.cloud.config.server.git.password:Github密码
17
18eureka:
19  client:
20    service-url:
21      defaultZone: http://localhost:7397/eureka/
22management:
23  endpoints:
24    web:
25      exposure:
26        include: bus-refresh

itstack-demo-springcloud-eureka-server | 服务注册发现

EurekaServerApplication.java & 添加注解@EnableEurekaServer启动服务发现

1/**
 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例
 3 * 论坛:http://bugstack.cn
 4 * Create by 付政委 on @2019
 5 */
 6@SpringBootApplication
 7@EnableEurekaServer
 8public class EurekaServerApplication {
 9
10    public static void main(String[] args) {
11        SpringApplication.run( EurekaServerApplication.class, args );
12    }
13
14}

application.yml & 配置信息

1server:
 2  port: 7397
 3
 4eureka:
 5  instance:
 6    hostname: localhost
 7  client:
 8    registerWithEureka: false
 9    fetchRegistry: false
10    serviceUrl:
11      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
12
13spring:
14  application:
15    name: itstack-demo-springcloud-eureka-server

测试验证

  1. 准备好自己Github的配置仓库,也可以克隆我的Git;https://github.com/fuzhengwei/itstack-demo-config {有一组配置配置文件}
  2. 配置Webhooks,在https://github.com/换你自己的fuzhengwei/换你自己的itstack-demo-netty/settings/hooks/new
  3. 分别启动服务
  1. 启动RabbitMQ服务;http://127.0.0.1:15672/#/
  2. itstack-demo-springcloud-eureka-server 服务注册发现
  3. itstack-demo-springcloud-config-server 配置Server
  4. itstack-demo-springcloud-config-client 配置Client
  1. 访问配置服务,端口7397;http://localhost:8080/config-client/dev
1{
 2    "name": "config-client",
 3    "profiles": [
 4        "dev"
 5    ],
 6    "label": null,
 7    "version": "ea0b1a1017595d542aa01b8b2bda68f9620dd81a",
 8    "state": null,
 9    "propertySources": [
10        {
11            "name": "https://github.com/fuzhengwei/itstack-demo-config/config-repo/config-client-dev.yml",
12            "source": {
13                "info.profile": "dev bus"
14            }
15        }
16    ]
17}
1info:
2    profile: dev bus
  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties
  1. 访问配置文件;http://localhost:8080/config-client-dev.yml {可以直接访问查看配置信息}
  2. 访问规则{配置文件会被转换成 Web 接口,规则如下}
  3. 访问结果
  1. 访问使用配置的客户端
  2. 访问端口9001;http://localhost:9001/config
    dev bus
  3. 更改配置,POST请求刷新配置总线;http://localhost:8080/actuator/bus-refresh/ {如果配置Git的Webhooks则更新代码自动刷新}
  4. 访问端口9001;http://localhost:9001/config
    dev

综上总结

  1. Spring Cloud Bus 可以更加方便的控制全局信息,用于统一刷新并通过MQ方式通过客户端
  2. 如果你的内网想进行Git的Webhooks配置,可以使用http://natapp.cn进行内网穿透映射,他会给你提供免费外网调用服务
  3. 消息总线方式不只是应用于配置刷新,在一起同步信息请求中都可以使用,以及自己的项目架设上
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
4天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
20 0
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
29天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
35 0
|
22天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
14天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
27 1
|
30天前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
123 1
|
2月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
210 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
2月前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
213 1
|
2月前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
56 1
|
1月前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
46 0