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

通過 Pulsar 源碼徹底解決重復消費問題

開發 前端
如果業務執行耗時,等到消息從那個單線程的無界隊列中取出來的時候很有可能已經過了 ackTimeou 的時間,從而導致了超時重發。

背景

最近真是和 Pulsar 杠上了,業務團隊反饋說是線上有個應用消息重復消費。

圖片

而且在測試環境是可以穩定復現的,根據經驗來看一般能穩定復現的都比較好解決。

定位問題

接著便是定位問題了,根據之前的經驗讓業務按照這幾種情況先排查一下:

圖片

通過排查:1,2可以排除了。

  1. 沒有相關日志
  2. 存在異常,但最外層也捕獲了,所以不管有無異常都會 ACK。

第三個也在消費的入口和提交消息出計算了時間,最終發現都是在2s左右 ACK 的。

偽代碼如下:

Consumer consumer = client.newConsumer()
.subscriptionType(SubscriptionType.Shared)
.enableRetry(true)
.topic(topic)
.ackTimeout(30, TimeUnit.SECONDS)
.subscriptionName("my-sub")
.messageListener(new MessageListener<byte[]>() {
@SneakyThrows
@Override
public void received(Consumer<byte[]> consumer, Message<byte[]> msg) {
log.info("msg_id{}",msg.getMessageId().toString());
TimeUnit.SECONDS.sleep(2);
consumer.acknowledge(msg);
}
})
.subscribe();

那這就很奇怪了,因為代碼里配置的 ackTimeout 是 30s,理論上來說是不會存在超時導致消息重發的。

為了排除是否是超時引起的,直接將業務代碼注釋掉了,等于是消息收到后立即就 ACK,經過測試發現這樣確實就沒有重復消費了。

為了再次確認是不是和 ackTimeout 有關,直接將 .ackTimeout(30, TimeUnit.SECONDS) 注釋掉后測試,發現也沒有重復消費了。

確認原因

既然如此那一定是和這個配置有關了,但看代碼確實沒有超時,為了定位具體原因只有去看 client 的源碼了。

這里簡單梳理下消息的消費的流程:

  1. 根據 .receiverQueueSize(1000) 的配置,默認情況下 broker 會直接給客戶端推送 1000 條消息。
  2. 客戶端將這 1000 條消息保存到內部隊列中。
  3. 如果使用同步消費 receive()? 時,本質上就是去 take 這個內部隊列。
  4. 如果是使用的是 messageListener? 異步消費并配置 ackTimeout?,每當從隊列里獲得一條消息后便會把這條消息加入 UnAckedMessageTracker? 內部的一個時間輪中,定時檢測頂部是否存在消息,如果存在則會觸發重新投遞。4.1 加入時間輪后,異步調用我們自定義的事件,這個異步操作是提交到一個無界隊列中由單個線程依次排隊執行(這點是這次問題的關鍵)
  5. 業務 ACK 的時候會從時間輪中刪除消息,所以如果消息 ACK 的足夠快,在第四步就不會獲取到消息進行重新投遞。

圖片

整體流程如上圖,代碼細節如下圖:

圖片

所以問題的根本原因就是寫入時間輪(UnAckedMessageTracker)開始倒計時的線程和回調業務邏輯的不是同一個線程。

如果業務執行耗時,等到消息從那個單線程的無界隊列中取出來的時候很有可能已經過了 ackTimeou 的時間,從而導致了超時重發。

也就是用戶所理解的 ackTimeout 周期(應該進入回調時候開始計時)和 SDK 實現的不一致造成的。

之后我再次確認同樣的代碼換為同步消費是沒有問題的,不會導致重復消費:

while (true) {
Message msg = consumer.receive();
log.info(
"consumer Message received: " + new String(msg.getData()) + msg.getMessageId().toString());
TimeUnit.SECONDS.sleep(2);
consumer.acknowledge(msg);
}

查看代碼后發現同步代碼的獲取消息和加入 UnAckedMessageTracker 時間輪是同步的,也就不會出現超時的問題。

圖片

總結

所以其實 是messageListener? 異步消費的 ackTimeout 的語義是有問題的,需要將加入 UnAckedMessageTracker 處移動到回調函數中同步調用。

我查看了最新的 2.11.x 版本的代碼依然沒有修復,正準備提個 PR 切換到 master 時才發現已經有相關的 PR 了,只是還沒有發版。

修復的背景和思路也是類似的,具體參考:

https://github.com/apache/pulsar/pull/18911

其實業務中并不推薦使用 ackTimeout 這個配置了,不好預估時間從而導致超時,而且我相信大部分業務配置好 ackTImeout 后直到后續出問題的時候才想起來要改。所以干脆一開始就不要使用。

