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

成人免费观看cn| 欧美精品一区二区三区久久久| 国产一区二区三区高清| 97久久久久久久| 欧美日韩中文字幕一区二区三区 | 国产第一页浮力| 日韩第一区第二区| 欧美性xxxx18| 91精品视频免费| 精品无码人妻一区二区三区品| 青青久久av| 欧美美女喷水视频| 免费看日本毛片| 日本中文字幕在线观看| www.成人在线| 91在线精品播放| 丁香社区五月天| 欧美日韩精品一本二本三本| 欧美日韩中文精品| 99热久久这里只有精品| 国产高清一级毛片在线不卡| 成人天堂资源www在线| 国产精品亚洲一区二区三区| 国产一级淫片免费| 999精品在线| 国产视频精品久久久| 亚洲AV无码久久精品国产一区| 在线能看的av网址| 亚洲国产视频在线| 国产又大又长又粗又黄| 狠狠v欧美ⅴ日韩v亚洲v大胸| 国产suv精品一区二区883| 国产欧美日韩精品在线观看 | 非洲一级黄色片| av免费不卡国产观看| 国产精品久线在线观看| 蜜桃欧美视频| 色噜噜在线播放| 国产一区二区久久| 国产精品亚洲视频在线观看| 成人免费视频国产免费| 国产精品日韩| 97久久精品人搡人人玩| 青春草免费视频| 真实国产乱子伦精品一区二区三区| 555夜色666亚洲国产免| 天天干在线影院| 浪潮色综合久久天堂| 欧美日韩国产麻豆| 久久国产亚洲精品无码| 1区2区3区在线| 亚欧色一区w666天堂| 青青草国产免费| heyzo高清国产精品| 亚洲动漫第一页| 欧美 日韩 亚洲 一区| 成人性生交大片免费看在线播放| 亚洲综合丁香婷婷六月香| 国产精品自拍合集| 丁香影院在线| 亚欧色一区w666天堂| 亚洲自偷自拍熟女另类| 校园春色亚洲色图| 欧美日韩免费一区二区三区视频 | 日本成人午夜影院| 精品国产一区二区三区久久久樱花 | 国产精品99免视看9| www.久久精品视频| 日本系列欧美系列| 国产综合视频在线观看| 国产欧美日韩成人| 不卡av在线免费观看| 欧美激情专区| 国产精品自拍电影| 激情偷乱视频一区二区三区| 91最新国产视频| 成人午夜精品福利免费| 久久午夜免费电影| 亚洲精品免费在线看| 日本最黄一级片免费在线| 亚洲精品乱码久久久久久黑人 | 蜜桃av久久久亚洲精品| 搞黄视频免费在线观看| 一色屋精品亚洲香蕉网站| 乱熟女高潮一区二区在线| 成人影院在线视频| 欧美性大战久久久| 岛国精品一区二区三区| 国产精品一区二区三区av麻 | 日韩在线观看电影完整版高清免费| 91免费在线| 成+人+亚洲+综合天堂| 久草热久草热线频97精品| 成年人视频在线看| 亚洲一二三四久久| 亚洲欧美久久久久| 中文字幕色婷婷在线视频| 在线欧美日韩精品| a级黄色一级片| 天然素人一区二区视频| 日韩午夜av一区| 老牛影视av老牛影视av| 亚洲成人99| 日韩**中文字幕毛片| 国产欧美熟妇另类久久久| 久久综合九色综合欧美亚洲| 精品国产无码在线| 色豆豆成人网| 亚洲成人动漫在线播放| 日韩一区二区三区四区视频| 99精品免费网| 国产做受高潮69| 中文字幕有码视频| 99v久久综合狠狠综合久久| 2022国产精品| 成人欧美一区| 午夜精品久久久久久久久| 视频免费1区二区三区| 日韩三级毛片| 欧美激情亚洲精品| 日韩欧美激情视频| 激情成人午夜视频| 色吧亚洲视频| 无码小电影在线观看网站免费| 欧美一区二区网站| 三级黄色片免费看| 精品国内自产拍在线观看视频| 久久久久久久久久亚洲| 国产精品福利电影| 国产精品美日韩| www日韩在线观看| 91天天综合| 日韩精品中文字幕视频在线| 久久精品视频9| 国产电影精品久久禁18| 一区二区三区四区久久| 福利精品一区| 中文日韩在线观看| 波多野结衣大片| 国产亚洲欧美色| 精品人妻一区二区三区四区在线| 成人h动漫精品一区二区器材| 欧美精品免费在线| 99久久免费国产精精品| 亚洲六月丁香色婷婷综合久久| 9久久婷婷国产综合精品性色| 精品国产乱码久久久久久1区2匹| 国产aaa精品| 不卡在线视频| 欧美欧美欧美欧美| 韩国一级黄色录像| 久久国产人妖系列| 男人天堂成人网| 久久久久久久久成人| 欧美大片va欧美在线播放| 亚洲经典一区二区三区| 亚洲成人激情av| 日本aaa视频| 秋霞电影网一区二区| 亚洲一卡二卡三卡四卡无卡网站在线看| 国产精品第一国产精品| 日韩色av导航| 国产午夜性春猛交ⅹxxx| av在线免费不卡| 99热自拍偷拍| 国产在线观看91一区二区三区| 国产国语videosex另类| av大片在线播放| 91精品国产乱码久久蜜臀| 欧美黄色免费观看| 97精品视频在线观看自产线路二| 日日碰狠狠躁久久躁婷婷| 欧美日韩在线二区| 99久久精品免费看国产四区| 欧美日韩国产观看视频| 91精品国产综合久久蜜臀| 国产a免费视频| 2017欧美狠狠色| 午夜剧场在线免费观看| 国产综合自拍| 欧美日韩亚洲免费| 色999久久久精品人人澡69| 欧美第一淫aaasss性| 亚洲日本在线播放| 欧美美女黄视频| 日韩av一区二区在线播放| 国产日韩在线不卡| 日本少妇xxx| 久久黄色影院| 男女激烈动态图| 日韩免费电影在线观看| 91在线观看欧美日韩| 天堂√8在线中文| 久久精品国产亚洲| 日本高清中文字幕二区在线| 51精品久久久久久久蜜臀| 国产系列精品av| 国产精品久久免费看| 捆绑裸体绳奴bdsm亚洲| 久久精品国产秦先生| 人人妻人人添人人爽欧美一区| 久久中文字幕av| 久久久久久一区| 美国十次综合久久| 国产成人小视频在线观看| 男人添女人下部高潮视频在线观看| 亚洲欧美日韩直播| 成人毛片在线精品国产| 欧美日韩综合色| 不卡av电影在线| 亚洲高清三级视频| 男女性高潮免费网站| 国产视频一区二区在线| 特级西西人体4444xxxx| 国产精品一区二区在线观看网站| 亚洲国产精品毛片av不卡在线| 狠狠入ady亚洲精品经典电影| 在线视频一区观看| 精品一区二区三| 精品欧美一区二区三区久久久| 高清在线一区二区| 国产精品视频精品| 六月婷婷综合| 在线播放日韩专区| 天天摸天天干天天操| 日韩午夜av一区| 国产免费一区二区三区最新不卡 | 国产精品视频一二三区 | 国产精品高清乱码在线观看| 欧美激情精品久久久久久| 美女免费久久| 亚洲天堂av在线免费| 无码精品一区二区三区在线| 精品免费国产二区三区 | 亚洲黄色av女优在线观看| 国产日韩欧美中文字幕| 欧美精品高清视频| 6—12呦国产精品| 欧美日本一区二区| 中文字幕理论片| 在线观看日韩毛片| 中文字幕久久久久| 欧美日韩视频在线观看一区二区三区| 99超碰在线观看| 色婷婷av一区二区三区大白胸 | 免费在线亚洲| 欧美日韩亚洲一区二区三区四区| 欧美成a人免费观看久久| 国产一区二区精品免费| 精品亚洲自拍| 韩国成人av| 在线亚洲a色| 日韩精品欧美一区二区三区| 成人精品影视| 一区国产精品| 欧美777四色影| 免费人成在线观看视频播放| av不卡在线看| 免费在线观看的av网站| 青青国产91久久久久久 | 日韩毛片网站| 亚洲专区国产精品| 国产成人福利av| 国产精品精品国产| 久久人体av| 51国偷自产一区二区三区 | 毛片在线网站| 日本欧美一级片| 欧美aaaaaa| 超碰97国产在线| 亚洲精品国产精品粉嫩| 午夜一区二区三区| 欧美另类亚洲| 午夜精品久久久内射近拍高清| 蜜乳av一区二区| 男女高潮又爽又黄又无遮挡| 日韩av中文字幕一区二区三区| 视频在线观看免费高清| 国产超碰在线一区| 国精产品一区一区三区免费视频| 国产欧美一区二区精品性色| 朝桐光av在线| 高潮白浆女日韩av免费看| 依依成人在线视频| 亚洲精品一区二区三区福利| 毛片在线播放网址| 欧美成人黑人xx视频免费观看| 国产污视频在线播放| 国产日产欧美精品| 国内精品偷拍| 亚洲一区二区三区在线观看视频| 欧美日韩一区二区高清| 国产日韩成人内射视频| 国产麻豆精品95视频| 久久亚洲AV成人无码国产野外| 中文字幕在线一区免费| 日韩精品手机在线| 制服丝袜在线91| 精品推荐蜜桃传媒| 欧美激情欧美狂野欧美精品| 成人在线观看免费视频| 精品999在线观看| 亚洲精品久久久| 成人中文字幕av| 99精品热视频| a级片在线观看免费| 欧亚一区二区三区| 天堂av中文字幕| 欧美成人精品xxx| 高清av一区| 欧美日韩大片一区二区三区| 欧美黄色大片网站| 最新天堂在线视频| 久久久久久夜精品精品免费| 国产精品第56页| 91精品国产综合久久福利软件| 国产毛片在线看| 日本欧美爱爱爱| 老司机在线精品视频| 免费的一级黄色片| 国产一区美女在线| av片在线免费看| 在线一区二区三区| 四虎精品在永久在线观看| 日韩久久午夜影院| 久久av色综合| 亚洲最大福利视频| 午夜影院欧美| 91亚洲精品久久久蜜桃借种| 国产欧美精品一区二区三区四区 | 欧美一卡二卡三卡| 午夜小视频在线| 国产精品亚洲一区二区三区| 欧美肉体xxxx裸体137大胆| 人妻有码中文字幕| 久久久天堂av| 中文字幕一区在线播放| 亚洲美女www午夜| 欧美www.| 日韩三级电影| 蜜桃一区二区三区四区| 粉嫩精品久久99综合一区| 欧美在线三级电影| 香港伦理在线| 亚洲xxxx视频| 欧美精品色网| 精品国产一区在线| 欧美日韩一区二区在线| 免费a在线观看| 国产精品久久中文| 天天做天天爱天天爽综合网| 欧美乱大交xxxxx潮喷l头像| 成人免费视频caoporn| 日韩精品无码一区二区| 亚洲美女av网站| 成人国产精品| 99热这里只有精品7| 国产激情91久久精品导航 | 欧美伊人精品成人久久综合97 | 热久久视久久精品18亚洲精品| 蜜乳av综合| 99视频精品全部免费看| 亚洲欧美日韩在线观看a三区 | 农村少妇久久久久久久| 亚洲天堂2020| 六九午夜精品视频| 26uuu成人| 成人免费不卡视频| 日韩精品一区二区亚洲av| 一色桃子一区二区| 国产日韩欧美中文在线| 霍思燕三级露全乳照| 国产日本欧洲亚洲| 国产富婆一级全黄大片| 97精品在线视频| 欧美日韩在线播放视频| 男人女人拔萝卜视频| 色呦呦网站一区| 欧美jizz18性欧美| 国新精品乱码一区二区三区18| 天堂成人国产精品一区| 成人免费精品动漫网站| 亚洲国产精品小视频| 成人黄色视屏网站| 欧妇女乱妇女乱视频| 国产日本一区二区| 国产成人三级在线播放| 欧洲亚洲免费在线| 91精品国产乱码久久久久久 | 成年网站免费在线观看| 亚洲国产一区二区在线播放| 国产精品久久一区二区三区不卡 | 狠狠干狠狠操视频| 午夜视黄欧洲亚洲| 美女av在线播放| 欧美国产一区二区在线| 国产99精品国产| 又骚又黄的视频| 97视频人免费观看| 影视亚洲一区二区三区|