RocketMQ基本消息生产消费案例讲解

本文介绍如何使用RocketMQ发送和消费消息,包括同步、异步及单向消息等类型,并讲解消息的有序性、延时发送、批量发送及过滤等功能。
依赖
<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.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值