springcloud之基于RabbitMQ消息总线方式刷新配置服务

前言
在微服务架构中,为了更方便的向微服务实例广播消息,我们通常会构建一个消息中心,让所有的服务实例都连接上来,而该消息中心所发布的消息都会被微服务实例监听和消费,我们把这种机制叫做消息总线(SpringCloud Bus)。
当我们的微服务达到是几个到百个以上,在更新配置时,不太可能一个个刷新或者重启,这样既不能保证效率也容易导致遗漏造成事故。因此我们需要SpringCloud Bus 提供总线服务,在我们push代码到Git的时候,通过Webhooks(http://localhost:port/actuator/bus-refresh/)执行刷新,消息总线会通知各个实例更新配置,以达到自动更新全服务配置。

1:jdk 1.8、idea2018、Maven3
2:Spring Boot 2.0.6.RELEASE
3:Spring Cloud Finchley.SR2
4:需要有一个Git帐号,用来创建配置中心以及开启Webhooks服务,添加回调
5:RabbitMQ服务端环境安装
下载Erlang;http://www.erlang.org/downloads {安装后配置环境变量:D:\Program Files\erl10.5}
下载rabbitMQ;http://www.rabbitmq.com/download.html {安装后CMD依次执行}
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
web/ConfigClientController.java & 添加注解@RefreshScope自动刷新配置

@RestController
@RefreshScope
public class ConfigClientController {@Value("${info.profile:error}")private String profile;@GetMapping("/config")public Mono<String> config() {return Mono.justOrEmpty(profile);}}

ConfigClientApplication.java & 普通配置即可

@SpringBootApplication
public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}}

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

spring:application:name: springcloud-config-clientcloud:bus:trace:enabled: trueenabled: true
server:port: 9001# 如果不使用消息总线,则开启如下配置 /actuator/refresh 这个 Endpoint 暴露出来
#management:
#  endpoints:
#    web:
#      exposure:
#        include: refresh

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

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

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

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}}

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

server:port: 8080spring:application:name: springcloud-config-servercloud:config:server:git:uri: https://github.com/xxx/itstack-demo-config  # 换成自己的配置Git仓库的地址,如果没有可以新建工程地址search-paths: config-repo                               # Git仓库地址下的底层配置文件名称,如果配置多个用逗号','分割。# 如果配置中心需要访问权限,则开启配置
# spring.cloud.config.server.git.username:Github账户
# spring.cloud.config.server.git.password:Github密码eureka:client:service-url:defaultZone: http://localhost:7397/eureka/
management:endpoints:web:exposure:include: bus-refresh

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run( EurekaServerApplication.class, args );}}

application.yml & 配置信息

server:port: 7397eureka:instance:hostname: localhostclient:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/spring:application:name: springcloud-eureka-server

测试验证
1:准备好自己Github的配置仓库,也可以克隆我的Git;https://github.com/xx/itstack-demo-config {有一组配置配置文件}

2:配置Webhooks,在https://github.com/

分别启动服务

启动RabbitMQ服务;http://127.0.0.1:15672/#/
springcloud-eureka-server 服务注册发现
springcloud-config-server 配置Server
springcloud-config-client 配置Client
4:访问配置服务,端口7397;http://localhost:8080/config-client/dev

{"name": "config-client","profiles": ["dev"],"label": null,"version": "ea0b1a1017595d542aa01b8b2bda68f9620dd81a","state": null,"propertySources": [{"name": "https://github.com/xxx/config/config-repo/config-client-dev.yml","source": {"info.profile": "dev bus"}}]
}

综上总结
1:Spring Cloud Bus 可以更加方便的控制全局信息,用于统一刷新并通过MQ方式通过客户端
2:如果你的内网想进行Git的Webhooks配置,可以使用http://natapp.cn进行内网穿透映射,他会给你提供免费外网调用服务
3:消息总线方式不只是应用于配置刷新,在一起同步信息请求中都可以使用,以及自己的项目架设上.

好了到这里就结束了springcloud之基于RabbitMQ消息总线方式刷新配置服务的学习,大家一定要跟着动手操作起来。需要源码的 可si我获取;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web集群服务-代理和负载均衡

1. 概述 1. 用户----->代理--->Web节点,后面只有一个节点,一般使用的是nginx代理功能即可 2. 后面如果是集群需要使用nginx负载均衡功能 2. 代理分类 代理分类方向应用正向代理用户(服务器)-->代理--->外部(某网站)服务器通过代理实现共享上网/访问公网反向代理用…

Linux:进程控制(三)——进程程序替换

目录 一、概念 二、使用 1.单进程程序替换 2.多进程程序替换 3.exec接口 4.execle 一、概念 背景 当前进程在运行的时候&#xff0c;所执行的代码来自于自己的源文件。使用fork创建子进程后&#xff0c;子进程执行的程序中代码内容和父进程是相同的&#xff0c;如果子进…

Python基础语法条件

注释 注释的作用 通过用自己熟悉的语言&#xff0c;在程序中对某些代码进行标注说明&#xff0c;这就是注释的作用&#xff0c;能够大大增强程序的可读性。 注释的分类及语法 注释分为两类&#xff1a;单行注释 和 多行注释。 单行注释 只能注释一行内容&#xff0c;语法如下…

跟着小土堆学习pytorch(一)——Dataset

文章目录 一、前言二、dataset三、代码展示 一、前言 pytorch也是鸽了很久了&#xff0c;确定了下&#xff0c;还是用小土堆的教程。 kaggle获取数据集 二、dataset dateset&#xff1a;数据集——提供一种方式去获取数据及其标签 如何获取数据及其标签以及总共多少个数据…

