消息类型-普通消息
普通消息
RocketMQ提供三種方式來發送普通消息:可靠同步發送、可靠異步發送和單向發送。
可靠同步發送
同步發送是指消息發送方發出數據后,會在收到接收方發回響應之后才發下一個數據包的通訊方式。
此種方式應用場景非常廣泛,例如重要通知郵件、報名短信通知、營銷短信系統等。
可靠異步發送
異步發送是指發送方發出數據后,不等接收方發回響應,接著發送下個數據包的通訊方式。發送方通過回調接口接收服務器響應,并對響應結果進行處理
異步發送是指發送方發出數據后,不等接收方發回響應,接著發送下個數據包的通訊方式。發送方通過回調接口接收服務器響應,并對響應結果進行處理
單向發送
單向發送是指發送方只負責發送消息,不等待服務器回應且沒有回調函數觸發,即只發送請求不等待應答。
適用于某些耗時非常短,但對可靠性要求并不高的場景,例如日志收集。
<!--依賴--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency><groupId>junit</groupId><artifactId>junit</artifactId> </dependency> package com.leon.test;import com.leon.OrderApplication; import org.apache.rocketmq.client.producer.SendCallback; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class) @SpringBootTest(classes = OrderApplication.class) public class MessageTypeTest {@Autowiredprivate RocketMQTemplate rocketMQTemplate;//同步消息@Testpublic void testSyncSend() {//參數一: topic:tag//參數二: 消息體//參數三: 超時時間SendResult result =rocketMQTemplate.syncSend("test-topic-1:tag", "這是一條同步消息", 10000);System.out.println(result);}//異步消息@Testpublic void testAsyncSend() throws InterruptedException {//參數一: topic:tag//參數二: 消息體//參數三: 回調rocketMQTemplate.asyncSend("test-topic-1", "這是一條異步消息", new SendCallback() {//成功響應的回調@Overridepublic void onSuccess(SendResult result) {System.out.println(result);}//異常響應的回調@Overridepublic void onException(Throwable throwable) {System.out.println(throwable);}});System.out.println("==================");Thread.sleep(300000000);}//單向消息@Testpublic void testOneWay() {for (int i = 0; i < 10; i++) {rocketMQTemplate.sendOneWay("test-topic-1", "這是一條單向消息");}}//單向順序消息@Testpublic void testOneWayOrderly() {for (int i = 0; i < 10; i++) {//第三個參數的作用是用來決定這些消息發送到哪個隊列的上的rocketMQTemplate.sendOneWayOrderly("test-topic-1", "這是一條單向消息","xx");}} }三種發送方式的對比
| 同步發送 | 快 | 有 | 不丟失 |
| 異步發送 | 快 | 有 | 不丟失 |
| 單向發送 | 最快 | 無 | 可能丟失 |
?
總結
- 上一篇: 下单消息的发送和接收案例
- 下一篇: 消息类型-顺序消息