精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

分布式配置中心服務端如何實時更新?

開發 前端
NotificationControllerV2 得到配置發布的 AppId+Cluster+Namespace 后,會通知對應的客戶端,這樣就從portal到configService 到 client 整個消息通知變化就串起來了。

服務端如何感知更新

我們來看官網提供的一張圖:

1.用戶在Portal操作配置發布。

2.Portal調用Admin Service的接口操作發布。

3.Admin Service發布配置后,發送ReleaseMessage給各個Config Service。

4.Config Service收到ReleaseMessage后,通知對應的客戶端。

上面的流程就是從Portal到ConfigService主要流程,下面我們來看看具體的細節。要知道細節我們要自己動手去調試一把源碼。我們可以照著官網的文檔,自己本地把項目run起來。文檔寫的還是很詳細的,只要按照步驟來都能運行的起來。我們隨便新建一個項目然后去編輯下key,然后打開瀏覽器的F12當我們點擊提交按鈕的時候我們就知道她到底調用了那些接口,有了接口我們就知道了入口剩下的就是打斷點進行調試了。

portal 如何獲取AdminService

根據這個方法我們是不是就可以定位到portal模塊后端代碼的controller。找到對應的controller打開看一看基本沒有什么業務邏輯。

然后portal緊接著就是去調用adminService了。

根據上圖我們就可以的方法我們就可以找到對應的adminService了,portal是如何找到對應的adminService服務的,因為adminService 是可以部署多臺機器,這里就要用到服務注冊和發現了adminService只有被注冊到服務中心,portal才可以通過服務注冊中心來獲取對應的adminService服務了。Apollo 默認是采用eureka來作為服務注冊和發現,它也提供了nacos、consul來作為服務注冊和發現,還提供了一種kubernetes不采用第三方來做服務注冊和發現,直接把服務的地址配置在數據庫。如果地址有多個可以在數據庫逗號分隔。

它提供了四種獲取服務列表的實現方式,如果我們使用的注冊中心是eureka 我們是不是需要通過eureka的api去獲取服務列表,如果我們的服務發現使用的是nacos我們是不是要通過nacos的API去獲取服務列表。。。所以Apollo提供了一個MetaService 層,封裝服務發現的細節,對Portal和Client而言,永遠通過一個Http接口獲取Admin Service和Config Service的服務信息,而不需要關心背后實際的服務注冊和發現組件。就跟我們平時搬磚一樣沒有啥是通過增加一個中間層解決不了的問題,一個不行那就再加一個。所以MetaService提供了兩個接口services/admin 和services/config 來分別獲取Admin Service和Config Service的服務信息。那么Portal 是如何來調用services/admin這個接口的呢?

在 apollo-portal 項目里面com.ctrip.framework.apollo.portal.component#AdminServiceAddressLocator 這個類里面。

  • 這個類在加載的時候會通過MetaService 提供的services/admin 接口獲取adminService的服務地址進行緩存。
  @PostConstruct
public void init() {
allEnvs = portalSettings.getAllEnvs();
//init restTemplate
restTemplate = restTemplateFactory.getObject();

refreshServiceAddressService =
Executors.newScheduledThreadPool(1, ApolloThreadFactory.create("ServiceLocator", true));
// 創建延遲任務,1s后開始執行獲取AdminService服務地址
refreshServiceAddressService.schedule(new RefreshAdminServerAddressTask(), 1, TimeUnit.MILLISECONDS);
}

上面要去MetaService 請求地址,那么MetaService的地址又是什么呢?這個又如何獲取?com.ctrip.framework.apollo.portal.environment#DefaultPortalMetaServerProvider 這個類。

portal 這個模塊說完了,我們接著回到adminService了。通過portal調用adminService的接口地址我們很快可以找到它的入口 AdminService 的實現也很簡單。

  @PreAcquireNamespaceLock
@PostMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items")
public ItemDTO create(@PathVariable("appId") String appId,
@PathVariable("clusterName") String clusterName,
@PathVariable("namespaceName") String namespaceName, @RequestBody ItemDTO dto) {
Item entity = BeanUtils.transform(Item.class, dto);

ConfigChangeContentBuilder builder = new ConfigChangeContentBuilder();
Item managedEntity = itemService.findOne(appId, clusterName, namespaceName, entity.getKey());
if (managedEntity != null) {
throw new BadRequestException("item already exists");
}
entity = itemService.save(entity);
builder.createItem(entity);
dto = BeanUtils.transform(ItemDTO.class, entity);

Commit commit = new Commit();
commit.setAppId(appId);
commit.setClusterName(clusterName);
commit.setNamespaceName(namespaceName);
commit.setChangeSets(builder.build());
commit.setDataChangeCreatedBy(dto.getDataChangeLastModifiedBy());
commit.setDataChangeLastModifiedBy(dto.getDataChangeLastModifiedBy());
commitService.save(commit);

return dto;
}

PreAcquireNamespaceLock 注解

首先方法上有個@PreAcquireNamespaceLock 這個注解,這個根據名字都應該能夠去猜一個大概就是去獲取NameSpace的分布式鎖,現在分布式鎖比較常見的方式是采用redis和zookeeper。但是在這里apollo是采用數據庫來實現的,具體怎么細節大家可以去看看源碼應該都看的懂,無非就是加鎖往DB里面插入一條數據,釋放鎖然后把這個數據進行刪除。稍微有點不一樣的就是如果獲取鎖失敗,就直接返回失敗了,不會在繼續自旋或者休眠重新去獲取鎖。因為獲取鎖失敗說明已經有其他人在你之前修改了配置,只有這個人新增的配置被發布或者刪除之后,其他人才能繼續新增配置,這樣的話就會導致一個NameSpace只能同時被一個人修改。這個限制是默認關閉的需要我們在數據庫里面去配置(ApolloConfigDb的ServiceConfig表)

一般我們應用的配置修改應該是比較低頻的,多人同時去修改的話情況會比較少,再說有些公司是開發提交配置,測試去發布配置,提交和修改不能是同一個人,這樣的話新增配置沖突就更少了,應該沒有必要去配置namespace.lock.switch=true一個namespace只能一個人去修改。

接下來的代碼就非常簡單明了,就是一個簡單的參數判斷然后執行入庫操作了,把數據插入到Item表里面。這是我們新增的配置數據就已經保存了。效果如下:

這時候新增的配置是不起作用的,不會推送給客戶端的。只是單純一個類似于草稿的狀態。

發布配置

接下來我們要使上面新增的配置生效,并且推送給客戶端。同樣的我們點擊發布按鈕然后就能知道對應的后端方法入口。

我們通過這個接口可以直接找到adminService的方法入口。

 public ReleaseDTO publish(@PathVariable("appId") String appId,
@PathVariable("clusterName") String clusterName,
@PathVariable("namespaceName") String namespaceName,
@RequestParam("name") String releaseName,
@RequestParam(name = "comment", required = false) String releaseComment,
@RequestParam("operator") String operator,
@RequestParam(name = "isEmergencyPublish", defaultValue = "false") boolean isEmergencyPublish) {
Namespace namespace = namespaceService.findOne(appId, clusterName, namespaceName);
if (namespace == null) {
throw new NotFoundException(String.format("Could not find namespace for %s %s %s", appId,
clusterName, namespaceName));
}
Release release = releaseService.publish(namespace, releaseName, releaseComment, operator, isEmergencyPublish);

//send release message
Namespace parentNamespace = namespaceService.findParentNamespace(namespace);
String messageCluster;
if (parentNamespace != null) {
messageCluster = parentNamespace.getClusterName();
} else {
messageCluster = clusterName;
}
messageSender.sendMessage(ReleaseMessageKeyGenerator.generate(appId, messageCluster, namespaceName),
Topics.APOLLO_RELEASE_TOPIC);
return BeanUtils.transform(ReleaseDTO.class, release);
}
  • 上述代碼就不仔細展開分析了,感興趣的可以自己斷點調試下我們重點看下releaseService.publish 這個方法,里面有一些灰度發布相關的邏輯,不過這個不是本文的重點,這個方法主要是往release表插入數據。
  • 接下來就是messageSender.sendMessage這個方法了,這個方法主要是往ReleaseMessage表里面插入一條記錄。保存完ReleaseMessage這個表會得到相應的主鍵ID,然后把這個ID放入到一個隊列里面。然后在加載DatabaseMessageSender的時候會默認起一個定時任務去獲取上面隊列里面放入的消息ID,然后找出比這這些ID小的消息刪除掉。發布流程就完了,這里也沒有說到服務端是怎么感知有配置修改了的。

