> ## Content Index
> Fetch the complete content index at: https://blog.hacking.pub/llms.txt
> Use this file to discover other available public pages before exploring further.

# rocketmq 初试
- URL: https://blog.hacking.pub/2017/06/22/rocketmq-chu-shi/
- Published: 2017-06-22T09:40:40.000Z
- Updated: 2017-06-24T00:56:50.000Z
- Author: chainhelen
- Tags: mq, 消息队列, rocketmq, rocket

#### 环境

个人电脑

> win10、jdk1.8.0\_121、idea2.6.2、rocketmq4.0.0-incubating、mvn3.3.9

#### 下载源码

一开始下载rocketmq的源码[3.5.8](https://codeload.github.com/alibaba/RocketMQ/zip/v3.5.8?ref=blog.hacking.pub)，但是导入idea编译报错

```
Error:(34, 8) java: com.alibaba.rocketmq.broker.plugin.MockMessageStore不是抽象的, 并且未覆盖com.alibaba.rocketmq.store.MessageStore中的抽象方法lockTimeMills()

```

猜测是jdk版本问题，我没有解决

选择了新的版本[4.0.0-incubating](https://github.com/apache/incubator-rocketmq/tree/release-4.0.0-incubating?ref=blog.hacking.pub)

#### 导入idea

选择 `File -> New -> Project from existing sources` 导入项目格式选择`maven`  
可以勾选自动下载pom文件依赖

#### Debug

把项目的目录，添加为新的环境变量`ROCKETMQ_HOME`  
当然也可以不添加在环境变量中，直接在代码里加入

```
final NamesrvConfig namesrvConfig = new NamesrvConfig();
namesrvConfig.setRocketmqHome("C:\Users\chainhelen\mq\Rocket4.0.0");

```

注意先启动 namesrv，再启动broker  
在代码中可以查看到，namesrc默认监听端口为9876，故在启动之前可以先检查一下9876端口防止端口冲突

#### Test

编写例子，注意网上的例子大多还是原版本，所以导入的packet是不一样的  
早期的packet名字

```
import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;

```

加入apache后

```
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.MessageListener;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;

```

#### linux编译

```
mvn -Dmaven.test.skip=true clean package install assembly:assembly   -P release-all  -U

```

关键参数在于`-P release-all`不能少  
这样生成的target里面会有`apache-rocketmq-all`以及它的压缩包