RocketMQ 如何保證訊息順序消費

2021-10-25 00:22:45 字數 1028 閱讀 8724

rocketmq支援區域性順序消費,但不支援全域性,換句話說針對topic中的每個queue是可以按照fifo進行消費。

要保證乙個訂單有關的訊息順序消費,有兩點需要注意,一是將訂單有關的訊息傳送到相關topic中同乙個queue裡,二是消費者按照先進先出的原則進行消費。

在訊息傳送時,需指定對應的messagequeueselector,此時我們只需通過訂單號與queue進行關聯,**如下。send中的引數arg即為select中的arg,將訂單號作為引數傳入,同一訂單號的相關訊息則可以保證在同一queue中。

send(message msg, messagequeueselector selector, object arg)
private messagequeueselector messagequeueselector = new messagequeueselector()  catch (exception e) 

}};

如果使用messagelistenerconcurrently的話,必須保證是單執行緒才能順序消費,但生產環境下,我們一般 都是多執行緒的形成,這樣則需要使用messagelistenerorderly。

consumer.setconsumethreadmin(1);

consumer.setconsumethreadmax(1);

...consumer.registermessagelistener(

new messagelistenerconcurrently()

});

messagelistenerorderly使用**如下。

consumer.setconsumethreadmin(4);

consumer.setconsumethreadmax(8);

consumer.registermessagelistener(

new messagelistenerorderly()

});

rocketmq如何保證訊息不丟失

一 大體可以從三方面來說 分別從producer傳送機制 broker的持久化機制,以及消費者的offset機制來最大程度保證訊息不易丟失 從producer的視角來看 如果訊息未能正確的儲存在mq中,或者消費者未能正確的消費到這條訊息,都是訊息丟失。從broker的視角來看 如果訊息已經存在bro...

RocketMQ如何保證訊息不丟失(訊息可靠性)

為什麼說rocketmq更適用於業務型的訊息中介軟體,因為它能夠保證訊息不丟失且帶有事務訊息。先來看一張rocketmq集群部署結構 其中name server主要是提供路由資訊,這裡暫時忽略,大致流程為 producer 生產者生產訊息 broker 儲存訊息 consumer 消費訊息 接下來我...

RocketMQ保證訊息不丟失

分別從producer傳送機制 broker的持久化機制,以及消費者的offset機制來最大程度保證訊息不易丟失 從producer的視角來看 如果訊息未能正確的儲存在mq中,或者消費者未能正確的消費到這條訊息,都是訊息丟失。從broker的視角來看 如果訊息已經存在broker裡面了,如何保證不會...