直接上代码
导包,pom.xml
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.6.1</version>
</dependency>
生产者
public static void main(String[] args) throws Exception{
DefaultMQProducer producer = new DefaultMQProducer("testGrp");
// 设置nameserver地址 nameserver具备路由功能(发现服务,有点注册中心的意思),让其分配合理的broker来进行消息发送
producer.setNamesrvAddr("192.168.52.11:9876");
try {
producer.start();
} catch (MQClientException e) {
e.printStackTrace();
}
// topic 消息将要发送的地址,消息目的地
// body 消息中具体的数据
Message message1 = new Message("monkeyTopic", "第1条消息".getBytes());
Message message2 = new Message("monkeyTopic", "第2条消息".getBytes());
Message message3 = new Message("monkeyTopic", "第3条消息".getBytes());
List<Message> messageList = new ArrayList<>();
messageList.add(message1);
messageList.add(message2);
messageList.add(message3);
// 同步消息发送,等待broker返回值 sendResult是返回回来的
// SendResult sendResult = producer.send(message); // 单条消息发送
SendResult sendResult = producer.send(messageList); // 多条消息同时发送,总大小官方建议小于1M
System.out.println("sendResult: " + sendResult);
producer.shutdown();
}
生产者启动效果图:
消费者
public static void main(String[] args) throws Exception{
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("testConsumer");
consumer.setNamesrvAddr("192.168.52.11:9876");
// 每个消费者需要关注一个topic,也就说消费消息只能消息固定topic的消息,不能随便消费
// topic 表示消息地址
// 过滤器 * 表示不过滤
consumer.subscribe("monkeyTopic","*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
for (MessageExt messageExt : list){
System.out.println(new String(messageExt.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
// 广播消息,所有的监听同一个topic的都能收到
consumer.setMessageModel(MessageModel.BROADCASTING);
// 集群消息,消息只能消费一次
// consumer.setMessageModel(MessageModel.CLUSTERING);
consumer.start();
System.out.println("consumer start .....");
}
消费者消费启动效果图: