RocketMQ的基本使用

本文介绍了如何使用RocketMQ进行消息传递,包括一对一、一对多和多对多的生产者与消费者模式。在Java环境下,展示了创建DefaultMQProducer和DefaultMQPushConsumer的步骤,以及如何设置命名服务器地址、订阅主题和消息监听。消费者端通过注册MessageListenerConcurrently来处理接收到的消息。

0.前置准备

一、版本信息

1.jdk版本11
2.RocketMQ版本4.9.4
3.项目中使用坐标如下:
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.9.4</version>
</dependency>

二、工具类

/**
  * 生产者链接工具类
  * @param andyGroup 组名
  * @return DefaultMQProducer
  * @throws MQClientException /
  */
public static DefaultMQProducer andyProducerConnect(String andyGroup) throws MQClientException {
    // 1.创建一个发消息的对象Producer
    DefaultMQProducer andyProducer = new DefaultMQProducer(andyGroup);
    // 2.设置发送的命名服务器地址
    andyProducer.setNamesrvAddr("192.168.17.129:9876");
    // 3.启动发送的服务
    andyProducer.start();
    return andyProducer;
}
 /**
  * 消费者链接工具类
  * @param andyGroup 组名
  * @param andyTopic topic
  * @param andyTag 标签
  * @return /
  * @throws MQClientException /
  */
public static DefaultMQPushConsumer andyConsumerConnect(String andyGroup,String andyTopic,String andyTag) throws MQClientException {
   // 1.创建一个发消息的对象Producer
    DefaultMQPushConsumer andyConsumer = new DefaultMQPushConsumer(andyGroup);
    // 2.设置发送的命名服务器地址
    andyConsumer.setNamesrvAddr("192.168.17.129:9876");
    // 3.设置接受消息的topic,对应消息的标签tag,*号为所有
    andyConsumer.subscribe(andyTopic,andyTag);
    return andyConsumer;
}

1.One To One 单生产者与单消费者方式

一、生产者

package com.andy.base;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

/**
 * @author: Andy
 * @date: 2023-02-07 13:57
 * @version: 1.0.0
 * @description: 生产者
 */
public class AndyConsumer {
    /**
     * 1.谁来发?
     * 2.发给谁?
     * 3.怎么发?
     * 4.发什么?
     * 5.发的结果是什么?
     * 6.打扫战场
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // 1.创建一个发消息的对象Producer
        // 2.设置发送的命名服务器地址
        // 3.启动发送的服务
        DefaultMQProducer andyProducer = andyProducerConnect("andyGroup1");
        // 4.创建发消息的对象,指定topic,指定类容body
        Message andyMessage = new Message("andyTopic1","hello_andyMQ".getBytes("UTF-8"));
        // 4.1.发送消息
        SendResult andySend = andyProducer.send(andyMessage);
        // 5.结果
        System.out.println("返回结果>>>>>>>>"+andySend);
        // 7.关闭链接
        andyProducer.shutdown();
    }

}

二、消费者

public class AndyProducer {
    public static void main(String[] args) throws MQClientException {
        DefaultMQPushConsumer andyDefaultMQPushConsumer = andyConsumerConnect("andyGroup1","andyTopic1","*");
        // 3.开启监听
        andyDefaultMQPushConsumer.registerMessageListener((MessageListenerConcurrently) (andyMessages, context) -> {
        	// andyMessages中是所有消息
            for (MessageExt andyMessage : andyMessages) {
                System.out.println("消息详细类容:"+andyMessage);
                System.out.println("消息内容:"+new String(andyMessage.getBody(), StandardCharsets.UTF_8));
            }
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        });
        // 4.启动接收的服务
        andyDefaultMQPushConsumer.start();
    }
}

2.One To Many 单生产者与多消费者方式

一、生产者

public class AndyConsumer {
    /**
     * 1.谁来发?
     * 2.发给谁?
     * 3.怎么发?
     * 4.发什么?
     * 5.发的结果是什么?
     * 6.打扫战场
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // 1.创建一个发消息的对象Producer
        // 2.设置发送的命名服务器地址
        // 3.启动发送的服务
        DefaultMQProducer andyProducer = andyProducerConnect("andyGroup1");
        for (int andyNum = 1; andyNum < 11; andyNum++) {
            // 4.创建发消息的对象,指定topic,指定类容body
            Message andyMessage = new Message("andyTopic1",("hello_andyMQ" +andyNum).getBytes(StandardCharsets.UTF_8));
            // 4.1.发送消息
            SendResult andySend = andyProducer.send(andyMessage);
            // 5.结果
            System.out.println(andySend);
        }

        // 7.关闭链接
        andyProducer.shutdown();
    }
}

二、消费者

public class AndyProducer {
    public static void main(String[] args) throws MQClientException {
        DefaultMQPushConsumer andyDefaultMQPushConsumer = andyConsumerConnect("andyGroup1","andyTopic1","*");
        // 3.开启监听
        andyDefaultMQPushConsumer.registerMessageListener((MessageListenerConcurrently) (andyMessages, context) -> {
        	// andyMessages中是所有消息
            for (MessageExt andyMessage : andyMessages) {
                System.out.println("消息详细类容:"+andyMessage);
                System.out.println("消息内容:"+new String(andyMessage.getBody(), StandardCharsets.UTF_8));
            }
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        });
        // 4.启动接收的服务
        andyDefaultMQPushConsumer.start();
    }
}

注意这里的消费者代码与one to one一样,但是需要启动多个应用
启动方式:
第一步:选择编辑配置
在这里插入图片描述
第二步:选择修改选项
在这里插入图片描述
第三步:选择允许多个实例
在这里插入图片描述
第四步:出现允许多个实例,就可以选着先应用在确定了
在这里插入图片描述

1.Many To Many 多生产者与多消费者方式

一、生产者

代码与One to Many中一样,需要启动多个生产者应用。启动方式与One to Many的消费者相同。

二、消费者

代码与One to Many中一样,启动方式与One to Many的消费者相同。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值