PostgreSQL学习笔记六:模式SCHEMA

模式&#xff08;Schema&#xff09; PostgreSQL中的模式&#xff08;Schema&#xff09;是一个命名的数据库对象集合&#xff0c;包括表、视图、索引、数据类型、函数、存储过程和操作符等。模式的主要作用是组织和命名空间数据库对象&#xff0c;使得同一个数据库中可以包含…

基于gewechat制作第一个微信聊天机器人

Gewe 个微框架 GeWe&#xff08;个微框架&#xff09;是一个创新性的软件开发框架&#xff0c;为个人微信号以及企业信息安全提供了强大的功能和保障。GeWe的设计旨在简化开发过程&#xff0c;使开发者能够高效、灵活地构建和定制通信协议&#xff0c;以满足不同应用场景的需求…

JavaScript object(2)

这样的话&#xff0c;就变成只读了。

外包干了5天,技术明显退步

我是一名本科生&#xff0c;自2019年起&#xff0c;我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定&#xff0c;但日复一日的重复性工作让我逐渐陷入了舒适区&#xff0c;失去了前进的动力。两年的时光匆匆流逝&#xff0c;我却在原地踏步&#xff0c;技术没有丝毫…

“八股文”面试:助力、阻力还是空谈?

在当今的IT行业&#xff0c;面试程序员时提及“八股文”已成为一种普遍现象。所谓“八股文”&#xff0c;通常指的是一系列固定的、标准化的面试问题及其解答&#xff0c;这些问题往往涵盖了计算机科学和软件工程的基础知识&#xff0c;以及一些流行的技术框架和算法。然而&…

Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)

0x01 漏洞概述 Qualitor 8.24及之前版本存在任意文件上传漏洞,未经身份验证远程攻击者可利用该漏洞代码执行,写入WebShell,进一步控制服务器权限。 0x02 复现环境 FOFA:app="Qualitor-Web" 0x03 漏洞复现 PoC POST /html/ad/adfilestorage/request/checkAcess…

【IC验证】随机约束

1.约束 &#xff08;1&#xff09;注意 一般随机约束只能在类中使用&#xff1b; &#xff08;2&#xff09;实现步骤 在定义变量时&#xff0c;用rand/randc关键字进行修饰&#xff1b; 定义约束&#xff1b; 创建并实例化类后&#xff0c;调用随机约束方法&#xff1b; &am…

光平面标定代码

本篇文章主要给出光平面标定代码&#xff0c;鉴于自身水平所限&#xff0c;如有错误&#xff0c;欢迎批评指正。&#xff08;欢迎进Q群交流&#xff1a;874653199&#xff09; 数据分为棋盘格数据和激光条数据&#xff0c;激光条数据为在第22个位姿至第26个位姿下打在棋盘格标定…

初识Linux之指令(二)

一&#xff1a;head指令 head 与 tail 就像它的名字一样的浅显易懂&#xff0c;它是用来显示开头或结尾某个数量的文字区块&#xff0c;head 用来显示档案的 开头至标准输出中&#xff0c;而 tail 想当然尔就是看档案的结尾。 语法&#xff1a;head 【参数】 【文件】 功能&…

java Execl 写入png图片 解决

1、先拿到Execl 的所有图片 放到list /*** 获取图片和位置 (xls)** param sheet* return* throws IOException*/public Map<String, PictureData> getPictures(XSSFSheet sheet) throws IOException {Map<String, PictureData> map new HashMap<String, Pict…

開發 meshtastic 聊天機器人(2)

利用 Web 串接主機附近周邊藍芽(含 meshtastic client) pip install bleak (這個比較簡單) ----另外一個為 pybluez2 (pybluez) 2.程式 import streamlit as st import asyncio from bleak import BleakScannerasync def fetch_data():devices await BleakScanner.discover(…

尚硅谷rabbitmq2024 第15-18节 springboot整合与可靠性答疑

在spring boot项目中&#xff0c;只引入了一个amqp的starter&#xff0c;为什么在写listener的时候能看到rabbitmq相关的类&#xff0c;比如RabbitListener( public void processMessage(String dataString, Message message, channel channel){ 这里的Message就是rabbitmq下面…

grpc和http的区别

当面试官问到gRPC和HTTP的区别时&#xff0c;你可以从以下几个方面进行回答&#xff1a; 协议层次&#xff1a; gRPC&#xff1a;gRPC是一个现代的、开源的、高性能的远程过程调用&#xff08;RPC&#xff09;框架&#xff0c;它使用HTTP/2作为传输协议&#xff0c;并使用Pro…

【ICPC】The 2021 CCPC Weihai Onsite G

Shinyruo and KFC #组合数学 #暴力 #枚举 题目描述 During your participation in this competition, Shinyruo is preparing to order KFC for the offline competition next week. There are n n n kinds of foods in KFC, and he plans to order a i a_i ai​ number …

京存非编存储走进中央民族大学

中央民族大学是一所具有鲜明民族特色的综合性全国重点大学&#xff0c;是国家民委、教育部、北京市共建高校。学校前身为1941年成立的延安民族学院。新中国成立后&#xff0c;经中央政府批准&#xff0c;1951年在北京成立中央民族学院&#xff0c;1993年11月更名为中央民族大学…

LeetCode 3158.求出出现两次数字的 XOR 值:化整数为哈希,一次遍历O(1)空间解决

【LetMeFly】3158.求出出现两次数字的 XOR 值&#xff1a;化整数为哈希&#xff0c;一次遍历O(1)空间解决 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-xor-of-numbers-which-appear-twice/ 给你一个数组 nums &#xff0c;数组中的数字 要么 出现一次&a…