国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMQ常見(jiàn)問(wèn)題及解決方案

這篇具有很好參考價(jià)值的文章主要介紹了RabbitMQ常見(jiàn)問(wèn)題及解決方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、消息丟失

1、生產(chǎn)者重連

2、生產(chǎn)者確認(rèn)

3、數(shù)據(jù)持久化

4、惰性隊(duì)列

5、消費(fèi)失敗處理

二、消息重復(fù)

1、通過(guò)業(yè)務(wù)保證冪等性(優(yōu)先)

2、通過(guò)消息狀態(tài)去重保證冪等性

三、消息堆積

1、優(yōu)化消費(fèi)者處理邏輯

2、增加隊(duì)列及消費(fèi)者數(shù)量

3、使用惰性隊(duì)列

四、保證消息順序消費(fèi)


一、消息丟失

1、生產(chǎn)者重連

由于網(wǎng)絡(luò)波動(dòng),可能會(huì)出現(xiàn)客戶端連接失敗的情況,需開(kāi)啟重連機(jī)制。

SpringBoot項(xiàng)目配置:

spring:
  rabbitmq:
    # 連接超時(shí)時(shí)間
    connection-timeout: 500ms
    template:
      retry:
        # 開(kāi)啟失敗重連
        enabled: true
        # 失敗后重連初始間隔時(shí)間
        initial-interval: 1000ms
        # 失敗后下次間隔的時(shí)長(zhǎng)倍數(shù),下次間隔時(shí)長(zhǎng)=本次間隔時(shí)長(zhǎng)*multiplier
        multiplier: 1
        # 最大重試次數(shù)
        max-attempts: 3

注意:重試過(guò)程線程是被阻塞的,合理配置等待時(shí)長(zhǎng)及最大重試次數(shù),或開(kāi)啟異步線程執(zhí)行,以免影響業(yè)務(wù)性能。

2、生產(chǎn)者確認(rèn)

SpringBoot項(xiàng)目配置:

spring:
  rabbitmq:
    # 開(kāi)啟生產(chǎn)者確認(rèn)
    publisher-confirm-type: correlated
    # 返回路由失敗消息,一般是開(kāi)發(fā)問(wèn)題,無(wú)需開(kāi)啟
    publisher-returns: true

?publisher-confirm-type三種模式:

none 關(guān)閉
simple 同步阻塞等待MQ回執(zhí)消息
correlated(推薦) MQ異步回調(diào)返回回執(zhí)消息

注意:以上兩種方式均會(huì)造成MQ性能下降,非必要不建議開(kāi)啟。失敗情況畢竟非常少,可在代碼中通過(guò)輸出日志或存儲(chǔ)數(shù)據(jù)庫(kù)等方式將發(fā)送失敗的消息記錄下來(lái),稍后手動(dòng)處理。

3、數(shù)據(jù)持久化

  • 交換機(jī)持久化:在聲明交換器時(shí)將“durable”參數(shù)設(shè)置為true
  • 隊(duì)列持久化:在聲明隊(duì)列的時(shí)將“durable”參數(shù)設(shè)置為true
  • 消息持久化:生產(chǎn)消息時(shí)設(shè)置屬性delivery_mode=2

SpringBoot項(xiàng)目:

交換機(jī)和消息默認(rèn)為持久化,需自行設(shè)置隊(duì)列持久化。

@RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "xx.queue", durable = "true"),
            exchange = @Exchange(name = "xx.topic", type = ExchangeTypes.TOPIC),
            key = "xx"
    ))

4、惰性隊(duì)列

RabbitMQ3.6.0版本開(kāi)始,就增加了Lazy Queues的概念,也就是惰性隊(duì)列。惰性隊(duì)列的特征如下:

  1. 接收到消息后直接存入磁盤(pán)而非內(nèi)存
  2. 消費(fèi)者要消費(fèi)消息時(shí)才會(huì)從磁盤(pán)中讀取并加載到內(nèi)存
  3. 支持?jǐn)?shù)百萬(wàn)條的消息存儲(chǔ)

聲明LazyQueue:

@RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "xx.queue", durable = "true",
                    arguments = {@Argument(name = "x-queue-mode", value = "lazy"),
            exchange = @Exchange(name = "xx.topic", type = ExchangeTypes.TOPIC),
            key = "xx"
    ))

優(yōu)點(diǎn):?

  1. 基于磁盤(pán)存儲(chǔ),消息上限高

  2. 沒(méi)有間歇性的page-out,性能比較穩(wěn)定

缺點(diǎn):

  1. 基于磁盤(pán)存儲(chǔ),消息時(shí)效性會(huì)降低

  2. 性能受限于磁盤(pán)的IO

5、消費(fèi)失敗處理

失敗后嘗試在本地重試,重試后依然失敗,將消息投遞到用于投遞失敗消息的交換機(jī),存儲(chǔ)到失敗消息隊(duì)列中,等待后續(xù)手動(dòng)處理。

SpringBoot項(xiàng)目配置:

spring:
  rabbitmq:
    listener:
      simple:
        retry:
          # 開(kāi)啟失敗重試
          enabled: true