在 go 版本的 SDK 中直接廢棄掉了這個參數,推薦使用 nack API 替換。

圖片

責任編輯:武曉燕 來源: crossoverJie
相關推薦

2009-11-27 10:31:02

GPRS路由

2021-12-03 12:15:01

QT中文亂碼Windows

2025-09-29 01:55:00

2025-03-03 00:13:50

2010-01-04 15:05:53

2023-11-28 08:36:16

Spring中Body讀取

2010-01-11 18:05:24

VB.NET窗體繼承

2025-06-17 06:40:45

DockerDocker鏡像

2010-01-14 10:19:05

2009-12-25 09:39:08

ADSL MODEM

2025-08-07 02:45:00

2009-11-24 19:50:10

2009-12-03 18:45:41

2022-10-08 23:55:58

iOS蘋果開發

2022-05-31 09:01:13

GitHub工具安全

2009-12-21 17:20:19

2009-12-04 16:25:24

2020-09-28 14:41:24

Event Loop

2009-12-03 16:54:04

無線寬帶路由器

2024-11-04 10:05:00

AI模型
點贊
收藏

51CTO技術棧公眾號

视频一区视频二区欧美| 西游记1978| 成人精品视频在线播放| 亚洲黄色小说视频| 色屁屁www国产馆在线观看| 国产一区二区三区天码| 亚洲综合精品自拍| 成人欧美在线视频| 久久精品无码一区| 99久久亚洲国产日韩美女| 91在线云播放| 97福利一区二区| 91亚洲一线产区二线产区| 黄网页免费在线观看| 美国十次了思思久久精品导航| 亚洲欧美一区二区精品久久久| www.99热这里只有精品| 丰满熟妇乱又伦| 欧美成人69av| 欧美一区二区三级| 麻豆md0077饥渴少妇| 国产精品久久久久久免费免熟| 精品视频日韩| 欧美主播一区二区三区| 日韩久久久久久久| 成人免费一级片| 狠狠色狠狠色综合婷婷tag| 欧美一区二区三区免费观看视频| 无码人妻丰满熟妇区96| 婷婷在线免费观看| 999国产精品| 在线成人免费视频| 免费在线精品视频| 艳妇乳肉豪妇荡乳av| 操欧美老女人| 欧美二区乱c少妇| 日韩视频在线免费看| 电影在线一区| 精东粉嫩av免费一区二区三区| 日韩一级黄色av| 被黑人猛躁10次高潮视频| 欧美家庭影院| 91麻豆成人久久精品二区三区| 欧美亚州一区二区三区| 干b视频在线观看| 精品午夜电影| 在线一区二区观看| 国产精品专区在线| 亚洲第一图区| 亚洲视频一区二区在线| 成人情视频高清免费观看电影| 亚洲国产精品午夜在线观看| 神马香蕉久久| 欧美日韩国产成人在线免费| 青青草综合视频| 国产精品免费观看| 国产日韩欧美a| 亚洲一区二区三区777| 亚洲精品www久久久久久| 欧美日韩激情在线一区二区三区| 国产手机视频精品| 97超碰人人爽| 华人av在线| 国产精品人妖ts系列视频| 99精品国产高清在线观看| 中文字幕激情小说| 久久久五月天| 亚洲精品自在久久| 美女脱光内衣内裤| 一区二区三区在线资源| 一本大道av一区二区在线播放| 中文字幕一区二区三区在线乱码 | 亚洲伊人成综合成人网| 一区二区三区www污污污网站| 欧美91大片| 欧美日韩高清区| 精品丰满少妇一区二区三区| av成人男女| 日本大香伊一区二区三区| 中文有码久久| av免费在线免费| 国产色一区二区| 亚洲女人毛片| 黄色片在线播放| 成人精品国产一区二区4080| 国产欧美日韩视频| 丁香六月婷婷综合| 天堂午夜影视日韩欧美一区二区| 欧美激情按摩在线| 天天看天天摸天天操| 深爱激情综合| 日韩精品久久久久久福利| 黑人巨大猛交丰满少妇| 久久精品色播| 在线视频欧美日韩精品| 成人片黄网站色大片免费毛片| 精品理论电影| 欧美日本亚洲视频| 五月婷婷激情视频| 国产精品婷婷| 91精品国产高清久久久久久| 国产一级免费av| 欧美一区高清| 2019av中文字幕| 一本色道久久综合无码人妻| 成人污污视频在线观看| ts人妖另类在线| 欧美美女色图| www亚洲一区| 小说区视频区图片区| 日本中文字幕在线看| 国产午夜精品福利| 精品久久久无码人妻字幂| 在线观看免费视频你懂的| 欧美性猛交xxxx免费看| 国产免费一区二区三区视频| 天堂av在线| 欧美午夜精品久久久久久久| 天天摸天天舔天天操| 亚洲福利影视| 欧美一区二区三区免费在线看 | 久久天天躁狠狠躁夜夜躁| 亚洲av熟女国产一区二区性色| 九九综合在线| 久久久噜噜噜久久久| 日韩精品国产一区二区| 国内精品自线一区二区三区视频| 欧美日韩精品一区| 超碰97在线免费观看| 国产精品美女久久久久aⅴ国产馆| 免费毛片网站在线观看| 欧美成人性网| 欧美美女网站色| 精品无码在线观看| 亚洲永久在线| 国产男女猛烈无遮挡91| 国产免费的av| 成人avav影音| 国产成人在线小视频| 波多野结衣中文字幕久久| 午夜激情一区二区三区| 黄色高清无遮挡| 欧美aaaaa级| 色哟哟网站入口亚洲精品| 久草视频免费在线| 天堂资源在线中文精品| 狼狼综合久久久久综合网| 天堂中文8资源在线8| 在线一区二区观看| 日韩一级av毛片| 三级精品在线观看| 91精品国产综合久久久久久丝袜| 六月丁香色婷婷| 亚洲综合图片区| 免费看黄色片的网站| 国产成人久久| 国产成人精品av在线| 国产精品一区二区黑人巨大 | 久久伊人资源站| 美女扒开腿让男人桶爽久久软| 日韩欧美视频一区二区三区| 久久久久久婷婷| 一区二区三区成人精品| 国产精品丝袜久久久久久高清| 国产午夜在线观看| 欧美视频一区二区在线观看| 超碰caoprom| 国产欧美一级| 五码日韩精品一区二区三区视频| 欧美一级在线| 欧美日韩国产成人在线观看| 午夜福利一区二区三区| 欧美亚洲图片小说| 91香蕉视频在线播放| 国产成人av一区二区| 亚洲欧美国产一区二区| 成人51免费| 亚洲性视频网址| 黄色激情视频在线观看| 99久久精品一区二区| 干日本少妇视频| 精品少妇一区| 国产精品7m视频| 成人免费在线| 欧美人狂配大交3d怪物一区 | 亚洲午夜在线观看视频在线| 欧美伦理片在线看| 日本午夜精品| 国产精品日韩在线一区| 视频二区在线| 亚洲国产一区视频| 玖玖爱在线观看| 国产情侣久久| 亚洲一区二区三区欧美| 亚洲欧美在线成人| 亚洲性夜色噜噜噜7777| 国产片高清在线观看| 五月天婷婷综合| 中文字幕天堂av| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲av成人精品日韩在线播放| 91久久线看在观草草青青| 劲爆欧美第一页| 国产精品欧美一区喷水| 亚洲婷婷在线观看| 久久99蜜桃精品| 一本一本a久久| 欧美18xxxx| 亚洲综合大片69999| 亚洲人免费短视频| 97国产在线观看| 黄网站视频在线观看| 亚洲欧美国产日韩天堂区| av观看在线免费| 亚洲男同性视频| 国产亚洲色婷婷久久| 欧美~级网站不卡| 小说区图片区图片区另类灬| 青青久久av| 不卡一卡2卡3卡4卡精品在| 国产福利一区二区三区在线播放| 97免费视频在线播放| 超碰porn在线| 日韩亚洲综合在线| av一本在线| 7777精品伊人久久久大香线蕉| 青花影视在线观看免费高清| 久久嫩草精品久久久精品| 欧美视频第三页| 影音先锋亚洲一区| 免费日韩av电影| 国产乱人伦丫前精品视频| …久久精品99久久香蕉国产| 欧美精品videosex| 欧美成人全部免费| 五月婷婷综合久久| 精品成人免费观看| 亚洲国产成人精品女人久久| 国产精品久久三| 舐め犯し波多野结衣在线观看| 久久综合成人精品亚洲另类欧美 | 欧美风情在线观看| av毛片在线免费| 欧美另类69精品久久久久9999| 久操视频在线观看| 久久国产精品99国产精| 污污网站在线看| 欧美大片在线影院| 国产网红女主播精品视频| 久久乐国产精品| 福利在线免费视频| 91国自产精品中文字幕亚洲| f2c人成在线观看免费视频| 亚洲男人天堂久| 欧美巨乳在线| 中文字幕欧美日韩在线| 天堂地址在线www| 欧美床上激情在线观看| 男女视频在线| 欧美一区二区三区四区在线| 欧美无毛视频| 国产欧美精品一区二区三区介绍| 四虎国产精品成人免费影视| 亚洲www视频| 国产精品1luya在线播放| 极品校花啪啪激情久久| 日韩伦理一区二区| 亚洲在线免费观看| 国产伦理久久久久久妇女| 久久久久天天天天| 亚洲超碰在线观看| 精品国产一区二区三区四区精华| 香蕉久久夜色精品国产使用方法 | 亚洲国产综合视频| 国内精品视频一区二区三区八戒| 中文字幕 欧美日韩| 国产高清成人在线| 在线看免费毛片| 国产伦精品一区二区三区视频青涩| 免费观看成人网| 蜜臀av性久久久久蜜臀aⅴ四虎 | 色悠久久久久综合先锋影音下载 | 国产成人三级| a级网站在线观看| 一区精品久久| 亚洲综合日韩欧美| 久久精品观看| 免费成人午夜视频| 免费欧美日韩国产三级电影| 能看毛片的网站| 久久久久久久久久久久久女国产乱| 美女扒开腿免费视频| 久久精品日产第一区二区三区高清版| 乱老熟女一区二区三区| 国产午夜精品在线观看| √天堂中文官网8在线| 五月婷婷色综合| 一本久道久久综合无码中文| 亚洲精品大尺度| 天天干,天天操,天天射| 中文字幕av一区| av免费不卡| 成人两性免费视频| 亚欧洲精品视频在线观看| 99热都是精品| 日本va欧美va精品发布| 天堂av在线网站| 日韩av高清在线观看| 亚洲成人激情小说| 中文子幕无线码一区tr| 亚洲不卡的av| 欧美日韩性视频| 91午夜精品亚洲一区二区三区| 制服丝袜国产精品| 第三区美女视频在线| 国内精品视频一区| 精品国产亚洲日本| 99国产在线| 欧美第一精品| 免费观看成人网| 久久综合视频网| 国产五月天婷婷| 日韩精品中文字幕一区二区三区| 亚洲成人久久精品| 亚洲精品白浆高清久久久久久| av网站网址在线观看| 国产欧美在线视频| 精品国产精品久久一区免费式 | 男人的午夜天堂| 亚洲欧美aⅴ...| 在线观看国产精品视频| 亚洲性线免费观看视频成熟| 人在线成免费视频| 国内精品一区二区| 国内精品视频在线观看| 欧美成人一区二区在线观看| 粉嫩久久99精品久久久久久夜| 亚洲国产123| 欧美精品自拍偷拍动漫精品| 成年在线电影| 国产精品美女免费视频| japanese国产精品| 精品久久久久久中文字幕2017| 久久久蜜桃精品| 黄色片视频免费| 一区二区三区黄色| 中文字幕免费高清电视剧网站在线观看| 国产精品久久久久久久久久小说| 欧美人与牛zoz0性行为| 999精品网站| 中文字幕欧美日韩一区| 18国产免费视频| 欧美精品一区二区三区高清aⅴ| 丝袜在线观看| 国产精品一区二区你懂得| 青青草国产免费一区二区下载| 欧美黑人又粗又大又爽免费| 国产日韩欧美精品一区| 中文字幕人妻丝袜乱一区三区 | 色在线免费视频| 久久精品免费电影| 亚洲校园激情春色| 99se婷婷在线视频观看| 亚洲激情网址| 中文字幕日韩久久| 国产亚洲欧美日韩俺去了| 国内av在线播放| 久久成人亚洲精品| 大桥未久女教师av一区二区| 久久久久久久久久网| 久久青草国产手机看片福利盒子| 青娱乐在线免费视频| 久久精品国产精品亚洲| 综合成人在线| 北条麻妃69av| 国产精品嫩草99a| 午夜精品久久久久久久第一页按摩| 尤物精品国产第一福利三区 | 鲁丝一区二区三区| 欧美精品第一页| gogo高清午夜人体在线| 欧美精品v日韩精品v国产精品| 久久精品久久99精品久久| 九九热精品免费视频| 亚洲欧美第一页| 国产视频网站一区二区三区| 日本免费不卡一区二区| 国产精品高潮久久久久无| 日本免费精品视频| 蜜臀久久99精品久久久无需会员 | 国产xxxx振车| 久久精品视频在线免费观看 | 亚洲精品在线看| 日韩国产91| 99福利在线观看| 99精品桃花视频在线观看| 特级西西444www高清大视频| 久久久久久97| 露出调教综合另类| 激情黄色小视频|