91在线一级黄片|91视频在线观看18|成人夜间呦呦网站|91资源欧美日韩超碰|久久最新免费精品视频一区二区三区|国产探花视频在线观看|黄片真人免费三级片毛片|国产人无码视频在线|精品成人影视无码三区|久久视频爱久久免费精品

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
紅色消息訂閱可靠性升級(jí)(redis消息訂閱可靠性)

在現(xiàn)代互聯(lián)網(wǎng)應(yīng)用中,消息傳遞是普遍的,而大型互聯(lián)網(wǎng)應(yīng)用一般采用消息隊(duì)列系統(tǒng)來(lái)實(shí)現(xiàn)消息傳遞。但是,這種系統(tǒng)常常會(huì)發(fā)生消息丟失、暫停和延遲等問(wèn)題,尤其是當(dāng)消息隊(duì)列的負(fù)載高時(shí)。為了提高系統(tǒng)的可靠性,我們開(kāi)發(fā)了一種基于紅色消息訂閱技術(shù)的可靠消息傳遞機(jī)制。

仁壽網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,仁壽網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為仁壽千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的仁壽做網(wǎng)站的公司定做!

紅色消息訂閱是指一種基于消息重傳機(jī)制的消息傳遞方式。該方法使用三種不同的消息發(fā)送方式:PUBLISH、ACK和REDUNDANT。PUBLISH指向消息隊(duì)列發(fā)布消息,ACK表示接收到訂閱者確認(rèn)的反饋消息,REDUNDANT則是一種備份消息傳遞機(jī)制,它可以確保在消息隊(duì)列故障的情況下消息仍然可靠傳遞。

我們的系統(tǒng)使用了一個(gè)專(zhuān)門(mén)的消息訂閱通道,通過(guò)這個(gè)通道,消息隊(duì)列可以向訂閱者發(fā)送ACK消息以確認(rèn)收到的消息,并在消息丟失時(shí)進(jìn)行重傳。此外,當(dāng)主要通道出現(xiàn)故障或阻塞時(shí),系統(tǒng)會(huì)自動(dòng)切換到備用通道進(jìn)行消息重發(fā)。這是因?yàn)槲覀儗⑺邢⒍紡?fù)制到輔助通道,在主通道發(fā)生故障時(shí),我們只需從備用通道中獲取并重發(fā)消息即可。

下面是我們的代碼實(shí)現(xiàn):

class message {
// 消息體內(nèi)容
String content;
// 消息序號(hào)
int sequence;
// 確認(rèn)序列號(hào)
int confirmedSequence;
public Message(String content, int sequence) {
this.content = content;
this.sequence = sequence;
}
// 消息ACK確認(rèn)
public void ack() {
confirmedSequence = sequence;
}
}

class MessageQueue {
// 消息恢復(fù)時(shí)間間隔
static final int RECOVERY_INTERVAL = 1000;

// 當(dāng)前消息序列號(hào)
int sequence;
// 已發(fā)送消息隊(duì)列
List publishedQueue = new ArrayList();
// 已確認(rèn)消息隊(duì)列
List confirmedQueue = new ArrayList();
// 輔助消息隊(duì)列
List redundantQueue = new ArrayList();
// 發(fā)送消息
public void publish(String content) {
Message message = new Message(content, sequence);
publishedQueue.add(message);
sequence++;
}
// 備份消息
private void redundant(Message message) {
redundantQueue.add(message);
}
// 發(fā)送ACK消息
public void ack(int sequence) {
// 確認(rèn)指定序列號(hào)的消息已收到
for (Message message : publishedQueue) {
if (message.sequence == sequence) {
message.ack();
publishedQueue.remove(message);
confirmedQueue.add(message);
break;
}
}

// 備份已確認(rèn)的消息到輔助隊(duì)列
for (Message message : confirmedQueue) {
if (message.sequence == sequence) {
confirmedQueue.remove(message);
redundant(message);
break;
}
}
}

// 根據(jù)序列號(hào)獲取消息
public Message getMessage(int sequence) {
for (Message message : confirmedQueue) {
if (message.sequence == sequence) {
return message;
}
}
return null;
}

// 檢查消息隊(duì)列是否恢復(fù)
public void checkRecovery(ScheduledExecutorService executorService) {
executorService.scheduleAtFixedRate(() -> {
for (Message message : redundantQueue) {
if (message.confirmedSequence > 0) {
redundantQueue.remove(message);
confirmedQueue.add(message);
}
}
}, 0, RECOVERY_INTERVAL, TimeUnit.MILLISECONDS);
}
}

在我們的實(shí)現(xiàn)中,每個(gè)消息都有一個(gè)唯一的序列號(hào),我們將發(fā)送的每個(gè)消息都保存在已發(fā)布隊(duì)列中,并等待確認(rèn)。當(dāng)訂閱者收到消息并準(zhǔn)備好確認(rèn)時(shí),它會(huì)向隊(duì)列發(fā)送ACK消息,并將序列號(hào)包含在消息中。

為了確保在消息隊(duì)列出現(xiàn)故障時(shí),我們使用輔助隊(duì)列來(lái)保存已發(fā)布和已確認(rèn)的消息。當(dāng)主隊(duì)列恢復(fù)時(shí),我們會(huì)將所有已確認(rèn)的消息備份到輔助隊(duì)列。然后我們定期檢查輔助隊(duì)列中有沒(méi)有確認(rèn)的消息,如果有,我們就將它們添加到已確認(rèn)的隊(duì)列中。

這種紅色消息訂閱機(jī)制可以確保在消息隊(duì)列故障的情況下消息仍然能夠可靠地傳遞。我們已經(jīng)在一些大型互聯(lián)網(wǎng)應(yīng)用中成功地應(yīng)用了這種機(jī)制,并取得了良好的效果。

成都網(wǎng)站營(yíng)銷(xiāo)推廣找創(chuàng)新互聯(lián),全國(guó)分站站群網(wǎng)站搭建更好做SEO營(yíng)銷(xiāo)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎(chǔ)服務(wù)商,價(jià)格厚道。提供成都服務(wù)器托管租用、綿陽(yáng)服務(wù)器租用托管、重慶服務(wù)器托管租用、貴陽(yáng)服務(wù)器機(jī)房服務(wù)器托管租用。


文章題目:紅色消息訂閱可靠性升級(jí)(redis消息訂閱可靠性)
網(wǎng)頁(yè)鏈接:http://m.jiaoqi3.com/article/dppjeci.html