?SpringBoot項(xiàng)目配置類:

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.retry.MessageRecoverer;
import org.springframework.amqp.rabbit.retry.RepublishMessageRecoverer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMqErrorConfig {

    @Bean
    public DirectExchange errorExchange() {
        return new DirectExchange("error.direct");
    }

    @Bean
    public Queue errorQueue() {
        return new Queue("error.queue");
    }

    @Bean
    public Binding errorBinding(Queue errorQueue, DirectExchange errorExchange) {
        return BindingBuilder.bind(errorQueue).to(errorExchange).with("error");
    }

    @Bean
    public MessageRecoverer messageRecoverer(RabbitTemplate rabbitTemplate) {
        return new RepublishMessageRecoverer(rabbitTemplate, "error.direct", "error");
    }
}

二、消息重復(fù)

由于網(wǎng)絡(luò)問(wèn)題或消息生產(chǎn)消費(fèi)過(guò)程中出現(xiàn)問(wèn)題,均會(huì)導(dǎo)致消息重復(fù)的情況。

1、通過(guò)業(yè)務(wù)保證冪等性(優(yōu)先)

在業(yè)務(wù)層面上,保證重復(fù)執(zhí)行對(duì)結(jié)果不產(chǎn)生影響。例如:支付成功后修改訂單狀態(tài),可以將未支付狀態(tài)作為修改語(yǔ)句的執(zhí)行條件。

2、通過(guò)消息狀態(tài)去重保證冪等性

如果不能通過(guò)業(yè)務(wù)保證冪等性,可以將處理過(guò)的消息ID記錄到redis,如果新到的消息ID已經(jīng)在記錄中,那么就不再處理這條消息。

三、消息堆積

1、優(yōu)化消費(fèi)者處理邏輯

優(yōu)化消費(fèi)者處理邏輯,使消費(fèi)者更快處理。

2、增加隊(duì)列及消費(fèi)者數(shù)量

將隊(duì)列綁定多個(gè)消費(fèi)者,提高消費(fèi)速度。

3、使用惰性隊(duì)列

基于磁盤(pán)存儲(chǔ),消息上限高。

四、保證消息順序消費(fèi)

發(fā)生原因:

  1. 一個(gè)隊(duì)列綁定多個(gè)消費(fèi)者
  2. 一個(gè)消費(fèi)者開(kāi)啟多個(gè)線程

1、將一個(gè)隊(duì)列拆分成多個(gè)隊(duì)列,保證一個(gè)隊(duì)列只綁定一個(gè)消費(fèi)者,生產(chǎn)者在投遞消息時(shí)根據(jù)業(yè)務(wù)數(shù)據(jù)關(guān)鍵值來(lái)將需要保證先后順序的同一類數(shù)據(jù)發(fā)送到同一個(gè)隊(duì)列當(dāng)中。

2、將隊(duì)列設(shè)置為單活模式

x-single-active-consumer:?jiǎn)位钅J?,?是否最多只允許?個(gè)消費(fèi)者消費(fèi),如果有多個(gè)消費(fèi)者同時(shí)綁定,則只會(huì)激活第?個(gè),除?第?個(gè)消費(fèi)者被取消或者死亡,才會(huì)?動(dòng)轉(zhuǎn)到下?個(gè)消費(fèi)者。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-776925.html

@RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "xx.queue", durable = "true",
                    arguments = {@Argument(name = "x-single-active-consumer", value = "true", type = "java.lang.Boolean")}),
            exchange = @Exchange(name = "xx.topic", type = ExchangeTypes.TOPIC),
            key = "xx"
    ))

