基本消息發(fā)送有三種姿勢:同步、異步、單向另萤。
- 同步:消息發(fā)送到 Broker 成功后了嚎,返回發(fā)送成功結(jié)果;這種可靠性同步地發(fā)送方式使用的比較廣泛熔任,比如:重要的消息通知,短信通知。
- 異步:消息發(fā)送出去后立即返回結(jié)果兼雄,可以在發(fā)送成功的消息回調(diào)中,查看消息是否發(fā)送成功帽蝶;異步消息通常用在對(duì)響應(yīng)時(shí)間敏感的業(yè)務(wù)場景赦肋,即發(fā)送端不能容忍長時(shí)間地等待 Broker 的響應(yīng)。
- 單向:消息發(fā)送出去,Broker 不返回結(jié)果佃乘。這種方式主要用在不特別關(guān)心發(fā)送結(jié)果的場景囱井,例如日志發(fā)送。
一趣避、同步發(fā)送
在 第一章 RocketMQ 搭建調(diào)試環(huán)境 中庞呕,演示了消息的同步發(fā)送。
SendResult sendResult = producer.send(msg)
二程帕、異步發(fā)送
改造 org.apache.rocketmq.example.simple.AsyncProducer
public class AsyncProducer {
public static void main(String[] args) throws MQClientException, InterruptedException {
DefaultMQProducer producer = new DefaultMQProducer("Jodie_Daily_test");
producer.setNamesrvAddr("127.0.0.1:9876");
// https://blog.csdn.net/heihaozi/article/details/119145266
DefaultChannelId.newInstance();
producer.start();
// 異步發(fā)送失敗重試住练,可能導(dǎo)致消息重復(fù)發(fā)送,需要保證消息冪等性
producer.setRetryTimesWhenSendAsyncFailed(0);
int messageCount = 100;
final CountDownLatch countDownLatch = new CountDownLatch(messageCount);
for (int i = 0; i < messageCount; i++) {
try {
final int index = i;
Message msg = new Message("TopicTest",
"TagA",
"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
// 異步發(fā)送模式
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
countDownLatch.countDown();
System.out.printf("%-10d OK %s %n", index, sendResult.getMsgId());
}
@Override
public void onException(Throwable e) {
countDownLatch.countDown();
System.out.printf("%-10d Exception %s %n", index, e);
e.printStackTrace();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
countDownLatch.await(5, TimeUnit.SECONDS);
producer.shutdown();
}
}
三愁拭、單向發(fā)送
改造 org.apache.rocketmq.example.simple.OnewayProducer
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
// 單向發(fā)送
producer.sendOneway(msg);
四讲逛、消息消費(fèi)
在 第一章 RocketMQ 搭建調(diào)試環(huán)境 中,演示了消息的接收敛苇。