RocketMQ生产消费Demo(原生API)

RocketMQ 生产消费Demo(原生API)

mvn依赖

<dependency>
		<groupId>org.apache.rocketmq</groupId>
		<artifactId>rocketmq-client</artifactId>
		<version>4.7.1</version>
</dependency>

生产消息

普通消息-同步发送

public static void main (String[] args) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {

        // 初始化生产者对象,并定义消费组
        DefaultMQProducer producer = new DefaultMQProducer("producer-1");

        // 设置NameServer地址
        producer.setNamesrvAddr("localhost:9876");

        // 启动producer
        producer.start();

        for (int i = 0; i < 10; i++) {

            // 声明消息对象
            Message message = new Message();
            // 设置主题
            message.setTopic("rocketmq-test1");

            message.setKeys("1");
            // 设置消息内容
            message.setBody(("test rocketMQ send message : " + i).getBytes(StandardCharsets.UTF_8));

            final SendResult send = producer.send(message);

            System.out.println("发送结果:" + send);

        }

        // 关闭
        producer.shutdown();


    }

普通消息-异步发送

public static void main (String[] args) throws MQClientException, RemotingException, InterruptedException {

        // 初始化生产者对象,并定义消费组
        DefaultMQProducer producer = new DefaultMQProducer("producer-1");

        // 设置NameServer地址
        producer.setNamesrvAddr("localhost:9876");

        // 启动producer
        producer.start();

        // 异步发送,rocketMQ内部重试次数
        producer.setRetryTimesWhenSendAsyncFailed(0);

        for (int i = 0; i < 10; i++) {

            // 声明消息对象
            Message message = new Message();
            // 设置主题
            message.setTopic("rocketmq-async");
            // 设置消息内容
            message.setBody(("test rocketMQ async send message : " + i).getBytes(StandardCharsets.UTF_8));

            producer.send(message, new SendCallback() {
                @Override
                public void onSuccess (SendResult sendResult) {
                    System.out.println("异步发送成功: " + sendResult);
                }

                @Override
                public void onException (Throwable throwable) {
                    System.out.println("异步发送失败: " + throwable.getStackTrace());
                }
            });


        }

        // 防止直接关闭producer,系统睡五秒
        Thread.sleep(5_000);

        // 关闭
        producer.shutdown();


    }

普通消息-单向模式

public static void main (String[] args) throws MQClientException, RemotingException, InterruptedException {

        // 初始化生产者对象,并定义消费组
        DefaultMQProducer producer = new DefaultMQProducer("producer-1");

        // 设置NameServer地址
        producer.setNamesrvAddr("localhost:9876");

        // 启动producer
        producer.start();

        for (int i = 0; i < 10; i++) {

            // 声明消息对象
            Message message = new Message();
            // 设置主题
            message.setTopic("rocketmq-oneway");
            // 设置消息内容
            message.setBody(("test rocketMQ send oneway message : " + i).getBytes(StandardCharsets.UTF_8));

            producer.sendOneway(message);

        }

        // 关闭
        producer.shutdown();


    }

消费消息

Push模式

public static void main (String[] args) throws MQClientException {

        // 创建消费者对象
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer-1");

        // 设置NameService地址
        consumer.setNamesrvAddr("localhost:9876");

        // 订阅topic * 代表接受所有消息,不过滤
        consumer.subscribe("rocketmq-test1", "*");

        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage (List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {

                System.out.println("消费到的消息:" + list);

                // 返回成功ACK
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });

        // 启动
        consumer.start();


    }

Pull模式

public static void main (String[] args) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {

        // 创建消费者对象,指定消费组
        DefaultMQPullConsumer consumer = new DefaultMQPullConsumer("consumer-2");

        // 配置NameServer地址
        consumer.setNamesrvAddr("localhost:9876");

        // 启动消费者
        consumer.start();

        // 获取主题下队列消息的集合
        final Set<MessageQueue> messageQueues = consumer.fetchSubscribeMessageQueues("rocketmq-test1");

        for (MessageQueue messageQueue : messageQueues) {

            System.out.println("messageQueue: " + messageQueue);

            // 拉取消息 * 不过滤,偏移量从0拉取到10
            final PullResult result = consumer.pull(messageQueue, "*", 0, 10);

            final List<MessageExt> msgFoundList = result.getMsgFoundList();

            if(msgFoundList ==null || msgFoundList.isEmpty()){
                continue;
            }

            for (MessageExt messageExt : msgFoundList) {
                System.out.println(messageExt);
            }

        }

        consumer.shutdown();

    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值