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的消费者相同。