本文快速入門,RocketMQ訊息系統的安裝部署,傳送,和接收訊息,監控訊息,的詳細說明。
環境需要
64位作業系統,建議使用Linux / Unix /
- CentOs7.3
- 64bit JDK 1.8+
- Maven 3.2.x
- Git 1.8.3.1
環境安裝
請參考我的另一篇文章
新加專案
新建一個 maven 專案,這裡就不詳細操作了,大家都會的
不過也可以下載我的示例原始碼,下載地址如下
GitHub 原始碼:github.com/souyunku/sp…
新增依賴
在POM 中新增如下依賴
<!-- RocketMq客戶端相關依賴 -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.1.0-incubating</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-common</artifactId>
<version>4.1.0-incubating</version>
</dependency>
複製程式碼
配置檔案
在配置檔案 application.properties
新增一下內容
# 消費者的組名
apache.rocketmq.consumer.PushConsumer=PushConsumer
# 生產者的組名
apache.rocketmq.producer.producerGroup=Producer
# NameServer地址
apache.rocketmq.namesrvAddr=192.168.252.121:9876
複製程式碼
訊息生產者
@Component
public class Producer {
/**
* 生產者的組名
*/
@Value("${apache.rocketmq.producer.producerGroup}")
private String producerGroup;
/**
* NameServer 地址
*/
@Value("${apache.rocketmq.namesrvAddr}")
private String namesrvAddr;
@PostConstruct
public void defaultMQProducer() {
//生產者的組名
DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
//指定NameServer地址,多個地址以 ; 隔開
producer.setNamesrvAddr(namesrvAddr);
try {
/**
* Producer物件在使用之前必須要呼叫start初始化,初始化一次即可
* 注意:切記不可以在每次傳送訊息時,都呼叫start方法
*/
producer.start();
for (int i = 0; i < 100; i++) {
String messageBody = "我是訊息內容:" + i;
String message = new String(messageBody.getBytes(), "utf-8");
//構建訊息
Message msg = new Message("PushTopic" /* PushTopic */, "push"/* Tag */, "key_" + i /* Keys */, message.getBytes());
//傳送訊息
SendResult result = producer.send(msg);
System.out.println("傳送響應:MsgId:" + result.getMsgId() + ",傳送狀態:" + result.getSendStatus());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
producer.shutdown();
}
}
}
複製程式碼
訊息消費者
@Component
public class Consumer {
/**
* 消費者的組名
*/
@Value("${apache.rocketmq.consumer.PushConsumer}")
private String consumerGroup;
/**
* NameServer地址
*/
@Value("${apache.rocketmq.namesrvAddr}")
private String namesrvAddr;
@PostConstruct
public void defaultMQPushConsumer() {
//消費者的組名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);
//指定NameServer地址,多個地址以 ; 隔開
consumer.setNamesrvAddr(namesrvAddr);
try {
//訂閱PushTopic下Tag為push的訊息
consumer.subscribe("PushTopic", "push");
//設定Consumer第一次啟動是從佇列頭部開始消費還是佇列尾部開始消費
//如果非第一次啟動,那麼按照上次消費的位置繼續消費
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext context) {
try {
for (MessageExt messageExt : list) {
System.out.println("messageExt: " + messageExt);//輸出訊息內容
String messageBody = new String(messageExt.getBody(), "utf-8");
System.out.println("消費響應:Msg: " + messageExt.getMsgId() + ",msgBody: " + messageBody);//輸出訊息內容
}
} catch (Exception e) {
e.printStackTrace();
return ConsumeConcurrentlyStatus.RECONSUME_LATER; //稍後再試
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; //消費成功
}
});
consumer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製程式碼
啟動服務
@SpringBootApplication
public class SpringBootRocketmqApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootRocketmqApplication.class, args);
}
}
複製程式碼
控制檯會有響應
傳送響應:MsgId:0AFF015E556818B4AAC208A0504F0063,傳送狀態:SEND_OK
messageExt: MessageExt [queueId=0, storeSize=195, queueOffset=113824, sysFlag=0, bornTimestamp=1517559124047, bornHost=/192.168.252.1:62165, storeTimestamp=1517559135052, storeHost=/192.168.252.121:10911, msgId=C0A8FC7900002A9F00000000056F499C, commitLogOffset=91179420, bodyCRC=1687852546, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message [topic=PushTopic, flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=113825, KEYS=key_99, CONSUME_START_TIME=1517559124049, UNIQ_KEY=0AFF015E556818B4AAC208A0504F0063, WAIT=true, TAGS=push}, body=21]]
消費響應:Msg: 0AFF015E556818B4AAC208A0504F0063,msgBody: 我是訊息內容:99
...
複製程式碼
監控服務
RocketMQ web介面監控RocketMQ-Console-Ng部署
下載並且編譯
下載並且 maven 編譯
git clone https://github.com/apache/rocketmq-externals.git
rocketmq-externals/rocketmq-console/
mvn clean package -Dmaven.test.skip=true
複製程式碼
啟動監控服務
rocketmq.config.namesrvAddr
NameServer
地址,預設啟動埠8080
nohup java -jar target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876
複製程式碼
訪問監控服務
GitHub 原始碼:github.com/souyunku/sp…
Gitee 原始碼:gitee.com/souyunku/sp…
Contact
- 作者:鵬磊
- 出處:www.ymq.io/2018/02/02/…
- Email:admin@souyunku.com
- 版權歸作者所有,轉載請註明出處
- Wechat:關注公眾號,搜雲庫,專注於開發技術的研究與知識分享