游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

SpringCloud系列之分布式配置中心学习

  1、分布式配置中心简介
  在实际的项目开发中,配置文件是使用比较多的,很多项目有测试环境(TEST)、开发环境(DEV)、规范的项目还有集成环境(UAT)、生产环境(PROD),每个环境就一个配置文件。
  这个在单体应用的项目里是没什么问题,如果是分布式微服务项目,就会有很多的模块,比如微服务A、微服务B等等,每个工程都有一套配置文件,随着业务增长,肯定会有很多配置,分散管理,不能实现统一的管理,所以就有了微服务的配置文件统一管理组件,比如springcloud官方的springcloudconfig、携程的Apollo,还有最近比较火的阿里nacos,每款产品各有自己的特点,不过本博客只介绍springcloudconfig
  作为一款分布式的配置中心,其基本的功能应该有统一的配置文件管理,至于怎么存储可以自行设计,客户端可以从配置中心下拉配置数据,还有一个重要功能就是推送,有了推送功能,才能做到将数据统一发给客户端及时更新,总不能让客户端自己pull,如果在客户端很多的情况,这种肯定是不合理的,简单画图表示:
  2、什么是SpringCloudConfig?
  ok,前面简单介绍了分布式配置中心的基本概念,现在看看springcloud提供的这块分布式配置中心springcloudconfig是怎么设计?简单归纳其特点:文件存储:默认Git仓库(github、gitlab等等)版本关联:默认Git权限控制:需要Git支持多环境(profile):配置文件指定动态更新:需要基于Springcloudconfigbus定时更新:需要自行拓展管理后台:默认不带
  所以有一个明显的特点,springcloudconfig默认就是基于git仓库来实现配置文件统一管理的,所以很明显其有如下角色:配置仓库:git仓库配置服务端:configserver,负责从git仓库下拉配置文件到本地,然后可以统一推送给客户端配置客户端:各微服务业务客户端,可以从配置服务端pull配置数据
  ok,简单画图表示其架构,如图所示:
  3、例子实验环境准备
  环境准备:JDK1。8SpringBoot2。2。3SpringCloud(Hoxton。SR7)Maven3。2开发工具IntelliJIDEAsmartGit
  github远程仓库创建,可以在github上创建一个springCloudExamples项目,然后新建一个文件夹,命名为configrepository4、ConfigServer代码实现
  创建一个SpringBootInitialize项目,详情可以参考我之前博客:SpringBoot系列之快速创建项目教程
  如图:选择configServer
  也可以自行在maven引入如下配置:dependencygroupIdorg。springframework。cloudgroupIdspringcloudconfigserverartifactIddependency
  使用注解EnableConfigServer表示这个config服务端工程packagecom。example。springcloud。server;importorg。springframework。boot。SpringApplication;importorg。springframework。boot。autoconfigure。SpringBootApplication;importorg。springframework。cloud。config。server。EnableConfigServer;SpringBootApplicationEnableConfigServerpublicclassSpringcloudConfigServerApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(SpringcloudConfigServerApplication。class,args);}}
  新建bootstrap。yml配置文件,指定github仓库的地址:server:port:8761spring:application:name:springcloudconfigservercloud:config:server:git:uri:https:github。comyourgithubaccountspringCloudExamplesusername:yourgithubaccountpassword:yourgithubpasswordsearchpaths:configrepository5、ConfigClient代码实现
  同样新建SpringBootInitialize项目,快速创建
  pom配置文件:dependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependencydependencygroupIdorg。springframework。cloudgroupIdspringcloudstarterconfigartifactIddependency
  yaml配置,uri指定为configserver的地址,profile是环境变量,可以指定为dev(开发环境),label表示分支,master是指github的主干分支server:port:8082spring:application:name:springcloudconfigclientcloud:config:uri:http:127。0。0。1:8761profile:devlabel:master
  然后,我们要在github仓库新建配置文件:命名规范必须是客户端的spring。application。name加上profile
  在配置文件,随便写点:config。client。profilespringcloudconfigclientdev
  测试:要先启动configserver,然后再启动configclient,写个例子测试,要加上RefreshScope实现刷新功能RestControllerRefreshScopepublicclassConnfigClientController{Value({config。client。profile})privateStringprofile;GetMapping(valuetest)publicStringtest(){returnthis。profile;}}
  启动SpringBoot项目,测试:
  在configserver启动过程,可以看到configserver从github下拉配置文件到本地缓存,具体是C盘AppData目录
  6、客户端pull刷新实现
  客户端要实现下拉配置数据,怎么实现?可以集成springbootstarteractuator来实现:
  pom配置:dependencygroupIdorg。springframework。bootgroupIdspringbootstarteractuatorartifactIddependency
  springbootstarteractuator配置:include加上rehresh配置management:endpoints:web:前缀名,默认也是actuatorbasepath:actuator默认只开放info,health的方式访问,加上refreshexposure:include:info,health,refreshendpoint:health:showdetails:alwaysrefresh:enabled:true
  访问客户端的链接,注意要用post方式,http:localhost:8082actuatorrefresh
  github配置文件没更新的情况:
  修改配置文件,commit和push到github
  调用接口时候,可以看到configclient从configserver获取数据:
  7、消息总线SpringCloudBus什么是总线?
  在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都链接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。什么是SpringCloudBus?
  SpringCloudBus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能
  SpringCloudBus能管理和传播分布式消息间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道
  看了理论,貌似不理解?所以还是从前面学习说起,前面介绍说明作为一个分布式的配置中心,至少应该有推送消息的功能,所以这个配置中心的角色可以由configserver充当,实现的效果是configserver(配置中心)一刷新数据,客户端都能同步更新,画图进行说明:
  1、配置中心(configserver)执行busrefresh,springcloudbus提供的刷新接口,配置中心就从git仓库下拉数据到本地git仓库2、执行busrefresh之后,将消息发给springcloudbus(消息总线),消息总线将消息写到消息队列(rabbitMQ)的topic中3、只要订阅这个消息队列topic的都能监听到springcloudbus的消息(基于rabbitmq)4、监听到之后,configclient从configserverpull更新配置数据
  其实简而言之,ConfigClient实例都监听RabbitMQ中同一个topic,当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置,当然这个刷新操作不一定要放在configserver,也可以放在某个客户端触发,只要将消息发送给消息总线就可以8、Docker安装部署RabbitMQ
  主要介绍一下Docker版本,常用的docker镜像操作:
  查询rabbitMQ镜像:
  management版本,不指定默认为最新版本latestdockersearchrabbitmq:management
  拉取镜像:dockerpullrabbitmq:management
  查看docker镜像列表:dockerimages
  Docker容器操作:
  ok,上面命令执行后,镜像就已经拉取到本地仓库了,然后可以进行容器操作,启动rabbitMQ
  简单版dockerrundp5672:5672p15672:15672namerabbitmqrabbitmq:management1d后台运行p隐射端口name指定rabbitMQ名称
  复杂版(设置账户密码,hostname)dockerrundp15672:15672p5672:5672eRABBITMQDEFAULTUSERadmineRABBITMQDEFAULTPASSadminnamerabbitmqhostnamerabbitmqhostonerabbitmq:management1d后台运行p隐射端口name指定rabbitMQ名称RABBITMQDEFAULTUSER指定用户账号RABBITMQDEFAULTPASS指定账号密码
  执行如上命令后访问:http:ip:15672
  默认账号密码:guestguest
  其它常用容器命令:
  查看运行中的容器查看所有的容器用命令dockerpsadockerps
  启动容器eg:dockerstart9781cb2e64bddockerstartCONTAINERID〔容器ID〕
  stop容器dockerstopCONTAINERID〔容器ID〕
  删除一个容器dockerrmCONTAINERID〔容器ID〕
  查看Docker容器日志eg:dockerlogs9781cb2e64bddockerlogscontainername〔容器名〕containerid〔容器ID〕9、SpringCloudBus动态刷新
  有了前面的学习,接着进行代码例子实践,configserverpom配置:dependencygroupIdorg。springframework。bootgroupIdspringbootstarteractuatorartifactIddependencydependencygroupIdorg。springframework。cloudgroupIdspringcloudstarterbusamqpartifactIddependency
  yaml配置:开放busrefreshmanagement:endpoints:web:basepath:actuatorexposure:include:info,health,refresh,busrefreshendpoint:health:showdetails:alwaysrefresh:enabled:true
  加上rabbitmq配置RabbitMQ配置rabbitmq:host:192。168。6。155port:5672username:guestpassword:guest
  ConfigClient代码例子改造,pom配置:dependencygroupIdorg。springframework。cloudgroupIdspringcloudstarterbusamqpartifactIddependency
  也要加上rabbitMQ配置,这样才能订阅更新:RabbitMQ配置rabbitmq:host:192。168。6。155port:5672username:guestpassword:guestvirtualhost:
  客户端必须修改,refresh、enabled都要改为true,trace是进行跟踪的,可以根据需要开启spring:cloud:bus:enabled:truerefresh:enabled:truetrace:enabled:true
  注意点:为了实时更新,必须加上RefreshScope
  配置中心进行busrefresh
  订阅的客户端都进行实时更新:

