1.搭建步骤

官方文档已经写的十分详细了。这里我记录一下自己的操作步骤。

  1. 进入RocketMQ的官网(http://rocketmq.apache.org/),并点击Documentation
  2. 首先看到的是QuickStart这一节,之后我们就照着文档,在windows上搭建起环境
  3. 启动步骤记录

①下载RocketMQ的zip包,下面是直接的下载链接(其他版本,修改版本号即可下载)
https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.0/rocketmq-all-4.3.0-bin-release.zip
②将下载后的包放入一个纯英文的目录下,并解压
③配置环境变量
image.png
image.png
④启动name server
image.png
image.png
执行 .\mqnamesrv.cmd
image.png
⑤启动broker server
同④一样在bin目录下输入 cmd 进入dos命令行。
执行 .\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
image.png

  1. 可是化控制台的使用

①在git上下载控制台源码(是一个springboot程序)这里我们已经将源码打成了jar包。可以问作者要
②将jar包下载到本地window上
③启动jar包

  1. java -jar rocketmq-console-ng-1.0.0.jar --server.port 8080

image.png
④浏览器访问localhost:8080(如果自己在启动命令指定了port,访问自己port就好)
image.png

2.使用java程序进行消息生产(坑、坑、坑)

  1. 官方文档中,搭建完环境后,就是撸码呗,我们最终目的就是用java代码生产消费消息
  2. 来到官方的simple Example

①导入jar包

  1. <dependency>
  2. <groupId>org.apache.rocketmq</groupId>
  3. <artifactId>rocketmq-client</artifactId>
  4. <version>4.3.0</version>
  5. </dependency>

②新建一个类写个main方法(官方的2.1的代码复制过来呗,没啥问题吧)

  1. public class SyncProducer {
  2. public static void main(String[] args) throws Exception {
  3. //Instantiate with a producer group name.
  4. DefaultMQProducer producer = new
  5. DefaultMQProducer("please_rename_unique_group_name");
  6. // Specify name server addresses.
  7. producer.setNamesrvAddr("localhost:9876");
  8. //Launch the instance.
  9. producer.start();
  10. for (int i = 0; i < 100; i++) {
  11. //Create a message instance, specifying topic, tag and message body.
  12. Message msg = new Message("TopicTest" /* Topic */,
  13. "TagA" /* Tag */,
  14. ("Hello RocketMQ " +
  15. i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
  16. );
  17. //Call send message to deliver message to one of brokers.
  18. SendResult sendResult = producer.send(msg);
  19. System.out.printf("%s%n", sendResult);
  20. }
  21. //Shut down once the producer instance is not longer in use.
  22. producer.shutdown();
  23. }
  24. }
  1. 执行(run 一把呗)

很遗憾你会报下面的错误,怎么办?复制错误百度呗。

image.png

  1. 百度的结果

ok,你会搜到下面的文章,然后你配置后,对不起依旧报错。然后你可能会看到评论区有人说4.7.1还是错,引导你错误的质疑是版本问题。然而都不是。
image.png

image.png

  1. 解决方法

在官方的这段代码中,在使用生产者对象发送消息时,没有设置超时时间,默认的超时时间太短了。??不知道我说的是什么?? 简单的说就是执行下面这段代码,你会得到正确结果

  1. @Test
  2. public void testSendSyncMessage() throws Exception{
  3. //Instantiate with a producer group name.
  4. DefaultMQProducer producer = new
  5. DefaultMQProducer("please_rename_unique_group_name");
  6. // Specify name server addresses.
  7. producer.setNamesrvAddr("localhost:9876");
  8. //Launch the instance.
  9. producer.start();
  10. for (int i = 0; i < 100; i++) {
  11. //Create a message instance, specifying topic, tag and message body.
  12. Message msg = new Message("TopicTest" /* Topic */,
  13. "TagA" /* Tag */,
  14. ("Hello RocketMQ " +
  15. i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
  16. );
  17. //Call send message to deliver message to one of brokers.
  18. SendResult sendResult = producer.send(msg,40000);
  19. System.out.printf("%s%n", sendResult);
  20. }
  21. //Shut down once the producer instance is not longer in use.
  22. producer.shutdown();
  23. }

没错看看 第 18行。。 就是设置个 请求时间的问题 。。唉心累

3.关于Broker启动

在1中已经记录了RocketMQ的启动流程。在启动Broker时我们是通过命令行的方式指定了一些配置:指定自动创建Topic,指定NameServer
本节主要是想通过配置文件的方式指定去启动Broker。

如何指定配置文件

在官方Dledger集群搭建集群管理中都隐约的点出了如何使用配置文件。那就是通过-c来指定配置文件文件路径即可

  1. .\mqbroker.cmd -n localhost:9876 -c ..\conf\broker.conf

-n:此参数也可以在配置文件中指定 -c:指定配置文件,在配置文件中指定 autoCreateTopicEnable=true 等价于命令行中指定

Broker配置文件项

Broker配置文件的配置项在官方文档最佳实践中提到

配置项 默认值 说明
autoCreateTopicEnable true(4.9) 是否自动创建Topic
namesrvAddr localhost:9876 指定NameServer地址,多个用逗号隔开
brokerName broker的名称
brokerClusterName Broker所在的集群名称
brokerId 0 0:Master,>1:Slave
storePathRootDir $HOME/store/ 存储根路径
brokerRole ASYNC_MASTER broker角色:SYNC_MASTER/ASYNC_MASTER/SLAVE
flushDiskType ASYNC_FLUSH 刷盘策略:SYNC_FLUSH/ASYNC_FLUSH

提供一份我的配置文件:

  1. autoCreateTopicEnable = true
  2. namesrvAddr = localhost:9876
  3. brokerClusterName = GxCluster
  4. brokerName = broker-gx
  5. brokerId = 0
  6. storePathRootDir = E:\\studyProcess\\rocketmq\\rocketmq-all-4.9.3-bin-release\\rocketmq-4.9.3\\store
  7. deleteWhen = 04
  8. fileReservedTime = 48
  9. brokerRole = ASYNC_MASTER
  10. flushDiskType = ASYNC_FLUSH

提供我最终的启动命令

  1. .\bin\mqbroker.cmd -c .\conf\broker.conf