依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.7.1</version>
</dependency>
依赖的版本尽量与你RocketMQ服务的版本一样。
消息发送与消费
使用RocketMQ发送三种类型的消息:同步消息、异步消息和单向消息。其中前两种消息是可靠的,因为会有发送是否成功的应答。可以根据应答进行相应处理,比如失败重发,日志记录等等。
Producer发送同步消息
这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知。
public class SyncProducerDemo {
public static void main(String[] args) throws Exception {
//创建一个消息生产者,传入的是消息组名称
DefaultMQProducer producer = new DefaultMQProducer("test-group");
//输入nameserver服务的地址
producer.setNamesrvAddr("192.168.18.142:9876");
//启动生产者
producer.start();
for (int i = 0;i<50;i++){
//创建消息
Message message = new Message("test-topic","test-tag",("test msg" + i).getBytes());
//发送,返回结果对象
SendResult sendResult = producer.send(message);
System.out.println(sendResult.getMsgId()); //消息id
System.out.println(sendResult.getMessageQueue()); //队列信息
System.out.println(sendResult.getSendStatus()); //发送结果
System.out.println(sendResult.getOffsetMsgId()); //下一个要消费的消息的偏移量
System.out.println(sendResult.getQueueOffset()); //队列消息偏移量
System.out.println();
System.out.println("================================================");
TimeUnit.SECONDS.sleep(2);
}
}
}
结果:

发送异步消息
异步消息通常用在对响应时间敏感的业务场景,即发送端不能容忍长时间地等待Broker的响应。
public class AsyncProducerDemo {
public static void main(String[] args) throws Exception{
//创建一个消息生产者,传入的是消息组名称
DefaultMQProducer producer = new DefaultMQProducer("test-group");
//输入nameserver服务的地址
producer.setNamesrvAddr("192.168.18.142:9876");
//启动生产者
producer.start();
//设置异步发送失败时的重试次数
producer.setRetryTimesWhenSendAsyncFailed(0);
for (int i = 0;i<50;i++){
Message message = new Message("test-topic","test-tag",("test msg for async " + i).getBytes());
producer.send(message, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
//异步发送成功回调
System.out.println(sendResult.getMsgId());
}
@Override
public void onException(Throwable e) {
//异步发送异常回调
e.printStackTrace();
}
});
}
}
}

单向发送消息OneWay
单向发送消息就是我发了就算了,不管是否成功,不同步,异步也没有回调。
public class SendOneWayDemo {
public static void main(String[] args) throws Exception{
//创建一个消息生产者,传入的是消息组名称
DefaultMQProducer producer = new DefaultMQProducer("test-group");
//输入nameserver服务的地址
producer.

本文介绍如何使用RocketMQ发送和消费消息,包括同步、异步及单向消息等类型,并讲解消息的有序性、延时发送、批量发送及过滤等功能。
最低0.47元/天 解锁文章
907

被折叠的 条评论
为什么被折叠?



