一: 添加jar
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.5.2</version>
</dependency>
二 :生产者
package com.gupao;
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.client.producer.MessageQueueSelector;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.exception.RemotingException;
import java.util.List;
public class RocketmqProvider {
public static void main(String[] args) throws MQClientException, RemotingException, InterruptedException, MQBrokerException {
//创建生产者
DefaultMQProducer producer=new DefaultMQProducer("zlp_producer_group");
producer.setNamesrvAddr("192.168.1.111:9876");//连接服务器
producer.start(); //启动
int num=0;
while (num<2){
num++;
// 创建的主题 标签 消息内容
Message message=new Message("zlp_test_topic","tagA",("hello"+num).getBytes());
//producer.send(message)
System.out.println(message);
producer.send(message, new MessageQueueSelector() {
public MessageQueue select(List<MessageQueue> list, Message message, Object o) {
return list.get(0);// 主题有多个队列 将消息发送到第一个队列 可保证消息的顺序性
}
},"key-"+num);
}
}
}
三 消费者
package com.gupao;
import org.apache.rocketmq.client.consumer.DefaultMQPullConsumer;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.*;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
public class RocketmqConsumer {
public static void main(String[] args) throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("zlp_consumer_group");
consumer.setNamesrvAddr("192.168.1.111:9876");
//CONSUME_FROM_FIRST_OFFSET 从消费队列最小偏移量开始消费。
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
// 从zlp_test_topic 主题 消费 第二个参数 正则表达式 * 代表所有 可以指定 某个tag (tagA)
consumer.subscribe("zlp_test_topic", "*");
/* consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
System.out.println("接收: "+list);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;// 签收成功 不然队列以为这条消息没有消费 不会从队列中 移除这条信息 会继续发送
}
});*/
consumer.registerMessageListener(new MessageListenerOrderly() {
public ConsumeOrderlyStatus consumeMessage(List<MessageExt> list, ConsumeOrderlyContext consumeOrderlyContext) {
MessageExt messageExt = list.get(0);
System.out.println("接收信息: " + list);
if (messageExt.getReconsumeTimes() == 2)// 一条消息 被接收三次(0,1,2) 都没有消费成功
{
System.out.println("签收了三次");
// 可以将该信息 记录到数据库
return ConsumeOrderlyStatus.SUCCESS;//直接签收
}
int a=1/0;
return ConsumeOrderlyStatus.SUCCESS;
}
});
consumer.start();
}
}
rocketmq 控制台 安装地址 https://mp.csdn.net/postedit/100171450