到了這里,關(guān)于RabbitMQ常見(jiàn)問(wèn)題及解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • RocketMQ常見(jiàn)問(wèn)題及解決方案

    RocketMQ FAQ 可能原因 1)消費(fèi)端處理消息發(fā)生異常沒(méi)有捕獲或是因?yàn)槠渌颍瑳](méi)有返回消費(fèi)狀態(tài) 解決方案: 消費(fèi)端捕獲異常, 如果需要重試,返回ConsumeConcurrentlyStatus. RECONSUME_LATER , 如果不需要重試,返回ConsumeConcurrentlyStatus. RECONSUME_SUCCESS 可以在消費(fèi)端增加重試次數(shù)判斷,

    2023年04月08日
    瀏覽(25)
  • 冷啟問(wèn)題目前常見(jiàn)解決方案

    冷啟問(wèn)題目前常見(jiàn)解決方案

    隨機(jī)冷啟 個(gè)性化冷啟 冷啟動(dòng)保量 冷啟動(dòng)保量,保證每個(gè)item曝光的次數(shù)一樣,實(shí)時(shí)統(tǒng)計(jì)已曝光的次數(shù)和要曝光的次數(shù) 冷啟動(dòng)結(jié)束過(guò)濾,如果需曝光的量越大,且越接近冷啟結(jié)束時(shí)間,得分越高,被曝光的概率越大 爬坡保量 實(shí)時(shí)統(tǒng)計(jì)曝光、點(diǎn)擊、ctr;ctr越高,曝光越少,得分

    2024年02月11日
    瀏覽(22)
  • 常見(jiàn)后端數(shù)據(jù)存儲(chǔ)問(wèn)題解決方案

    常見(jiàn)后端數(shù)據(jù)存儲(chǔ)問(wèn)題解決方案

    1、mysql數(shù)據(jù)準(zhǔn)確性 ? ? ? ?常見(jiàn)電商系統(tǒng)中,如訂單服務(wù)、現(xiàn)金券服務(wù)、活動(dòng)類服務(wù)等,這類服務(wù)中經(jīng)常會(huì)出現(xiàn)一些并發(fā)更新數(shù)據(jù)的情況,如何保證數(shù)據(jù)準(zhǔn)確性。雖然有些操作可通過(guò)\\\"狀態(tài)\\\"字段做了類似樂(lè)觀鎖的處理。但理論上還是會(huì)出現(xiàn)ABA的問(wèn)題,而且規(guī)則不夠統(tǒng)一,不同

    2023年04月18日
    瀏覽(18)
  • HBase實(shí)際應(yīng)用中常見(jiàn)的問(wèn)題 解決方案

    HBase 是一個(gè)分布式的、面向列的開(kāi)源數(shù)據(jù)庫(kù),通常用于處理大規(guī)模數(shù)據(jù)。在實(shí)際應(yīng)用中,可能會(huì)遇到一些常見(jiàn)問(wèn)題,以下是一些常見(jiàn)問(wèn)題及其解決方案: 性能問(wèn)題 : 問(wèn)題 :HBase 性能下降,讀寫(xiě)延遲增加。 解決方案 :可以通過(guò)增加 Region Server、優(yōu)化 HDFS、調(diào)整 HBase 配置參數(shù)

    2024年01月19日
    瀏覽(19)
  • 微信小程序:小程序常見(jiàn)問(wèn)題及解決方案

    在小程序中使用原生的表單組件時(shí),在有彈出框出現(xiàn)的情況下,原生表單組件會(huì)出現(xiàn)在遮罩層上面,且會(huì)造成事件穿透的情況。 解決方案一: 使用cover-view,cover-view比原生組件的層級(jí)更高,或者說(shuō)也是一種原生組件,不過(guò)在cover-view的子組件只能是coveri-view、cover-image,對(duì)于包

    2024年02月10日
    瀏覽(25)
  • BurpSuite【安裝配置、使用細(xì)節(jié)、常見(jiàn)問(wèn)題解決方案等】

    BurpSuite【安裝配置、使用細(xì)節(jié)、常見(jiàn)問(wèn)題解決方案等】

    問(wèn)題描述 使用某博客所述方法安裝BurpSuite后,當(dāng)天使用正常,但過(guò)幾天后發(fā)現(xiàn)無(wú)法打開(kāi)。 可能原因 JAVA安裝路徑下的文件夾名(父級(jí)文件夾)被修改過(guò),但是系統(tǒng)環(huán)境變量中的路徑值沒(méi)有相應(yīng)修改。 解決方案 檢查系統(tǒng)環(huán)境變量中JAVA_HOME和Path的路徑值(根據(jù)個(gè)人安裝時(shí)的配置

    2024年02月11日
    瀏覽(22)
  • 在Mac上安裝SQLsever,常見(jiàn)問(wèn)題及解決方案

    在Mac上安裝SQLsever,常見(jiàn)問(wèn)題及解決方案

    前言: 最近入手了新的Mac M2 arm 框架的 蘋(píng)果電腦,公司新項(xiàng)目采用SQLsever2019版本,在Mac上安裝SQLsever千難萬(wàn)阻,查閱很多資料最后尋求的解決方案,記錄如下,供大家參考。 說(shuō)下大致的安裝步驟和里面踩的坑, 通篇閱讀后再動(dòng)手 首先Mac想要安裝SQLsever,通過(guò)docker去拉去鏡像

    2024年02月10日
    瀏覽(25)
  • 運(yùn)行 `npm install` 時(shí)的常見(jiàn)問(wèn)題與解決方案

    描述: 運(yùn)行 npm install 時(shí),可能會(huì)遇到網(wǎng)絡(luò)連接問(wèn)題,導(dǎo)致無(wú)法正常下載依賴包。 報(bào)錯(cuò)示例: npm ERR! network connection timed out npm ERR! connect ETIMEDOUT npm ERR! getaddrinfo EAI_AGAIN 解決方案: 確保你的計(jì)算機(jī)已連接到互聯(lián)網(wǎng)??梢試L試打開(kāi)瀏覽器,訪問(wèn)其他網(wǎng)頁(yè)來(lái)確認(rèn)網(wǎng)絡(luò)連接正常。 檢

    2024年02月07日
    瀏覽(37)
  • 【大數(shù)據(jù)安全-Kerberos】Kerberos常見(jiàn)問(wèn)題及解決方案

    可以用來(lái)幫助診斷 Kerberos 相關(guān)問(wèn)題的原因并實(shí)施解決方案的指南。 javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] 此消息表明一個(gè)操作嘗試要求以 Kerberos 的 user/host@realm 身份認(rèn)證的操作,但票據(jù) cac

    2024年02月05日
    瀏覽(32)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包