rocketMq單機搭建+代碼實戰

1.需要的環境

64bit OS, Linux/Unix/Mac is recommended;

64bit JDK 1.8+; 查看方式: java -version

Maven 3.2.x; 查看方式: mvn -v

2.下載壓縮包zip

https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.0/rocketmq-all-4.3.0-source-release.zip

3.創建rocketmq目錄+編譯,

把下載的zip文件放進去

unzip rocketmq-all-4.3.0-source-release.zip

cd rocketmq-all-4.3.0/

mvn -Prelease-all -DskipTests clean install -U

cd distribution/target/apache-rocketmq

4.開啓nameserver

     nohup sh bin/mqnamesrv &

5.開啓brokerserver

     nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true &

6.測試發送信息

     1. export NAMESRV_ADDR=localhost:9876

     2. sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

          SendResult [sendStatus=SEND_OK, msgId= ...

     3. sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

          ConsumeMessageThread_%d Receive New Messages: [MessageExt...

7.關閉服務

sh bin/mqshutdown broker

sh bin/mqshutdown namesrv

8.代碼實戰

生產者

import org.apache.rocketmq.client.producer.DefaultMQProducer;

import org.apache.rocketmq.client.producer.SendResult;

import org.apache.rocketmq.common.message.Message;

import org.apache.rocketmq.remoting.common.RemotingHelper;

 

public class TestProducerZk {

public static void main(String[] args) {

 

try{

DefaultMQProducer producer = new

DefaultMQProducer("testGroup");

producer.setNamesrvAddr("localhost:9876");

//Launch the instance.

producer.start();

for (int i = 0; i < 6; i++) {

//Create a message instance, specifying topic, tag , key and message body.

Message msg = new Message("TopicTest" ,

"TagA" , String.valueOf(i),

("Hello RocketMQ " +

i).getBytes(RemotingHelper.DEFAULT_CHARSET)

);

SendResult sendResult = producer.send(msg);

System.out.printf("%s%n", sendResult);

}

producer.shutdown();

}catch (Exception e){

e.printStackTrace();

}

}

}

消費者

import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;

import com.alibaba.rocketmq.client.exception.MQClientException;

import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;

import.MqMessageListenerTest;

 

public class TestConsumerZk {

public static void main(String[] args) throws MQClientException {

String consumerGroupId = "mq_consumer_v001";

String serverIpPort = "localhost:9876";

String mqTopic = "TopicTest";

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroupId);

consumer.setNamesrvAddr(serverIpPort);

consumer.subscribe(mqTopic, "*");

consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);

consumer.setConsumeMessageBatchMaxSize(1);

MqMessageListenerTest mqMessageListener = new MqMessageListenerTest();

consumer.registerMessageListener(mqMessageListener);

consumer.start();

System.out.println("Consumer Started.");

}

}

 

import com.alibaba.rocketmq.client.consumer.listener.ConsumeOrderlyContext;

import com.alibaba.rocketmq.client.consumer.listener.ConsumeOrderlyStatus;

import com.alibaba.rocketmq.client.consumer.listener.MessageListenerOrderly;

import com.alibaba.rocketmq.common.message.MessageExt;

import java.util.List;

 

public class MqMessageListenerTest implements MessageListenerOrderly {

@Override

public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {

if(msgs.size() == 0){

return ConsumeOrderlyStatus.SUCCESS;

}

try {

for (MessageExt msg : msgs) {

String keys = msg.getKeys();

String mqTopic = msg.getTopic();

String body = "keys is " + keys + " ,mqTopic is " + mqTopic + " ,body is " + new String( msg.getBody());

System.out.println(body);

}

} catch (Exception e) {

e.printStackTrace();

// 消費異常 消費者會立馬重新消費這條消息

return ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT;

}

// 非主動提交的時候,SUCCESS不會導致隊列消息提交,消息未提交就可以被循環消費

return ConsumeOrderlyStatus.SUCCESS;

}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章