1.消息生产者步骤分析
* 1.创建消息生产者producer,并指定生产者组名
* 2.指定NameServer地址
* 2.启动producer
* 4.创建消息对象,指定主题Topic、tag和消息体
* 5.发送消息
* 6.关闭生产者producer
2.消息消费者步骤分析
* 1.创建消费者consumer,指定消费者组名
* 2.指定Nameserver地址
* 3.订阅主题Topic和tag
* 4.设置回调函数、处理消息
* 5.启动消费者consumer
消费模式:负载均衡模式和广播模式
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>
3.发送同步消息:可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知、短信通知
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import java.util.concurrent.TimeUnit;
public class SyncProducer {
public static void main(String[] args) throws Exception {
// 1.创建消息生产者producer,并指定生产者组名
DefaultMQProducer producer = new DefaultMQProducer("group1");
// 2.指定NameServer地址
producer.setNamesrvAddr("localhost:9876");
// 3.启动producer
producer.start();
for (int i = 0; i < 10; i++) {
// 4.创建消息对象,指定主题Topic、Tag和消息体
/*
参数1:消息主题Topic
参数2:消息Tag
参数3:消息内容
*/
Message msg = new Message("base","tag1",("hello world"+i).getBytes());
// 5.发送消息结果包含 发送状态 消息id 消息接收队列id等
SendResult result = producer.send(msg);
System.out.println("发送结果"+result);
// 线程睡眠1秒
TimeUnit.SECONDS.sleep(1);
}
// 6关闭生产者producer
producer.shutdown();
}
}
4.发送异步消息:通常对响应时间敏感的业务场景,即发送不能容忍长时间地等待broker的响应
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import java.util.concurrent.TimeUnit;
public class AsyncProducer {
public static void main(String[] args) throws Exception {
// 1.创建消息生产者producer,并指定生产者组名
DefaultMQProducer producer = new DefaultMQProducer("group1");
// 2.指定NameServer地址
producer.setNamesrvAddr("localhost:9876");
// 3.启动producer
producer.start();
for (int i = 0; i < 10; i++) {
// 4.创建消息对象,指定主题Topic、Tag和消息体
/*
参数1:消息主题Topic
参数2:消息Tag
参数3:消息内容
*/
Message msg = new Message("base","tag2",("hello world"+i).getBytes());
// 5.发送消息结果包含 发送状态 消息id 消息接收队列id等
producer.send(msg, new SendCallback() {
// 发送成功回调函数
public void onSuccess(SendResult sendResult) {
System.out.println("发送结果:"+sendResult);
}
// 发送失败回调函数
public void onException(Throwable e) {
System.out.println("发送异常"+e);
}
});
// 线程睡眠1秒
TimeUnit.SECONDS.sleep(1);
}
// 6关闭生产者producer
producer.shutdown();
System.out.println("发送完成");
}
}
5.发送单向消息:这种方式主要用于不特别关心发送结果的场景,例如日志发送
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;
import java.util.concurrent.TimeUnit;
public class OnewayProducer {
public static void main(String[] args) throws MQClientException, RemotingException, InterruptedException, MQBrokerException {
// 1.创建消息生产者producer,并指定生产者组名
DefaultMQProducer producer = new DefaultMQProducer("group1");
// 2.指定NameServer地址
producer.setNamesrvAddr("localhost:9876");
// 3.启动producer
producer.start();
for (int i = 0; i < 10; i++) {
// 4.创建消息对象,指定主题Topic、Tag和消息体
/*
参数1:消息主题Topic
参数2:消息Tag
参数3:消息内容
*/
Message msg = new Message("base","tag3",("hello world,单向消息"+i).getBytes());
// 5.发送单向消息
producer.sendOneway(msg);
System.out.println("发送单向消息");
// 线程睡眠1秒
TimeUnit.SECONDS.sleep(1);
}
// 6关闭生产者producer
producer.shutdown();
}
}
6.消费者
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
import java.util.List;
public class Consumer {
public static void main(String[] args) throws MQClientException {
// 1.创建消费者Consumer,指定消费者组名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
// 2.指定Nameserver地址
consumer.setNamesrvAddr("localhost:9876");
// 3.订阅主题Topic和Tag
consumer.subscribe("base","tag1");
// 消费模式:默认是负载均衡模式,还有一种是广播模式
consumer.setMessageModel(MessageModel.BROADCASTING);
// 4.设置回调函数,处理消息
consumer.registerMessageListener(new MessageListenerConcurrently() {
//接收消息内容
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
for (MessageExt messageExt : list) {
System.out.println(new String(messageExt.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
// 5.启动消费者consumer
consumer.start();
}
}