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