精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日本在线精品视频| 在线综合亚洲欧美在线视频| 国产精品免费一区二区| 国产精品suv一区二区三区| 亚洲成a人片77777在线播放| 欧美三级中文字幕| 九九热只有这里有精品| 国产露出视频在线观看| 国产麻豆9l精品三级站| 欧美亚洲视频一区二区| 神马午夜精品91| 欧美亚洲色图校园春色| 欧美另类久久久品| 青青青在线播放| 羞羞视频在线观看免费| 久久综合久久99| 99re国产| 91精品中文字幕| 欧美一级一区| 欧美黑人又粗大| 国精产品久拍自产在线网站| 婷婷精品视频| 欧美mv日韩mv国产网站app| 国产高清视频网站| 秋霞伦理一区| 亚洲高清在线精品| 黄色高清视频网站| h视频网站在线观看| 99视频超级精品| 99三级在线| 国产精品-色哟哟| 欧美一区二区三区少妇| 婷婷久久免费视频| 91久久精品一区二区二区| 野外做受又硬又粗又大视频√| 在线观看a视频| 国产农村妇女精品| 欧美h视频在线| 午夜在线观看视频18| 从欧美一区二区三区| 92国产精品视频| 在线观看免费黄色小视频| 久久精品综合| 日本成人黄色片| 国产精品xxxx喷水欧美| 亚洲视频观看| 欧美肥臀大乳一区二区免费视频| 四虎影院中文字幕| 91超碰国产精品| 久久精品视频网站| 五月天免费网站| 97精品国产一区二区三区| 尤物yw午夜国产精品视频明星| 亚洲成人网在线播放| 中文有码一区| 亚洲系列中文字幕| 日本人亚洲人jjzzjjz| 精品视频99| zzijzzij亚洲日本成熟少妇| 国产又黄又粗又猛又爽的| 99久久www免费| 久久久国产成人精品| 老熟妇高潮一区二区三区| 亚洲精品一区二区在线看| 久久在线视频在线| 成人观看免费视频| 亚洲精品免费观看| 秋霞午夜一区二区| 成人黄色免费网| 精品亚洲欧美一区| 97se国产在线视频| 日韩一级片免费在线观看| 成人黄色国产精品网站大全在线免费观看| 成人综合av网| 欧美成人综合在线| 欧美激情一区二区| 波多野结衣与黑人| 久久人妻精品白浆国产| 亚洲AV成人无码一二三区在线| xf在线a精品一区二区视频网站| 欧美精品成人一区二区在线观看| 国产三区四区在线观看| 中文字幕中文乱码欧美一区二区 | 久久久久久av| 天天爽夜夜爽夜夜爽精品| 日本亚洲最大的色成网站www| 国产精品视频播放| 性做久久久久久久| 国产女主播一区| 久久香蕉视频网站| 欧美专区福利免费| 日韩欧美卡一卡二| 日韩av在线看免费观看| 天天天综合网| 欧美在线国产精品| 国产精品人人爽| 91蜜桃免费观看视频| 一区二区三区免费看| 98色花堂精品视频在线观看 | 国产wwwwwww| 91免费在线看| 国产免费xxx| 第84页国产精品| 日韩一二在线观看| 国产又粗又猛又爽又黄av| 亚洲视频一区| 国产一区二区色| 三级毛片在线免费看| 亚洲免费视频成人| 天天干在线影院| 久久婷婷国产| 欧美日韩国产成人在线| 成人黄色片在线观看| 91在线看国产| 97视频在线免费| 国产电影一区二区| 一区二区三区四区精品| 亚洲伊人成人网| 国产91富婆露脸刺激对白| 中文字幕99| 一呦二呦三呦精品国产| 亚洲第一中文字幕| 欧美片一区二区| 粉嫩av一区二区| 麻豆精品在线观看| 91久久久一线二线三线品牌| 成年人视频网站在线| 欧美日韩国产精品| 国产在线观看免费播放| 91精品综合| 国产日本欧美视频| 91精品专区| 欧美视频一区二区| www.99热| 麻豆国产欧美日韩综合精品二区 | 亚洲va韩国va欧美va| 在线观看av免费观看| 日本道不卡免费一区| 国产精品第一区| 成人精品一区| 色哦色哦哦色天天综合| 美女爆乳18禁www久久久久久| 亚洲麻豆一区| 国产精品一区=区| 免费观看在线午夜影视| 欧美精品1区2区| 日韩激情小视频| 国产乱子伦一区二区三区国色天香| 一区二区三视频| 国产日韩欧美中文在线| 久久国产精品亚洲| 精品国产av 无码一区二区三区| 中文字幕五月欧美| 成人性生交视频免费观看| 亚洲综合中文| 国产精品久久精品国产| 国产乱码在线| 日韩成人中文字幕| 男人天堂2024| 中文字幕第一页久久| 一级黄色录像在线观看| 欧美在线免费一级片| 国产厕所精品在线观看| 高清毛片在线观看| 亚洲深夜福利视频| 在线中文字幕网站| 亚洲欧美激情小说另类| 少妇献身老头系列| 99精品热视频只有精品10| 久久综合狠狠综合久久综青草 | 韩国久久久久| 精品午夜一区二区| 天然素人一区二区视频| 久久久97精品| 日韩在线观看视频一区| 色狠狠色狠狠综合| chinese全程对白| 国产福利电影一区二区三区| 亚洲美免无码中文字幕在线| 国产在视频线精品视频www666| 91精品视频在线播放| 欧美1—12sexvideos| 亚洲人成网站免费播放| 国产又粗又黄又爽视频| 午夜欧美视频在线观看| 少妇av片在线观看| 国产盗摄精品一区二区三区在线| 久久免费视频3| 91欧美大片| 精品免费二区三区三区高中清不卡| 欧美freesex| 欧美巨大黑人极品精男| 欧美亚洲日本| 精品欧美一区二区在线观看| 日韩三级一区二区| 亚洲精品国产精华液| 加勒比综合在线| 国产成人免费在线观看| 国产精品天天av精麻传媒| 91精品啪在线观看国产18 | 国产三区四区在线观看| 欧美精品一区二区三区蜜桃视频| 中文字幕人成人乱码亚洲电影| 亚洲一区二区三区四区在线观看| 欧美午夜激情影院| 播五月开心婷婷综合| 午夜一级免费视频| 久久综合五月| 激情五月宗合网| 女人色偷偷aa久久天堂| 亚洲一区三区| 精品国产99| 国产一区二区三区四区五区在线 | 美国欧美日韩国产在线播放| 国产中文字幕视频在线观看| 中文字幕一区二区三区乱码图片| 日本视频一区二区不卡| 任你躁在线精品免费| 国产精品二区在线| 国内不卡的一区二区三区中文字幕| 国产成人福利网站| h片在线观看视频免费免费| 超碰91人人草人人干| 国产黄色在线播放| 亚洲美女在线视频| 天堂中文在线观看视频| 日韩精品一区二区三区在线观看| 91 中文字幕| 欧美日韩久久久| 老熟妇一区二区三区| 色欧美片视频在线观看在线视频| 精品成人久久久| 亚洲一二三专区| 国产一级生活片| 亚洲成人精品一区二区| 久久久久久久久久久网| 樱花草国产18久久久久| 久久久久亚洲av无码专区体验| 亚洲欧美日韩在线| 手机在线中文字幕| 最新热久久免费视频| 欧美一级片在线视频| 成人免费在线播放视频| 亚洲av无一区二区三区| 国产精品久久久久久久裸模| 亚洲一级理论片| 日韩一区在线播放| 天海翼在线视频| 亚洲乱码中文字幕| 国产在线视频二区| 午夜欧美在线一二页| 天天操夜夜操视频| 色综合久久综合网| 艳妇乳肉豪妇荡乳av无码福利| 91久久线看在观草草青青| 国产精品无码一区| 欧美精品一二三四| 性少妇videosexfreexxx片| 日韩欧美国产小视频| 少妇人妻精品一区二区三区| 日韩成人av在线| 国产在线观看精品一区| 三级精品视频久久久久| 天使と恶魔の榨精在线播放| 久久久久久久久久国产| 免费在线小视频| 国产精品91视频| 一区在线不卡| 国产精品免费一区二区三区在线观看| 欧美精品中文| 亚洲欧美丝袜| 欧美视频在线观看| 国产精品视频一区二区三区四区五区| 日韩中文字幕一区二区三区| 色天使在线观看| 成人av网站大全| 久久av无码精品人妻系列试探| 国产精品传媒入口麻豆| 久久伊人成人网| 在线欧美日韩国产| 国产人妖一区二区三区| 精品无码久久久久久国产| 一广人看www在线观看免费视频| 欧美猛交免费看| 日韩成人亚洲| 超碰97在线资源| 狠狠做深爱婷婷综合一区| 91大学生片黄在线观看| 久久国产精品99国产| 色婷婷综合在线观看| 91香蕉视频黄| 国产免费美女视频| 黄色成人av在线| 国产乱色精品成人免费视频| 日韩激情在线视频| 韩国av网站在线| 日韩av免费看| 国产ts一区| 在线日韩av永久免费观看| 夜夜夜久久久| 亚洲在线观看网站| 国产丝袜欧美中文另类| 国语对白一区二区| 在线观看91精品国产麻豆| 青青青草原在线| 色综合久久88| 懂色av色香蕉一区二区蜜桃| 免费国产一区二区| 尤物精品在线| 人妻换人妻仑乱| 中文字幕一区二区三区四区不卡| 中文字幕视频网| 欧美精品一区二区三区蜜桃 | 日韩精品免费一区二区三区| 日韩av三级在线| 国产馆精品极品| 亚洲欧洲综合网| 91国偷自产一区二区使用方法| 欧美熟妇交换久久久久久分类| 久久久国产视频| 亚洲a成人v| 婷婷四月色综合| 久久免费国产| 亚洲第一成人网站| 午夜精彩视频在线观看不卡| www.xxxx国产| 欧美日本在线视频中文字字幕| 欧美黄页免费| 亚洲欧美日韩精品久久久| 久久精品天堂| 亚洲第一香蕉网| 一本色道a无线码一区v| 五月激情丁香婷婷| 97精品国产91久久久久久| 中文字幕日韩在线| 嫩草影院中文字幕| 国产不卡一区视频| 亚洲综合网在线| 欧美精品乱码久久久久久| 香蕉视频国产在线观看| 国产精品久久久久久搜索| 国模吧精品视频| 男人的天堂日韩| 国产欧美va欧美不卡在线| 中文字幕一区二区久久人妻| 国产亚洲精品久久久优势| jizz亚洲女人高潮大叫| 亚洲免费视频一区| 极品销魂美女一区二区三区| 国产中文av在线| 91精品国产一区二区三区蜜臀| 中文字幕在线观看网站| 亚洲综合日韩在线| 国内精品美女在线观看| www.555国产精品免费| 精品久久久国产| 你懂的在线看| 国产日韩精品在线| 一区二区不卡| 亚洲熟女一区二区| 欧美丝袜第一区| 1769在线观看| 亚洲自拍偷拍视频| 国产欧美三级| 国产传媒国产传媒| 91麻豆精品久久久久蜜臀 | 欧洲亚洲妇女av| 欧美gayvideo| 26uuu国产| 欧美日韩性视频在线| av在线天堂| 超碰97网站| 久久久精品五月天| 麻豆精品国产免费| 日韩成人黄色av| 精品国产黄a∨片高清在线| 91传媒免费视频| 久久久.com| av综合在线观看| 日本道色综合久久影院| 手机在线一区二区三区| 精品久久久久一区二区| 在线观看欧美日本| 日本一级理论片在线大全| 麻豆av一区二区| 国内精品国产三级国产a久久| 久久精品无码人妻| 一区二区国产精品视频| 国产在线视频欧美一区| 人妻有码中文字幕| 亚洲色欲色欲www在线观看| 天堂中文在线视频| 91精品久久久久久久久| 亚洲激情另类| 亚洲精品自拍视频在线观看| 精品国产伦理网| 色综合久久久| 一本大道熟女人妻中文字幕在线| 亚洲欧美综合在线精品| 天堂av中文在线资源库|