有一種業(yè)務(wù)場景,當(dāng)人員組織結(jié)構(gòu)變更時,會有大量數(shù)據(jù)進(jìn)行推送。這些數(shù)據(jù)類型有的是add,有的是update,并且必須先add,才能進(jìn)行update。
這時,為了保證消費(fèi)順序,需要只有一個實(shí)例進(jìn)行按順序消費(fèi),其他實(shí)例僅提供日常對外服務(wù),不進(jìn)行消息消費(fèi)。當(dāng)唯一消費(fèi)實(shí)例無法消費(fèi)或掉線時,會自動開啟下一個消費(fèi)者進(jìn)行消費(fèi),保證多個實(shí)例消費(fèi)者中僅有一個正常消費(fèi),其他作為備選。
這時就會用到消費(fèi)者單活模式,也就是如下圖管理頁面中所顯示。
使用起來很簡單,只是在聲明隊(duì)列的時候的參數(shù)(arguments參數(shù)),將x-single-active-consumer設(shè)置為True即可。
代碼如下:
HashMap<String,Object> args = new HashMap<String,Object>();
args.put("x-single-active-consumer", true);
......
//創(chuàng)建Queue
channel.queueDeclare(queueName, true, false, false, args);
將x-single-active-consumer設(shè)置為True,則這個隊(duì)列只允許存在一個有效的消費(fèi)者消費(fèi)消息,其他消費(fèi)者處于備選狀態(tài)。
注意:如果一個隊(duì)列已經(jīng)創(chuàng)建為非x-single-active-consumer,而你想更改其為x-single-active-consumer,上面的代碼是會報錯的,錯誤信息是:聲明的隊(duì)列的和server上的隊(duì)列不一致。把原來隊(duì)列刪除了即可。文章來源:http://www.zghlxwxcb.cn/news/detail-506280.html
完結(jié)撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。文章來源地址http://www.zghlxwxcb.cn/news/detail-506280.html
到了這里,關(guān)于RabbitMQ多消費(fèi)者實(shí)例時,保證只有一個消費(fèi)者進(jìn)行消費(fèi)(單活消費(fèi)者模式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!