四部门对美团饿了么滴滴等10平台开展联合行政指导新华社北京9月10日电(记者姜琳)10日,人力资源社会保障部会同交通运输部、市场监管总局、全国总工会召开平台企业行政指导会,就维护新就业形态劳动者劳动保障权益,对美团、饿了么、……短视频娱乐内卷,知识风起吹向百度在以全民买买买为主题的双11,百度反而打起了自家的主意百度移动生态事业群宣布将好看视频与全民小视频整合升级为短视频业务部,但两款产品在未来一段时间内仍将独立运营。从字面来……一起联想国有资产是否流失滴滴未经国家批准,私自赴美上市,资本的市场,已经让人找不到初心,接连出事后引起了社会巨大的舆论,柳青是柳传志的女儿,不仅滴滴是柳传志的企业,国内其他出行打车软件像神州专车、优步……谁能详细的解释一下比特币的价值到底是什么?作者这么问肯定是把比特币和货币画上等号了,或者潜意识里认为是差不多的东西。其实两者差的很远,比特币的概念最初由中本聪在2008年11月1日提出,并于2009年1月3日正式……四款主流扫地机器人横评谁才是最强扫地僧劳累了一天回到家庭的港湾后,舒舒服服得躺在沙发上谁都不希望投入家庭劳动吧?幸好有智能扫地机器人来帮助我们清扫家务。形形色色的扫地机器人或许是最先进入家庭的智能机器人了,它们每天……赔偿100亿元!禁售所有iPhone产品!苹果这次还逃得过吗iPhone13即将于下周发布的消息相信已经传遍大街小巷了,大家期待了那么久的新iPhone就要来了,是不是听着就很激动呢。根据传闻,这次的iPhone13不仅刘海面积变……华为云Stack助力广东农信打造金融科技新基座2019年11月,广东省第三代社会保障卡在中山发布,广东农信成为第一家成功对接第三代社保卡业务的银行机构,利用金融服务帮助社保卡一卡畅享102项民生服务,让更多人享受安全便捷的……1500左右的手机怎么选择?要求整理如下:1、价格1500元左右;2、可玩性较强;3、高通骁龙处理器。这个价位的手机就是低端机,价格和高通处理器很好找。至于可玩性上面,一般就是支持……现如今5G需要靠国内运营商保命,局面已经快速恶化自从5G基站开始建设以来,国内的4G网络已经出现大范围的降速和信号不良等问题。对于此问题,国内运营商否认故意降速4G网络,声称是用户使用量太大,而导致的。之后,一位国内运……华为禁令要解禁?白宫邀请英特尔谷歌高通等巨头进行商议北京时间7月22日,据路透社报道,特朗普政府的经济顾问拉里库德洛(LarryKudlow)和财政部长史蒂文姆努钦(StevenMnuchin)将于美国时间周一会见众软件和半导体……百度腾讯联手,字节跳动慌了么昨天下午,大家被一条新闻集体刷屏,新闻来源是路透社,标题言简意赅腾讯有意成为爱奇艺的最大股东。这条重磅新闻立刻点燃来了大家对新冠疫情的倦意,很快,爆料文章、解读问题、分析文章,……雷柏ralemo无线键鼠情人节版开售,玫粉配色超时尚偏偏粉上你,ralemo520怎样的浪漫瞬间,会定格在恋人的目光和镜头里。爱可以有很多种,心动是永远不变的爱的证明。雷柏ralemo新女性无线键鼠情人节版换上新装,心花绽……
已亥杂诗教案【教学目标】1、理解有关龚自珍的文学常识;背诵并默写本诗。在反复诵读的过程中,运用合作赏析的方法,理解诗的含意。体会诗歌所描绘的意境。领悟作者情感,学习作者不……分享用坪坝造句大全用坪坝造句大全1、本文结合茅坪坝期施工情况,对茅坪溪沥青混凝土心墙坝进行了非线性有限元应力应变计算和坝体材料参数反演分析。2、坪坝那边的营森林公园犹如人间仙境,这里……一年级英语教学反思范文英语作为一门语言进行学习,也有着同样的道理。因此在课堂上让学生尽可能的多说英语,减少中文的使用量,是学习英语的必要条件。下面是小编收集整理的一年级英语教学反思范文,希望对您有所……明史王玺传阅读答案王玺,太原左卫指挥同知也。成化初,擢署都指挥佥事,守御黄河七墅。巡抚李侃荐于朝。阿鲁出寇延绥,命充游击将军赴援,战孤山堡,败之。寇再入,战漫天岭、刘宗坞及漫塔、水磨川,皆有功。……数学统计的说课稿说教材:课程标准强调《统计》教学必须从学生熟悉的生活情境和感兴趣的事物出发,低年级要求:让学生经历简单的数据统计过程,使学生在具体的操作活动中,来体验数据的收集、整理、描……数学一年级上我换牙了教学反思范文青岛版一年级教材第九单元第一课时为统计类知识配备的情景图是我换牙了。虽然学生正值换牙期,选材贴近学生的自身实际,但是还有一部分学生不知道掉了几个牙,而且情境图中只体现了换2颗牙……网页链接教案及反思教学目标:让学生掌握网页超级链接的方法和网页过渡效果的设置。教学重点:首页栏目和栏目所在网页超级链接的方法。教学难点:网页返回按钮的设置教学准备:学生制作了我……对有效教学的几点思考针对有效教学这个教学问题,我常常在课前进行思考,在课后反思中能悟出一些道理来。例如对于一年级学生来说,音准是一个摸不着,看不见的东西。根据低年级儿童大脑直觉能力强的特点,我设计……遗留的造句遗留拼音【注音】:yiliu遗留解释【意思】:(以前的事物或现象)继续存在;(过去)留下来:的痕迹。遗留造句:1、要做到这一点,他们必须克服苏伊士……第2单元第4章生物体的组成第2单元第4章生物体的组成第二节多细胞生物体的组成一、教学目标:知识性目标:1、描述多细胞植物体的结构层次:细胞、组织、器官、个体。2、描述人体的……课文小草和大树教学反思范文课文介绍了英国著名作家夏洛蒂勃朗特逆境成才的故事,记述了夏洛蒂不甘命运的摆布,不懈努力,实现人生价值的典型事迹。在课题的引入时,我设计了两个问题:这是写植物的文章吗?那么……走进腾格里阅读理解及答案走进腾格里(节选)学群这是我第三次走进沙漠。每一次,沙漠总是让我变得跟一个小孩子似的。先是骑在骆驼上往沙漠里走。就这样,沿着沙地的起伏一路走下去,把身后的那个……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网