安装
第一步:下载RocketMQ最新版本,选择"Binary"
Release Notes - Apache RocketMQ - Version 4.4.0rocketmq.apache.org

第二步:解压下载安装包,配置环境变量,将安装报改名字为rocketmq


第三步:启动rocketmq服务(注意启动服务先别关闭窗口)
1.启动 mqnamesrv.cmd(或者cmd命令框执行进入至‘MQ文件夹bin’下,然后执行‘start mqnamesrv.cmd’,启动NAMESERVER。成功后会弹出提示框,此框勿关闭。)
2.启动mqbroker.cmd(cmd命令框执行进入至‘MQ文件夹bin’下,然后执行‘start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true’,启动BROKER。成功后会弹出提示框,此框勿关闭。)

第四步:下载rocketmq插件
github地址
apache/rocketmq-externalsgithub.com

下载完成之后,进入‘rocketmq-externalsrocketmq-consolesrcmainresources’文件夹,打开‘application.properties’进行配置。

第五步:maven打包(注意打包这块可能会报错,需要手动修改pom文件)
进入‘rocketmq-externalsrocketmq-console’文件夹,执行‘mvn clean package -Dmaven.test.skip=true’,编译生成。


第六步:运行jar包,访问我们刚修改的ip+端口号,我的就是127.0.0.1:8081
rocketmq-console-ng-1.0.0.jar

注意事项:
在部署RocketMQ插件时,执行maven指令mvn spring-boot:run时遇到org.apache.rocketmq:rocketmq-tools:jar:4.4.0-SNAPSHOT等三个jar包无法下载的问题:那么我们只需要修改pom文件,声明的版本为<rocketmq.version>4.4.0</rocketmq.version>即可.

使用
第一步:导入依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.1.0-incubating</version>
</dependency>
第二步:创建生产者
package xufei.rocketmq.producer;
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 org.apache.rocketmq.remoting.common.RemotingHelper;
/**
* Filename: Producer
* Description:
* Copyright: Copyright (c) 2016-2017 All Rights Reserved.
* Company:
*
* @author: xufei
* @version: 1.0
* Create at: 2019年03月21日 10:42
* <p>
* Modification History:
* Date Author Version Description
* ------------------------------------------------------------------
* 2019年03月21日 xufei 1.0 1.0 Version
*/
public class Producer {
public static void main(String[] args) throws InterruptedException, MQClientException {
//声明并初始化一个producer
//需要一个producer group名字作为构造方法的参数,这里为producer1
DefaultMQProducer producer = new DefaultMQProducer("producer1");
//设置NameServer地址,此处应改为实际NameServer地址,多个地址之间用;分隔
//NameServer的地址必须有,但是也可以通过环境变量的方式设置,不一定非得写死在代码里
producer.setNamesrvAddr("127.0.0.1:9876;10.1.54.122:9876");
//调用start()方法启动一个producer实例
producer.start();
//发送10条消息到Topic为TopicTest,tag为TagA,消息内容为“Hello RocketMQ”拼接上i的值
for (int i = 0; i < 10; i++) {
try {
Message msg = new Message("TopicTest",// topic
"TagA",// tag
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)// body
);
//调用producer的send()方法发送消息
//这里调用的是同步的方式,所以会有返回结果
SendResult sendResult = producer.send(msg);
//打印返回结果,可以看到消息发送的状态以及一些相关信息
System.out.println(sendResult);
} catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
//发送完消息之后,调用shutdown()方法关闭producer
producer.shutdown();
}
}
第三步:创建消费者
package com.xufei.rocketmq;
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;
/**
* Filename: Consumer
* Description:
* Copyright: Copyright (c) 2016-2017 All Rights Reserved.
* Company:
*
* @author: xufei
* @version: 1.0
* Create at: 2019年03月21日 10:44
* <p>
* Modification History:
* Date Author Version Description
* ------------------------------------------------------------------
* 2019年03月21日 xufei 1.0 1.0 Version
*/
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException, MQClientException {
//声明并初始化一个consumer
//需要一个consumer group名字作为构造方法的参数,这里为consumer1
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer1");
//同样也要设置NameServer地址
consumer.setNamesrvAddr("127.0.0.1:9876;10.1.54.122:9876");
//这里设置的是一个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("TopicTest", "*");
//设置一个Listener,主要进行消息的逻辑处理
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
//返回消费状态
//CONSUME_SUCCESS 消费成功
//RECONSUME_LATER 消费失败,需要稍后重新消费
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//调用start()方法启动consumer
consumer.start();
System.out.println("Consumer Started.");
}
}
