日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

轉(zhuǎn)轉(zhuǎn)基于MQ的分布式重試框架設(shè)計(jì)方案

來源: 責(zé)編: 時(shí)間:2024-02-01 12:48:02 275觀看
導(dǎo)讀1 背景在分布式場景下,為了保障系統(tǒng)的可用性和數(shù)據(jù)的最終一致性,采用基于消息隊(duì)列(MQ)的重試機(jī)制是一種常見的解決方案。偽代碼如下:/** * 需要保證最終一致性的函數(shù) */public void doSomething(Object args) { try {

1 背景

在分布式場景下,為了保障系統(tǒng)的可用性和數(shù)據(jù)的最終一致性,采用基于消息隊(duì)列(MQ)的重試機(jī)制是一種常見的解決方案。偽代碼如下:DC328資訊網(wǎng)——每日最新資訊28at.com

/** * 需要保證最終一致性的函數(shù) */public void doSomething(Object args) {    try {      // 執(zhí)行事務(wù)的操作      executeTransaction();      // 提交事務(wù)      commitTransaction();    } catch (Exception e) {        // 回滾事務(wù)        rollbackTransaction();        // 記錄日志        log.error(e);        // 序列化參數(shù)        byte[] body = serialize(args);        // 構(gòu)建消息, 指定Topic、Body        Message msg = new Message("doSomethingTopic", body);        // 發(fā)送失敗重試消息        mq.send(msg);    }}/** * 消費(fèi)者,用于失敗重試處理 */@Consumer(topic = "doSomethingTopic")public void consume(Message msg) {    // 反序列化    Object args = msg.deserialize();    // 重試    doSomething(args);}

在上述示例中,我們需要編寫一系列與業(yè)務(wù)無關(guān)的代碼來實(shí)現(xiàn)業(yè)務(wù)邏輯的重試機(jī)制。為了減輕開發(fā)人員的負(fù)擔(dān)并讓其專注于核心業(yè)務(wù),我們可以對這些無關(guān)代碼進(jìn)行抽象和優(yōu)化,以提高開發(fā)效率和代碼質(zhì)量。DC328資訊網(wǎng)——每日最新資訊28at.com

2 方案

通過如下步驟,我們對重試邏輯進(jìn)行了封裝,開發(fā)人員只需要在需要保證最終一致性的函數(shù)上標(biāo)注一個(gè)重試注解,便擁有基于MQ的分布式重試能力。DC328資訊網(wǎng)——每日最新資訊28at.com

1. 使用注解與AOP: 通過使用注解與面向切面編程(AOP)的技術(shù),將重試邏輯模塊與業(yè)務(wù)代碼解耦。開發(fā)人員可以在需要保證最終一致性的業(yè)務(wù)方法上添加注解,通過AOP將重試邏輯應(yīng)用到目標(biāo)方法中,從而自動觸發(fā)重試機(jī)制。DC328資訊網(wǎng)——每日最新資訊28at.com

2. 提供配置化選項(xiàng):為重試邏輯提供可配置化的選項(xiàng),例如設(shè)置最大重試次數(shù)、重試間隔時(shí)間等。這樣,開發(fā)人員可以根據(jù)具體業(yè)務(wù)需求進(jìn)行調(diào)整,而無需修改代碼。DC328資訊網(wǎng)——每日最新資訊28at.com

3. 異常處理和日志記錄:在重試邏輯中合理地處理異常,并在必要時(shí)記錄相關(guān)日志。這樣可以幫助開發(fā)人員及時(shí)發(fā)現(xiàn)問題并進(jìn)行排查。DC328資訊網(wǎng)——每日最新資訊28at.com

4. 提供可視化監(jiān)控工具:開發(fā)一個(gè)可視化的監(jiān)控工具,用于實(shí)時(shí)跟蹤重試操作和相關(guān)指標(biāo)。這樣可以幫助開發(fā)人員更好地理解重試的執(zhí)行情況,并進(jìn)行故障排查和性能優(yōu)化。DC328資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DC328資訊網(wǎng)——每日最新資訊28at.com

3 效果

我們引入了@MQRetry注解用于標(biāo)記業(yè)務(wù)邏輯函數(shù),一旦該函數(shù)發(fā)生異常,該注解會將服務(wù)名、類的完整名稱、方法名稱以及實(shí)際參數(shù)列表發(fā)送到消息隊(duì)列(MQ)中。同時(shí)系統(tǒng)會注冊一個(gè)MQ消費(fèi)者來消費(fèi)這些消息,并進(jìn)行重試處理。DC328資訊網(wǎng)——每日最新資訊28at.com

舉個(gè)例子,假設(shè)我們有一個(gè)名為doSomething的函數(shù),它包含了需要保證最終一致性執(zhí)行的業(yè)務(wù)邏輯。僅需在該函數(shù)上添加@MQRetry注解,當(dāng)函數(shù)出現(xiàn)異常時(shí),框架會自動發(fā)送一條MQ重試消息。這條消息可以被當(dāng)前服務(wù)的任意一臺服務(wù)器消費(fèi),并重新執(zhí)行doSomething函數(shù)。DC328資訊網(wǎng)——每日最新資訊28at.com

@Serviceclass Service {     @MQRetry    public void doSomething(String params1, String params2, List<String> params3) {        //throw new RuntimeException(); 拋異常將重試        //RetryContext.markRetryLater(); 標(biāo)記為需要下次重試         //int retryCount = RetryContext.getRetryCount(); 獲取重試次數(shù)    } } @Controllerclass Controller {         @Autowired    private Service service;     service.doSomething("1", "2", Arrays.asList("3", "4"));}

4 可選項(xiàng)

除此之外,我們還為開發(fā)人員提供了一些可選項(xiàng),提供一些可配置的能力。DC328資訊網(wǎng)——每日最新資訊28at.com

/** * 基于MQ的分布式重試組件 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface MQRetry {    /**     * 最大重試次數(shù),默認(rèn)與上限為16次     */    int maxAttempts() default 16;        /**     * 忽略的異常類列表,默認(rèn)所有異常都重試     */    Class<? extends Throwable>[] exclude() default {};        /**     * 需要重試的異常類列表,默認(rèn)所有異常都重試     */    Class<? extends Throwable>[] include() default {};        /**     * 出現(xiàn)異常時(shí)的處理函數(shù), 格式: Bean名.方法名. 如: smsService.onError     * 也可以只設(shè)置函數(shù)名, 不設(shè)置Bean名將執(zhí)行本類的函數(shù). 如: onError     * 要求函數(shù)參數(shù)必須與重試函數(shù)的參數(shù)完全一致     */    String errorHandler() default "";        /**     * true: 第一次調(diào)用時(shí), 同步執(zhí)行@MQRetry函數(shù), 如果失敗再使用MQ     * false: 調(diào)用@MQRetry函數(shù)時(shí), 只會發(fā)送MQ     */    boolean firstSyncCall() default true;        /**     * 消費(fèi)線程數(shù),默認(rèn)為20個(gè)     */    int consumeThread() default 20;    }

5 注意事項(xiàng)

  1. 適用于異步場景,重試函數(shù)不要設(shè)置返回值,函數(shù)的返回值將不會有任何的實(shí)際意義。
  2. At lease Once保證,重試函數(shù)需要保證冪等。
  3. 使用了AOP代理實(shí)現(xiàn),因此,@Transactional的注意事項(xiàng)同樣適用于@MQRetry,如this調(diào)用、private函數(shù)、final函數(shù)會導(dǎo)致重試失效。
  4. 如果重試函數(shù)需要增加參數(shù),請?jiān)诤瘮?shù)參數(shù)最后位置添加。歷史消息消費(fèi)時(shí)對應(yīng)參數(shù)將填充為null。

6 總結(jié)

在計(jì)算機(jī)領(lǐng)域中,重試機(jī)制的重要性不言而喻。它通常分為兩種模式:客戶端模式和服務(wù)端模式??蛻舳四J胶唵我子?,但可靠性較低;而服務(wù)端模式雖然相對復(fù)雜,但能夠提供更高的可靠性。DC328資訊網(wǎng)——每日最新資訊28at.com

無論是客戶端模式還是服務(wù)端模式,重試機(jī)制都是保障系統(tǒng)正常運(yùn)行的重要一環(huán)。選擇適合您業(yè)務(wù)需求的模式,并通過合理的配置項(xiàng)進(jìn)行優(yōu)化,將為您的系統(tǒng)帶來更好的表現(xiàn)和用戶體驗(yàn)。DC328資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DC328資訊網(wǎng)——每日最新資訊28at.com

關(guān)于作者DC328資訊網(wǎng)——每日最新資訊28at.com

苑沖,轉(zhuǎn)轉(zhuǎn)架構(gòu)部存儲服務(wù)負(fù)責(zé)人,負(fù)責(zé)MQ、監(jiān)控系統(tǒng)、KV存儲、時(shí)序數(shù)據(jù)庫、Redis、KMS秘鑰管理等基礎(chǔ)組件。喜歡深入思考問題,對探索新領(lǐng)域和解決問題充滿熱情。DC328資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-70413-0.html轉(zhuǎn)轉(zhuǎn)基于MQ的分布式重試框架設(shè)計(jì)方案

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 互動游戲團(tuán)隊(duì)如何將性能體驗(yàn)優(yōu)化做到TOP級別

下一篇: 為什么 Bun 可能對 Node 降維打擊?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美日韩高清免费| 久久久久国产精品人| 亚洲韩国精品一区| 亚洲九九爱视频| 亚洲一区二区三区视频播放| 午夜影院日韩| 麻豆精品在线播放| 欧美人妖另类| 国产精品一区二区男女羞羞无遮挡| 国产精品婷婷午夜在线观看| 韩国欧美国产1区| 亚洲激情午夜| 亚洲人成艺术| 午夜精品久久久久久久男人的天堂 | 欧美日韩国产成人在线91| 国产精品久久久久久户外露出| 国产日韩在线看| 亚洲精品日日夜夜| 性欧美1819性猛交| 欧美电影免费观看| 国产精品羞羞答答xxdd| 亚洲国产成人av| 亚洲一区二区动漫| 麻豆久久久9性大片| 欧美日韩一区二区精品| 国产婷婷精品| 亚洲免费久久| 久久久久久久一区二区| 欧美日韩人人澡狠狠躁视频| 国产一区视频在线看| 一本一本久久a久久精品牛牛影视| 欧美在线中文字幕| 欧美三级精品| 亚洲国产午夜| 欧美一区激情| 欧美日韩性视频在线| 在线成人激情| 小黄鸭精品密入口导航| 欧美国产日产韩国视频| 欧美精品三级| 亚洲欧洲av一区二区三区久久| 男女激情久久| 国产一区二区三区的电影| 在线亚洲一区观看| 欧美sm重口味系列视频在线观看| 国产欧美一区二区三区另类精品| 99国产精品久久久久久久成人热 | 欧美日韩在线不卡| 精品动漫3d一区二区三区免费| 亚洲一区二区在线免费观看| 欧美高清在线观看| 狠狠色综合色综合网络| 性色av一区二区三区红粉影视| 欧美日韩欧美一区二区| 亚洲国产精品嫩草影院| 久久久久se| 国产日韩欧美在线播放| 亚洲在线视频网站| 欧美揉bbbbb揉bbbbb| 亚洲精品日本| 欧美jizzhd精品欧美喷水| 韩国一区电影| 久久av免费一区| 国产伦精品一区二区三区视频孕妇 | 欧美精品 日韩| 影音先锋亚洲精品| 久久成人精品电影| 国产欧美日韩视频一区二区| 亚洲特黄一级片| 欧美日韩另类综合| 日韩视频二区| 欧美日韩视频在线第一区| 亚洲精品久久在线| 欧美gay视频| 亚洲经典在线| 欧美激情精品久久久久久蜜臀| 亚洲第一中文字幕| 蜜月aⅴ免费一区二区三区| 精品96久久久久久中文字幕无| 久久成人亚洲| 国产一区二区三区在线观看视频| 欧美一区二区三区的| 国产日产欧美a一级在线| 性娇小13――14欧美| 国产日韩视频一区二区三区| 欧美一级播放| 国产亚洲欧美另类中文| 久久精品一二三区| 禁断一区二区三区在线| 久久综合久色欧美综合狠狠| 亚洲第一中文字幕在线观看| 蜜桃精品一区二区三区| 亚洲人成啪啪网站| 欧美成在线视频| 亚洲美女黄网| 国产精品福利网站| 小黄鸭精品密入口导航| 国产中文一区二区| 久热精品在线视频| 亚洲激情精品| 欧美日韩另类字幕中文| 亚洲中无吗在线| 国产一区二区三区视频在线观看| 久久久久国产精品午夜一区| 亚洲大胆人体视频| 欧美剧在线免费观看网站| 一区二区三区四区五区精品| 国产精品日韩久久久久| 久久久亚洲高清| 亚洲激情在线| 国产精品v日韩精品v欧美精品网站 | 日韩一级精品| 国产精品国产三级国产aⅴ9色| 午夜精品免费视频| 一区免费视频| 欧美日韩精品在线视频| 亚洲欧美变态国产另类| 国内精品久久久久久久果冻传媒| 蜜臀久久久99精品久久久久久| 99re热精品| 国产日韩视频| 女主播福利一区| 亚洲午夜精品17c| 黑人一区二区三区四区五区| 欧美福利一区二区| 亚洲欧美日韩国产中文在线| 激情综合网激情| 欧美日韩一区不卡| 欧美中文在线视频| 亚洲精品女av网站| 国产欧美日韩亚洲一区二区三区 | 国产手机视频一区二区| 欧美成人免费在线观看| 亚洲尤物精选| 亚洲成人资源网| 国产精品分类| 另类图片综合电影| 亚洲伊人久久综合| 影音欧美亚洲| 国产精品一区二区三区久久| 久久精品中文字幕免费mv| 日韩小视频在线观看专区| 国产性色一区二区| 欧美日韩精品系列| 久久久久久久999精品视频| 艳女tv在线观看国产一区| 国语自产精品视频在线看抢先版结局 | 你懂的国产精品| 亚洲专区在线视频| 亚洲欧洲视频| 国产综合激情| 国产精品激情av在线播放| 美国十次了思思久久精品导航| 亚洲影音一区| 亚洲精品在线二区| 激情欧美一区| 国产精品最新自拍| 欧美日韩国产a| 美女成人午夜| 久久精品官网| 亚洲女女女同性video| 亚洲精品欧美极品| 一区二区三区在线观看欧美| 国产精品欧美风情| 欧美日韩成人在线播放| 久久综合伊人77777蜜臀| 性久久久久久久久久久久| 一区二区三区国产| 在线观看一区视频| 国产伦精品一区二区三区免费迷| 欧美人与禽性xxxxx杂性| 久久影视精品| 久久精品一区四区| 亚洲欧美综合精品久久成人| 一区二区冒白浆视频| 91久久久国产精品| 在线看片一区| 狠狠综合久久av一区二区小说| 国产美女在线精品免费观看| 欧美视频免费看| 欧美日韩不卡合集视频| 欧美成人在线网站| 老色鬼久久亚洲一区二区| 久久精品中文字幕一区| 欧美一区二区免费视频| 午夜精品在线视频| 亚洲影视在线播放| 亚洲午夜免费视频| 一本在线高清不卡dvd| 99国产精品久久久| 亚洲精品一二| 亚洲精品日韩欧美| 亚洲精品久久久久久下一站| 亚洲欧洲一区二区在线观看 | 亚洲毛片在线免费观看| 亚洲国产婷婷香蕉久久久久久99 | 国产精品日本精品| 国产精品久久福利| 欧美午夜视频在线| 国产精品成人一区二区三区夜夜夜| 欧美精品综合| 欧美日韩天堂| 国产精品美女www爽爽爽| 国产精品区二区三区日本|