RocketMQ的基本使用

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的消费者相同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值