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;
}
}