創建一個Maven項目
添加依賴,添加producer類和consumer類
添加Maven依賴
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <rocketmq.version>4.3.0</rocketmq.version> </properties
<dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>${rocketmq.version}</version> </dependency> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-common</artifactId> <version>${rocketmq.version}</version> </dependency> </dependencies>
運行productor
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import java.util.Date;
/**
* Created by yl1794 on 2018/5/30.
*/
public class Producer {
public static void main(String[] args) throws MQClientException {
DefaultMQProducer producer = new DefaultMQProducer("rmq-group");
producer.setCreateTopicKey("AUTO_CREATE_TOPIC_KEY");
// 多個地址之間用;分隔
producer.setNamesrvAddr("192.168.6.103:9876");
producer.setInstanceName("rmq-instance");
producer.start();
try {
// TopicA-test TagA
for (int i = 0; i < 3; i++) {
Message msg = new Message("TopicA-test",// topic
"TagA",// tag
(new Date() + "Hello RocketMQ ,TopicA-test,TagA " + i)
.getBytes()// body
);
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
}
// TopicA-test TagB
for (int i = 0; i < 3; i++) {
Message msg = new Message("TopicA-test",// topic
"TagB",// tag
(new Date() + "Hello RocketMQ ,TopicA-test,TagB " + i)
.getBytes()// body
);
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
}
// TopicC-test TagC
for (int i = 0; i < 3; i++) {
Message msg = new Message("TopicC-test",// topic
"TagC",// tag
(new Date() + "Hello RocketMQ ,TopicC-test,TagC " + i)
.getBytes()// body
);
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
}
} catch (Exception e) {
e.printStackTrace();
}
producer.shutdown();
}
}
運行consummer
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.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
public class Consumer {
public static void main(String[] args) throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("rmq-group");
consumer.setNamesrvAddr("192.168.6.103:9876");
consumer.setInstanceName("rmq-instance");
// 設置的是一個consumer的消費策略
// CONSUME_FROM_LAST_OFFSET 默認策略,從該隊列最尾開始消費,即跳過歷史消息
// CONSUME_FROM_FIRST_OFFSET 從隊列最開始開始消費,即歷史消息(還儲存在broker的)全部消費一遍
// CONSUME_FROM_TIMESTAMP 從某個時間點開始消費,和setConsumeTimestamp()配合使用,默認是半個小時以前
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
// 設置consumer所訂閱的Topic和Tag,*代表全部的Tag
consumer.subscribe("TopicA-test", "TagA || TagB");
consumer.subscribe("TopicC-test","*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
for (MessageExt msg : msgs) {
if(msg.getTopic().equals("TopicA-test")){
if(msg.getTags().equals("TagA")){
System.out.println("TopicA: " + "TagA: " + new String(msg.getBody()));
}else if(msg.getTags().equals("TagB")){
System.out.println("TopicA: " + "TagB: " + new String(msg.getBody()));
}
}else if (msg.getTopic().equals("TopicC-test")) {
System.out.println("TopicC: " + new String(msg.getBody()));
}
}
// 返回消費狀態
// CONSUME_SUCCESS 消費成功
// RECONSUME_LATER 消費失敗,需要稍後重新消費
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.println("Consumer Started.");
}
}
踩過的坑:
rocketMq版本和服務器不一致
參考文章:
https://blog.csdn.net/mr_evanchen/article/details/80584886