Config Service 通知配置變化

apolloConfigService 在服務啟動的時候ReleaseMessageScanner 會啟動一個定時任務 每隔1s去去查詢ReleaseMessage里面有沒有最新的消息,如果有就會通知到所有的消息監聽器比如NotificationControllerV2、ConfigFileController等,這個消息監聽器注冊是在ConfigServiceAutoConfiguration里面注冊的。NotificationControllerV2 得到配置發布的 AppId+Cluster+Namespace 后,會通知對應的客戶端,這樣就從portal到configService 到 client 整個消息通知變化就串起來了。

總結

這樣服務端配置如何更新的流程就完了。

1.用戶在Portal操作配置發布。

2.Portal調用Admin Service的接口操作發布。

3.Admin Service發布配置后,發送ReleaseMessage給各個Config Service。

4.Config Service收到ReleaseMessage后,通知對應的客戶端”apollo的源碼相對于其他中間件來說還是相對于比較簡單的,比較適合于想研究下中間件源碼,又不知道如何下手的同學 。

責任編輯:武曉燕 來源: java金融
相關推薦

2020-02-10 19:16:52

服務端高并發架構

2019-12-17 11:18:37

高并發分布式架構

2019-09-25 09:01:53

高并發架構分布式

2022-06-13 10:01:36

Apollo攜程框架

2025-03-06 11:30:15

2023-09-04 08:45:07

分布式配置中心Zookeeper

2024-03-18 08:50:20

分布式系統機制

2017-07-28 16:41:53

Spring Clou微服務架構

2021-02-10 09:54:15

分布式NacosApollo

2023-05-29 14:07:00

Zuul網關系統

2018-05-23 15:58:27

Spring Clou微服務架構

2018-07-19 14:58:14

Spring Clou微服務架構

2011-03-28 13:39:45

nagios分布式

2019-10-24 11:17:57

架構運維技術

2021-05-08 06:05:28

分布式數據中心數據中心網絡

2010-08-03 09:59:30

NFS服務

2018-05-23 11:56:51

托管數據中心服務商數據中心

2023-01-12 17:19:49

數據中心

2021-11-08 10:52:02

數據庫分布式技術

2019-10-10 09:16:34

Zookeeper架構分布式
點贊
收藏

51CTO技術棧公眾號

中文字幕不卡三区视频| 国产美女www爽爽爽视频| 精品视频高潮| 色综合久久天天| 日韩免费一区二区三区| www毛片com| 国产精品久久久久久| 欧美一区二区免费观在线| 日本天堂免费a| 艳母动漫在线看| 蜜臀a∨国产成人精品| 欧美大肥婆大肥bbbbb| 中文字幕 日本| 亚洲国产尤物| 亚洲国产一区二区视频| 欧美日韩精品综合| a视频免费在线观看| 亚洲欧美日本国产专区一区| 精品国产一区二区在线| 波多野结衣一区二区三区在线观看| 国产一级淫片免费| 日本中文字幕视频一区| www.亚洲国产| 国产精品日韩专区| 国产无精乱码一区二区三区| 精品国产一区二区三区四区| 精品国产亚洲一区二区三区在线观看| 三年中国国语在线播放免费| 欧美韩日亚洲| 日本一区二区不卡视频| 国产综合色一区二区三区| 亚洲系列第一页| 香蕉久久夜色精品| 欧美激情免费在线| 精品国产视频一区二区三区| 久久av资源| 日韩成人av网址| 91人妻一区二区三区| 欧美电影h版| 精品久久久免费| 99久久精品免费看国产四区| 中文字幕一区二区三区四区欧美| 亚洲国产专区校园欧美| 久久手机免费视频| 国产福利在线导航| 美女少妇全过程你懂的久久| 亚洲精品久久久久久久久久久久久| 奇米777在线| 国产一区二区三区国产精品| 欧美日韩中文字幕精品| 天天操天天爽天天射| 超级碰碰久久| 色综合天天综合在线视频| 色欲色香天天天综合网www| 在线三级中文| 一区二区三区精品视频| 日本女人高潮视频| 性欧美8khd高清极品| 久久9热精品视频| 国产精品亚洲美女av网站| www.久久视频| 免费人成精品欧美精品| 国产精品久久久久久久久久新婚 | 色综合av综合无码综合网站| 99在线视频影院| 午夜精品一区在线观看| r级无码视频在线观看| 免费污视频在线| 亚洲一二三区不卡| 日本韩国欧美在线观看| 日中文字幕在线| 91丨porny丨国产入口| 久久国产手机看片| 男人天堂综合| 激情欧美一区二区三区在线观看| 国产啪精品视频网站| 91久久精品无码一区二区| 精品综合久久久久久8888| 国产有码一区二区| 国产视频一二三四区| 国产成人精品亚洲日本在线桃色| 春色成人在线视频| 午夜影院免费视频| 国产欧美日韩另类视频免费观看| 亚洲国产日韩综合一区| 日本不卡不卡| 亚洲一区视频在线观看视频| 日韩欧美一区二| 日韩在线短视频| 欧美一区二区三区视频在线观看| 亚洲av无一区二区三区久久| 噜噜噜天天躁狠狠躁夜夜精品| 亚洲精品一区二区三区婷婷月| 久久午夜精品视频| 中文字幕一区二区av | 精品国产一区二区亚洲人成毛片 | 国产精品视频3p| 国产视频自拍一区| 国产高清视频免费在线观看| 国产精品草草| 国产成人亚洲综合91| 国产毛片久久久久| 91视频91自| 热这里只有精品| 桃色av一区二区| 亚洲欧美日韩中文播放 | 毛片av在线| 性感美女极品91精品| 午夜免费高清视频| 国产精品毛片视频| 久久精品2019中文字幕| 五月婷婷激情网| 亚洲国内精品| 成人激情视频在线观看| 五月天婷婷在线播放| |精品福利一区二区三区| 欧美日韩成人免费视频| 亚洲青青久久| 亚洲天堂影视av| 精品一区二区三区四| 美腿丝袜在线亚洲一区 | 怡红院亚洲色图| 日韩理论电影中文字幕| 美女av一区二区三区| 亚洲综合成人av| 99精品热视频| 欧美激情亚洲天堂| 欧美黄页免费| 亚洲午夜av久久乱码| 国产一卡二卡在线播放| 国产在线精品免费| 四虎一区二区| 国产精品极品美女在线观看| 精品国产一区久久| 欧美日韩精品亚洲精品| 久久综合综合久久综合| 免费久久久一本精品久久区| 亚洲欧美综合在线观看| 一区二区久久久久| 伊人精品视频在线观看| 日韩成人精品一区| 丝袜美腿亚洲一区二区| 日韩av大片在线观看| 国产ts人妖一区二区| 欧美少妇在线观看| 伊人久久大香线蕉综合影院首页| 国产亚洲a∨片在线观看| 五月婷婷激情网| 91在线看国产| 国产h视频在线播放| eeuss鲁片一区二区三区| 亚洲精品福利在线| 久久免费公开视频| 国产一区二区不卡| 国产精品12p| 国产一区二区三区视频在线| 久久精品色欧美aⅴ一区二区| 一级爱爱免费视频| 国产精品久久久久aaaa| 中日韩av在线播放| 国产精品毛片久久| 亚洲www在线| 天天在线女人的天堂视频| 久久久精品国产免大香伊| 日韩激情视频一区二区| 哺乳一区二区三区中文视频| 隔壁老王国产在线精品| 少妇无码一区二区三区| 懂色av中文一区二区三区天美| 大地资源二中文在线影视观看| 国产日韩欧美| 日韩av影视| 欧美成人高清视频在线观看| 久久久国产精品x99av| 国产成人三级在线播放 | 亚洲人成网7777777国产| 特黄一区二区三区| 精品在线免费观看| 人妻无码一区二区三区四区| 99re热精品视频| 7777精品视频| 在线免费观看黄| 欧美一级日韩免费不卡| 精品无码av在线| 91小视频免费观看| www.日本一区| 国内激情久久| 欧美一区二区影视| 色综合视频一区二区三区44| 欧美猛男性生活免费| 午夜福利视频一区二区| 在线精品视频小说1| 成年人午夜剧场| 97se狠狠狠综合亚洲狠狠| 日本爱爱免费视频| 黄色av成人| 热re99久久精品国产99热| 99tv成人影院| 欧美一性一乱一交一视频| 日本在线视频站| 亚洲电影第1页| 一二三四区在线| 精品久久久久久久大神国产| 精品丰满少妇一区二区三区| 成人午夜精品一区二区三区| 激情综合网俺也去| 亚洲午夜精品久久久久久app| 日韩中文不卡| 国产精品对白| 91精品国产自产在线观看永久| 国产v日韩v欧美v| 日韩一区二区三区xxxx| 亚洲色图欧美视频| 欧美videos大乳护士334| 中文字幕 国产精品| 午夜久久久久久| 亚洲av无码一区二区三区在线| 久久在线观看免费| 日本中文字幕有码| 蜜臀av一级做a爰片久久| 人妻久久久一区二区三区| 日韩欧美三级| 秋霞毛片久久久久久久久| jizzjizzjizz欧美| 成人免费看黄网站| 91大神在线观看线路一区| 97国产精品视频| 色黄网站在线观看| 久久天堂av综合合色| www.亚洲免费| 亚洲新声在线观看| 嫩草在线播放| 亚洲欧美国产日韩天堂区| 蜜臀久久精品久久久久| 日韩午夜av一区| 国产美女免费视频| 在线不卡的av| 亚洲成人日韩在线| www.亚洲国产| 中文字幕在线永久| 成人中文字幕合集| 免费观看污网站| 国产精品一区久久久久| www.污网站| 久久99精品久久久| 日本在线播放一区二区| 日本欧美加勒比视频| mm1313亚洲国产精品无码试看| 亚洲巨乳在线| 黄色免费视频大全| 在线综合视频| 色综合电影网| 欧美女优在线视频| 日韩欧美一区二区三区久久婷婷| 窝窝社区一区二区| 精品日韩美女| 欧美日韩123| 丝袜足脚交91精品| 五月精品视频| 精品一区二区三区毛片| 99热精品久久| 国产资源第一页| 亚洲黄色三级| 18禁免费无码无遮挡不卡网站| 国产成人黄色| 五月天色一区| 91久久电影| www.欧美黄色| 亚洲一区视频| 亚洲 欧美 另类人妖| 久久国产精品99久久久久久老狼 | 国产一级片免费| 午夜精品久久久久久久久久久| 特黄视频免费看| 欧美中文字幕亚洲一区二区va在线| 波多野结衣影片| 91 com成人网| 三级在线观看网站| 国产亚洲欧美另类中文| 午夜视频在线看| 欧美激情一级欧美精品| 日本黄色免费在线| 国产精品露脸自拍| 伊人久久精品| 国产一区二区三区无遮挡 | 久久久久免费看| 精品成人av一区| 中文在线观看免费高清| 日韩欧美中文一区| 猫咪在线永久网站| www.日韩视频| 欧美13videosex性极品| 国产精品69精品一区二区三区| www.久久热| 久久久精品有限公司| 欧美成人直播| 国产 福利 在线| 激情五月播播久久久精品| 国产黑丝在线观看| 国产精品伦一区二区三级视频| 久久综合亚洲色hezyo国产| 色哟哟一区二区在线观看| 国产精品久久久久久免费播放| 日韩av在线网址| 国产丝袜在线| 国产视频亚洲精品| 高h视频在线观看| 日韩在线观看免费高清完整版| av女在线播放| 91亚洲va在线va天堂va国| 香蕉久久夜色精品国产更新时间| 经典三级在线视频| 国产日韩欧美一区在线| 亚洲制服在线观看| 国产婷婷精品av在线| 久久无码精品丰满人妻| 欧美日韩一区三区| 欧美偷拍视频| 久久久之久亚州精品露出| 欧美黄色a视频| 日韩中文一区| 久久久久网站| 亚洲黄色免费在线观看| 亚洲美女区一区| 在线免费观看视频网站| 亚洲精品自拍偷拍| a级大胆欧美人体大胆666| 91久久久久久久久久久| 波多野结衣在线观看一区二区| 日韩网址在线观看| 成人h动漫精品一区二区 | xfplay精品久久| 国产精品.www| 精品国偷自产国产一区| 国产网站在线免费观看| 成人av电影天堂| 欧美高清在线| 日本免费色视频| 中文成人av在线| 中文在线最新版天堂| 亚洲视频在线免费看| 在线看片福利| 欧美成熟毛茸茸复古| 亚洲伦伦在线| 黄色网址在线视频| 五月婷婷欧美视频| 少妇av在线播放| 26uuu亚洲国产精品| 久久av国产紧身裤| 黄色一级片播放| www激情久久| 中文字幕在线观看视频免费| 欧美日韩精品欧美日韩精品一 | 国产精品毛片aⅴ一区二区三区| 亚洲ai欧洲av| 日韩精品一级二级| 中文字幕1234区| 亚洲视频免费看| aaaa一级片| 高清欧美性猛交| 一个色免费成人影院| 一本久道中文无码字幕av| 国产清纯在线一区二区www| 做爰视频毛片视频| www.日韩免费| 99re91这里只有精品| 男人操女人逼免费视频| 久久久久久免费毛片精品| 日韩xxx视频| 久久精品视频在线观看| 亚洲视频国产| 播放灌醉水嫩大学生国内精品| 久久精品一区四区| 又骚又黄的视频| 欧美高清视频免费观看| 红杏aⅴ成人免费视频| 国产成人精品视频ⅴa片软件竹菊| 欧美国产欧美综合| 精品女同一区二区三区| 性欧美办公室18xxxxhd| 精品国产乱码久久久久久蜜坠欲下| 污污动漫在线观看| 一区二区三区在线观看欧美| 头脑特工队2在线播放| 国产精品最新在线观看| 欧美日韩综合| 欧美激情aaa| 国产精品一站二站| 亚洲欧美国产va在线影院| 日韩美女在线看免费观看| 亚洲精品中文综合第一页| 国产福利一区在线观看| 亚洲免费黄色网址| zzjj国产精品一区二区| 国产成人精品亚洲线观看| 妓院一钑片免看黄大片| 一区二区三区精品视频| 高清中文字幕一区二区三区| 91传媒视频在线观看| 日韩欧美视频专区|