RocketMQ發(fā)送同步、異步、單向、延遲、批量、順序、批量消息、帶標(biāo)簽消息
嘿,各位消息隊(duì)列的愛(ài)好者們,今天咱們來(lái)聊聊RocketMQ,這個(gè)阿里巴巴開源的分布式消息中間件。RocketMQ功能強(qiáng)大,支持多種消息發(fā)送方式,比如同步、異步、單向、延遲、批量、順序,還有帶標(biāo)簽消息。是不是聽著就頭暈?別擔(dān)心,我今天就用大白話給大家解釋清楚,保證你一看就懂!
一、同步發(fā)送
同步發(fā)送,顧名思義,就是發(fā)送消息后,要等著消息服務(wù)器確認(rèn)收到了,才繼續(xù)往下走。就像你寄快遞,得等快遞員確認(rèn)收貨了,你才放心離開。
SendResult sendResult = producer.send(msg);
這種方式最靠譜,但也是最慢的,因?yàn)榈玫戎?wù)器回應(yīng)。
二、異步發(fā)送
異步發(fā)送呢,就是發(fā)送消息后,不等服務(wù)器回應(yīng),直接就走人。就像你扔個(gè)紙條進(jìn)郵筒,不管它有沒(méi)有被郵遞員拿走,你就走了。這種方式快,但可能有時(shí)候你都不知道消息到底發(fā)沒(méi)發(fā)出去。
producer.sendAsync(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
// 消息發(fā)送成功
}
@Override
public void onException(Throwable e) {
// 消息發(fā)送失敗
}
});
三、單向發(fā)送
單向發(fā)送,更是簡(jiǎn)單粗暴,發(fā)送消息后,啥也不管,連回調(diào)都不要。就像你把紙條往天上一扔,愛(ài)誰(shuí)誰(shuí)!這種方式最快,但也是最不可靠的,因?yàn)槟阃耆恢老⒌娜ハ颉?/p>
producer.sendOneway(msg);
四、延遲發(fā)送
延遲發(fā)送,就是你可以指定一個(gè)時(shí)間,讓消息在未來(lái)的某個(gè)時(shí)間點(diǎn)再發(fā)送出去。就像你設(shè)置了個(gè)定時(shí)鬧鐘,到點(diǎn)了它才會(huì)響。
msg.setDelayTimeLevel(level); // level是延遲級(jí)別,RocketMQ有預(yù)設(shè)的延遲級(jí)別
producer.send(msg);
五、批量發(fā)送
批量發(fā)送,就是你可以把多條消息打包成一個(gè)批次發(fā)送,就像你把一堆信件裝進(jìn)一個(gè)包裹里寄出去。這樣可以減少網(wǎng)絡(luò)開銷,提高效率。
List<Message> messages = new ArrayList<>();
// 添加多條消息到messages
SendResult sendResult = producer.send(messages);
但要注意的是,批量發(fā)送可能會(huì)因?yàn)槠渲心硹l消息的問(wèn)題導(dǎo)致整個(gè)批次發(fā)送失敗。
六、順序發(fā)送
順序發(fā)送,就是保證消息按照你發(fā)送的順序被消費(fèi)。就像你排隊(duì)買票,得按照先來(lái)后到的順序。這在某些需要嚴(yán)格順序的場(chǎng)景中非常重要。
要實(shí)現(xiàn)順序發(fā)送,你需要把消息發(fā)送到同一個(gè)隊(duì)列里,并且消費(fèi)者也要按照順序去消費(fèi)。
// 選擇一個(gè)隊(duì)列
MessageQueue selector = new MessageQueueSelector() {
@Override
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
// 根據(jù)某種規(guī)則選擇隊(duì)列
return mqs.get(0);
}
};
producer.send(msg, selector, arg);
七、帶標(biāo)簽消息
帶標(biāo)簽消息,就是你可以給消息打個(gè)標(biāo)簽,就像你給文件加個(gè)標(biāo)簽一樣,方便以后查找和過(guò)濾。
msg.setTags("tag1,tag2");
producer.send(msg);
消費(fèi)者在消費(fèi)時(shí),可以根據(jù)標(biāo)簽來(lái)過(guò)濾消息,只消費(fèi)自己感興趣的消息。
結(jié)語(yǔ)
好了,小伙伴們,今天咱們就聊到這里。RocketMQ的這幾種消息發(fā)送方式,各有千秋,選擇哪種方式,得看你的具體需求和場(chǎng)景。同步發(fā)送最靠譜,但最慢;異步發(fā)送和單向發(fā)送快,但可靠性差;延遲發(fā)送可以定時(shí)發(fā)送消息;批量發(fā)送能提高效率;順序發(fā)送能保證消息順序;帶標(biāo)簽消息方便過(guò)濾和查找。希望這篇文章能幫到你,讓你在RocketMQ的世界里游刃有余!加油!