普通消息
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 {
@Autowired
private RocketMQTemplate rocketMQTemplate;
//同步消息
@Test
public void testSyncSend() {
//参数一: topic:tag
//参数二: 消息体
//参数三: 超时时间
SendResult result =
rocketMQTemplate.syncSend("test-topic-1:tag", "这是一条同步消息", 10000);
System.out.println(result);
}
//异步消息
@Test
public void testAsyncSend() throws InterruptedException {
//参数一: topic:tag
//参数二: 消息体
//参数三: 回调
rocketMQTemplate.asyncSend("test-topic-1", "这是一条异步消息", new SendCallback() {
//成功响应的回调
@Override
public void onSuccess(SendResult result) {
System.out.println(result);
}
//异常响应的回调
@Override
public void onException(Throwable throwable) {
System.out.println(throwable);
}
});
System.out.println("==================");
Thread.sleep(300000000);
}
//单向消息
@Test
public void testOneWay() {
for (int i = 0; i < 10; i++) {
rocketMQTemplate.sendOneWay("test-topic-1", "这是一条单向消息");
}
}
//单向顺序消息
@Test
public void testOneWayOrderly() {
for (int i = 0; i < 10; i++) {
//第三个参数的作用是用来决定这些消息发送到哪个队列的上的
rocketMQTemplate.sendOneWayOrderly("test-topic-1", "这是一条单向消息","xx");
}
}
}
三种发送方式的对比
发送方式 | 发送 TPS | 发送结果反馈 | 可靠性 |
---|---|---|---|
同步发送 | 快 | 有 | 不丢失 |
异步发送 | 快 | 有 | 不丢失 |
单向发送 | 最快 | 无 | 可能丢失 |