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裡面了,如何保證不會...