You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by du...@apache.org on 2022/10/14 02:05:27 UTC
[rocketmq-site] branch new-official-website updated: Remove Chinese characters in URL path of new website. (#325)
This is an automated email from the ASF dual-hosted git repository.
duhengforever pushed a commit to branch new-official-website
in repository https://gitbox.apache.org/repos/asf/rocketmq-site.git
The following commit(s) were added to refs/heads/new-official-website by this push:
new ffd60dc5f Remove Chinese characters in URL path of new website. (#325)
ffd60dc5f is described below
commit ffd60dc5f73a693e7d7248c4860e34fde27c5055
Author: gongzhongqiang <76...@qq.com>
AuthorDate: Fri Oct 14 10:05:21 2022 +0800
Remove Chinese characters in URL path of new website. (#325)
* [ISSUES #311]Remove Chinese characters in URL path of new website.
* bump docusaurus version.
* fix .
Co-authored-by: gongzhongqiang <go...@gigacloudtech.com>
---
.../01-introduction/01whychoose.md | 0
.../01-introduction/02quickstart.md | 0
.../01-introduction/03whatis.md | 6 +-
.../02-producer/04concept1.md | 0
.../02-producer/05message1.md | 0
.../02-producer/06message2.md | 0
.../02-producer/07message3.md | 0
.../02-producer/08message4.md | 0
.../02-producer/09message5.md | 0
.../03-consumer/11concept2.md | 0
.../12push.md" => docs/03-consumer/12push.md | 0
.../13pull.md" => docs/03-consumer/13pull.md | 0
.../15deploy.md" => docs/04-deployment/15deploy.md | 0
.../04-deployment/16admintool.md | 0
.../04-deployment/17Dashboard.md | 0
.../04-deployment/18Exporter.md | 0
.../05-bestPractice/15bestpractice.md | 464 ++++++++++-----------
.../05-bestPractice/16dledger.md | 0
.../05-bestPractice/17messagetra.md | 0
.../05-bestPractice/18access.md | 0
.../19JVMOS.md" => docs/05-bestPractice/19JVMOS.md | 0
.../20log.md" => docs/05-bestPractice/20log.md | 0
.../05-bestPractice/21subscribe.md | 0
.../22FAQ.md" => docs/05-bestPractice/22FAQ.md | 0
.../06-parameterConfiguration/23local.md | 0
.../06-parameterConfiguration/24server.md | 0
.../07-strems/30RocketMQ Streams Overview.md | 0
.../07-strems/31RocketMQ Streams Concept.md | 0
.../07-strems/32RocketMQ Streams Quick Start.md | 0
.../07-strems/33RocketMQ Streams In Action.md | 0
.../08-contributionGuide/29how-to-contribute.md | 8 +-
.../08-contributionGuide/30code-guidelines.md | 0
.../08-contributionGuide/31pull-request.md | 2 +-
.../08-contributionGuide/32release-manual.md | 0
docusaurus.config.js | 40 +-
.../en/docusaurus-plugin-content-docs/current.json | 14 +-
.../current/01-introduction/01whychoose.md | 0
.../current/01-introduction/02quickstart.md | 0
.../current/01-introduction/03whatis.md | 6 +-
.../current/02-producer/04concept1.md | 0
.../current/02-producer/05message1.md | 0
.../current/02-producer/06message2.md | 0
.../current/02-producer/07message3.md | 0
.../current/02-producer/08message4.md | 0
.../current/02-producer/09message5.md | 0
.../current/03-consumer/11concept2.md | 0
.../current/03-consumer/12push.md | 0
.../current/03-consumer/13pull.md | 0
.../current/04-deployment/15deploy.md | 0
.../current/04-deployment/16admintool.md | 0
.../current/04-deployment/17Dashboard.md | 0
.../current/04-deployment/18Exporter.md | 0
.../current/05-bestPractice/15bestpractice.md | 456 ++++++++++----------
.../current/05-bestPractice/16dledger.md | 0
.../current/05-bestPractice/17messagetra.md | 0
.../current/05-bestPractice/18access.md | 0
.../current/05-bestPractice/19JVMOS.md | 0
.../current/05-bestPractice/21subscribe.md | 0
.../current/05-bestPractice/22FAQ.md | 0
.../current/06-parameterConfiguration/23local.md | 0
.../07-strems/30RocketMQ Streams Overview.md | 0
.../07-strems/31RocketMQ Streams Concept.md | 0
.../07-strems/32RocketMQ Streams Quick Start.md | 0
.../07-strems/33RocketMQ Streams In Action.md | 0
.../08-contributionGuide/29how-to-contribute.md | 8 +-
.../08-contributionGuide/30code-guidelines.md | 0
.../current/08-contributionGuide/31pull-request.md | 2 +-
.../08-contributionGuide/32release-manual.md | 0
.../version-5.0.json | 24 +-
.../version-5.0/01-introduction/01whychoose.md | 0
.../version-5.0/01-introduction/02concepts.md | 22 +-
.../version-5.0/01-introduction/03limits.md | 0
.../version-5.0/02-quickStart/02quickstart.md | 4 +-
.../version-5.0/03-domainModel/01main.md | 14 +-
.../version-5.0/03-domainModel/02topic.md | 12 +-
.../version-5.0/03-domainModel/03messagequeue.md | 0
.../version-5.0/03-domainModel/04message.md | 18 +-
.../version-5.0/03-domainModel/04producer.md | 8 +-
.../version-5.0/03-domainModel/07consumergroup.md | 14 +-
.../version-5.0/03-domainModel/08consumer.md | 8 +-
.../version-5.0/03-domainModel/09subscription.md | 4 +-
.../04-featureBehavior/01normalmessage.md | 0
.../04-featureBehavior/02delaymessage.md | 6 +-
.../04-featureBehavior/03fifomessage.md | 0
.../04-featureBehavior/04transactionmessage.md | 4 +-
.../04-featureBehavior/05sendretrypolicy.md | 0
.../04-featureBehavior/06consumertype.md | 0
.../04-featureBehavior/07messagefilter.md | 2 +-
.../04-featureBehavior/08consumerloadbalance.md | 0
.../04-featureBehavior/09consumerprogress.md | 2 +-
.../04-featureBehavior/10consumerretrypolicy.md | 6 +-
.../04-featureBehavior/11messagestorepolicy.md | 2 +-
.../05-deploymentOperations/15deploy.md | 0
.../05-deploymentOperations/16admintool.md | 0
.../05-deploymentOperations/17Dashboard.md | 0
.../05-deploymentOperations/18Exporter.md | 0
.../version-5.0/06-bestPractice/15bestpractice.md | 208 ++++-----
.../version-5.0/06-bestPractice/16dledger.md | 0
.../version-5.0/06-bestPractice/18access.md | 0
.../version-5.0/06-bestPractice/19JVMOS.md | 0
.../version-5.0/06-bestPractice/21subscribe.md | 2 +-
.../version-5.0/06-bestPractice/22FAQ.md | 0
.../07-contributionGuide/29how-to-contribute.md | 8 +-
.../07-contributionGuide/30code-guidelines.md | 0
.../07-contributionGuide/31pull-request.md | 2 +-
.../07-contributionGuide/32release-manual.md | 0
.../08-streams/30RocketMQ Streams Overview.md | 0
.../08-streams/31RocketMQ Streams Concept.md | 0
.../08-streams/32RocketMQ Streams Quick Start.md | 0
.../08-streams/33RocketMQ Streams In Action.md | 0
package.json | 6 +-
release-notes/2017-01-24-4.0.0.md | 2 +-
release-notes/2017-12-13-4.2.0.md | 2 +-
release-notes/2018-07-24-4.3.0.md | 2 +-
release-notes/2018-08-29-4.3.1.md | 2 +-
release-notes/2018-11-02-4.3.2.md | 2 +-
release-notes/2019-01-17-4.4.0.md | 2 +-
release-notes/2019-03-29-4.5.0.md | 2 +-
release-notes/2019-05-13-4.5.1.md | 2 +-
release-notes/2019-08-02-4.5.2.md | 2 +-
release-notes/2019-11-25-4.6.0.md | 2 +-
release-notes/2020-03-16-4.7.0.md | 2 +-
release-notes/2020-06-29-4.7.1.md | 2 +-
release-notes/2020-12-21-4.8.0.md | 2 +-
release-notes/2020-2-14-4.6.1.md | 2 +-
release-notes/2021-06-15-4.9.0.md | 2 +-
release-notes/2021-08-22-4.9.1.md | 2 +-
release-notes/2021-10-26-4.9.2.md | 2 +-
release-notes/2022-03-04-4.9.3.md | 2 +-
release-notes/2022-03-04-4.9.4.md | 2 +-
release-notes/2022-03-15-5.0.0-ALPHA.md | 2 +-
release-notes/2022-09-09-5.0.0.md | 2 +-
src/pages/components/Community.js | 2 +-
src/pages/components/Hero.js | 2 +-
.../version-5.0/01-introduction/01whychoose.md | 0
.../version-5.0/01-introduction/02concepts.md | 28 +-
.../version-5.0/01-introduction/03limits.md | 0
.../version-5.0/02-quickStart/02quickstart.md | 4 +-
.../version-5.0/03-domainModel/01main.md | 14 +-
.../version-5.0/03-domainModel/02topic.md | 12 +-
.../version-5.0/03-domainModel/03messagequeue.md | 0
.../version-5.0/03-domainModel/04message.md | 16 +-
.../version-5.0/03-domainModel/04producer.md | 8 +-
.../version-5.0/03-domainModel/07consumergroup.md | 12 +-
.../version-5.0/03-domainModel/08consumer.md | 8 +-
.../version-5.0/03-domainModel/09subscription.md | 4 +-
.../04-featureBehavior/01normalmessage.md | 0
.../04-featureBehavior/02delaymessage.md | 2 +-
.../04-featureBehavior/03fifomessage.md | 0
.../04-featureBehavior/04transactionmessage.md | 4 +-
.../04-featureBehavior/05sendretrypolicy.md | 0
.../04-featureBehavior/06consumertype.md | 0
.../04-featureBehavior/07messagefilter.md | 2 +-
.../04-featureBehavior/08consumerloadbalance.md | 0
.../04-featureBehavior/09consumerprogress.md | 2 +-
.../04-featureBehavior/10consumerretrypolicy.md | 6 +-
.../04-featureBehavior/11messagestorepolicy.md | 2 +-
.../05-deploymentOperations/15deploy.md | 0
.../05-deploymentOperations/16admintool.md | 0
.../05-deploymentOperations/16autoswitchdeploy.md | 0
.../05-deploymentOperations/17Dashboard.md | 0
.../05-deploymentOperations/18Exporter.md | 0
.../version-5.0/06-bestPractice/15bestpractice.md | 208 ++++-----
.../version-5.0/06-bestPractice/16dledger.md | 0
.../version-5.0/06-bestPractice/18access.md | 0
.../version-5.0/06-bestPractice/19JVMOS.md | 0
.../version-5.0/06-bestPractice/21subscribe.md | 2 +-
.../version-5.0/06-bestPractice/22FAQ.md | 0
.../07-streams/30RocketMQ Streams Overview.md | 0
.../07-streams/31RocketMQ Streams Concept.md | 0
.../07-streams/32RocketMQ Streams Quick Start.md | 0
.../07-streams/33RocketMQ Streams In Action.md | 0
.../08-contributionGuide/29how-to-contribute.md | 8 +-
.../08-contributionGuide/30code-guidelines.md | 0
.../08-contributionGuide/31pull-request.md | 2 +-
.../08-contributionGuide/32release-manual.md | 0
176 files changed, 887 insertions(+), 885 deletions(-)
diff --git "a/docs/01-\344\273\213\347\273\215/01whychoose.md" b/docs/01-introduction/01whychoose.md
similarity index 100%
rename from "docs/01-\344\273\213\347\273\215/01whychoose.md"
rename to docs/01-introduction/01whychoose.md
diff --git "a/docs/01-\344\273\213\347\273\215/02quickstart.md" b/docs/01-introduction/02quickstart.md
similarity index 100%
rename from "docs/01-\344\273\213\347\273\215/02quickstart.md"
rename to docs/01-introduction/02quickstart.md
diff --git "a/docs/01-\344\273\213\347\273\215/03whatis.md" b/docs/01-introduction/03whatis.md
similarity index 97%
rename from "docs/01-\344\273\213\347\273\215/03whatis.md"
rename to docs/01-introduction/03whatis.md
index 068845727..baf18ac7d 100644
--- "a/docs/01-\344\273\213\347\273\215/03whatis.md"
+++ b/docs/01-introduction/03whatis.md
@@ -14,18 +14,18 @@ import TabItem from '@theme/TabItem';
<TabItem value="生产者" label="生产者" default>
负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。
-更多详见 ➡️ [生产者](../02-生产者/04concept1.md)
+更多详见 ➡️ [生产者](../02-producer/04concept1.md)
</TabItem>
<TabItem value="消费者" label="消费者">
负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。
-更多详见 ➡️ [消费者](../03-消费者/11concept2.md)
+更多详见 ➡️ [消费者](../03-consumer/11concept2.md)
</TabItem>
<TabItem value="消息主题" label="主题">
表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。
-更多详见 ➡️ [基本概念](../02-生产者/04concept1.md)
+更多详见 ➡️ [基本概念](../02-producer/04concept1.md)
</TabItem>
</Tabs>
diff --git "a/docs/02-\347\224\237\344\272\247\350\200\205/04concept1.md" b/docs/02-producer/04concept1.md
similarity index 100%
rename from "docs/02-\347\224\237\344\272\247\350\200\205/04concept1.md"
rename to docs/02-producer/04concept1.md
diff --git "a/docs/02-\347\224\237\344\272\247\350\200\205/05message1.md" b/docs/02-producer/05message1.md
similarity index 100%
rename from "docs/02-\347\224\237\344\272\247\350\200\205/05message1.md"
rename to docs/02-producer/05message1.md
diff --git "a/docs/02-\347\224\237\344\272\247\350\200\205/06message2.md" b/docs/02-producer/06message2.md
similarity index 100%
rename from "docs/02-\347\224\237\344\272\247\350\200\205/06message2.md"
rename to docs/02-producer/06message2.md
diff --git "a/docs/02-\347\224\237\344\272\247\350\200\205/07message3.md" b/docs/02-producer/07message3.md
similarity index 100%
rename from "docs/02-\347\224\237\344\272\247\350\200\205/07message3.md"
rename to docs/02-producer/07message3.md
diff --git "a/docs/02-\347\224\237\344\272\247\350\200\205/08message4.md" b/docs/02-producer/08message4.md
similarity index 100%
rename from "docs/02-\347\224\237\344\272\247\350\200\205/08message4.md"
rename to docs/02-producer/08message4.md
diff --git "a/docs/02-\347\224\237\344\272\247\350\200\205/09message5.md" b/docs/02-producer/09message5.md
similarity index 100%
rename from "docs/02-\347\224\237\344\272\247\350\200\205/09message5.md"
rename to docs/02-producer/09message5.md
diff --git "a/docs/03-\346\266\210\350\264\271\350\200\205/11concept2.md" b/docs/03-consumer/11concept2.md
similarity index 100%
rename from "docs/03-\346\266\210\350\264\271\350\200\205/11concept2.md"
rename to docs/03-consumer/11concept2.md
diff --git "a/docs/03-\346\266\210\350\264\271\350\200\205/12push.md" b/docs/03-consumer/12push.md
similarity index 100%
rename from "docs/03-\346\266\210\350\264\271\350\200\205/12push.md"
rename to docs/03-consumer/12push.md
diff --git "a/docs/03-\346\266\210\350\264\271\350\200\205/13pull.md" b/docs/03-consumer/13pull.md
similarity index 100%
rename from "docs/03-\346\266\210\350\264\271\350\200\205/13pull.md"
rename to docs/03-consumer/13pull.md
diff --git "a/docs/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/15deploy.md" b/docs/04-deployment/15deploy.md
similarity index 100%
rename from "docs/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/15deploy.md"
rename to docs/04-deployment/15deploy.md
diff --git "a/docs/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/16admintool.md" b/docs/04-deployment/16admintool.md
similarity index 100%
rename from "docs/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/16admintool.md"
rename to docs/04-deployment/16admintool.md
diff --git "a/docs/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/17Dashboard.md" b/docs/04-deployment/17Dashboard.md
similarity index 100%
rename from "docs/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/17Dashboard.md"
rename to docs/04-deployment/17Dashboard.md
diff --git "a/docs/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/18Exporter.md" b/docs/04-deployment/18Exporter.md
similarity index 100%
rename from "docs/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/18Exporter.md"
rename to docs/04-deployment/18Exporter.md
diff --git "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md" b/docs/05-bestPractice/15bestpractice.md
similarity index 98%
rename from "docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md"
rename to docs/05-bestPractice/15bestpractice.md
index f2205fc7f..417000932 100644
--- "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md"
+++ b/docs/05-bestPractice/15bestpractice.md
@@ -1,232 +1,232 @@
-# 基本最佳实践
-
-## 生产者
-
-### 发送消息注意事项
-
-#### Tags的使用
-
-一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags("TagA")。
-
-#### Keys的使用
-
-每个消息在业务层面的唯一标识码要设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。
-
-
-```java
- // 订单Id
- String orderId = "20034568923546";
- message.setKeys(orderId);
-```
-#### 日志的打印
-
-消息发送成功或者失败要打印消息日志,务必要打印SendResult和key字段。send消息方法只要不抛异常,就代表发送成功。发送成功会有多个状态,在sendResult里定义。以下对每个状态进行说明:
-
-- **SEND_OK**
-
-消息发送成功。要注意的是消息发送成功也不意味着它是可靠的。要确保不会丢失任何消息,还应启用同步Master服务器或同步刷盘,即SYNC_MASTER或SYNC_FLUSH。
-
-
-- **FLUSH_DISK_TIMEOUT**
-
-消息发送成功但是服务器刷盘超时。此时消息已经进入服务器队列(内存),只有服务器宕机,消息才会丢失。消息存储配置参数中可以设置刷盘方式和同步刷盘时间长度,如果Broker服务器设置了刷盘方式为同步刷盘,即FlushDiskType=SYNC_FLUSH(默认为异步刷盘方式),当Broker服务器未在同步刷盘时间内(默认为5s)完成刷盘,则将返回该状态——刷盘超时。
-
-- **FLUSH_SLAVE_TIMEOUT**
-
-消息发送成功,但是服务器同步到Slave时超时。此时消息已经进入服务器队列,只有服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master即ASYNC_MASTER),并且从Broker服务器未在同步刷盘时间(默认为5秒)内完成与主服务器的同步,则将返回该状态——数据同步到Slave服务器超时。
-
-- **SLAVE_NOT_AVAILABLE**
-
-消息发送成功,但是此时Slave不可用。此时消息已经进入Master服务器队列,只有Master服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master服务器即ASYNC_MASTER),但没有配置slave Broker服务器,则将返回该状态——无Slave服务器可用。
-
-
-### 消息发送失败处理方式
-
-Producer的send方法本身支持内部重试,重试逻辑如下:
-
-- 至多重试2次(同步发送为2次,异步发送为0次)。
-- 如果发送失败,则轮转到下一个Broker。这个方法的总耗时时间不超过sendMsgTimeout设置的值,默认10s。
-- 如果本身向broker发送消息产生超时异常,就不会再重试。
-
-以上策略也是在一定程度上保证了消息可以发送成功。如果业务对消息可靠性要求比较高,建议应用增加相应的重试逻辑:比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
-
-上述db重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
-
-### 选择oneway形式发送
-通常消息的发送是这样一个过程:
-
-- 客户端发送请求到服务器
-- 服务器处理请求
-- 服务器向客户端返回应答
-
-所以,一次消息发送的耗时时间是上述三个步骤的总和,而某些场景要求耗时非常短,但是对可靠性要求并不高,例如日志收集类应用,此类应用可以采用oneway形式调用,oneway形式只发送请求不等待应答,而发送请求在客户端实现层面仅仅是一个操作系统系统调用的开销,即将数据写入客户端的socket缓冲区,此过程耗时通常在微秒级。
-
-## 客户端配置
-
-相对于RocketMQ的Broker集群,生产者和消费者都是客户端。本小节主要描述生产者和消费者公共的行为配置。
-
-### 客户端寻址方式
-
-RocketMQ可以令客户端找到Name Server, 然后通过Name Server再找到Broker。如下所示有多种配置方式,优先级由高到低,高优先级会覆盖低优先级。
-
-- 代码中指定Name Server地址,多个namesrv地址之间用分号分割
-
- ```java
- producer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");
-
- consumer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");
- ```
-
-- Java启动参数中指定Name Server地址
-
- ```text
- -Drocketmq.namesrv.addr=192.168.0.1:9876;192.168.0.2:9876
- ```
-
-- 环境变量指定Name Server地址
-
- ```text
- export NAMESRV_ADDR=192.168.0.1:9876;192.168.0.2:9876
- ```
-
-- HTTP静态服务器寻址(默认)
-
- 客户端启动后,会定时访问一个静态HTTP服务器,地址如下:<http://jmenv.tbsite.net:8080/rocketmq/nsaddr>,这个URL的返回内容如下:
-
- ```text
- 192.168.0.1:9876;192.168.0.2:9876
- ```
-
-客户端默认每隔2分钟访问一次这个HTTP服务器,并更新本地的Name Server地址。URL已经在代码中硬编码,可通过修改/etc/hosts文件来改变要访问的服务器,例如在/etc/hosts增加如下配置:
-```text
-10.232.22.67 jmenv.taobao.net
-```
-推荐使用HTTP静态服务器寻址方式,好处是客户端部署简单,且Name Server集群可以热升级。
-
-## 消费者
-
-### 消费过程幂等
-
-RocketMQ无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
-
-msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
-
-### 消费速度慢的处理方式
-
-### 提高消费并行度
-
-绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
-
-- 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度(需要注意的是超过订阅队列数的 Consumer 实例无效)。可以通过加机器,或者在已有机器启动多个进程的方式。
-- 提高单个 Consumer 的消费并行线程,通过修改参数 consumeThreadMin、consumeThreadMax实现。
-
-### 批量方式消费
-
-某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量,通过设置 consumer的 consumeMessageBatchMaxSize 返个参数,默认是 1,即一次只消费一条消息,例如设置为 N,那么每次消费的消息数小于等于 N。
-
-### 跳过非重要消息
-
-发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。例如,当某个队列的消息数堆积到100000条以上,则尝试丢弃部分或全部消息,这样就可以快速追上发送消息的速度。示例代码如下:
-
-```java
- public ConsumeConcurrentlyStatus consumeMessage(
- List<MessageExt> msgs,
- ConsumeConcurrentlyContext context) {
- long offset = msgs.get(0).getQueueOffset();
- String maxOffset =
- msgs.get(0).getProperty(Message.PROPERTY_MAX_OFFSET);
- long diff = Long.parseLong(maxOffset) - offset;
- if (diff > 100000) {
- // TODO 消息堆积情况的特殊处理
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
- // TODO 正常消费过程
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
-```
-
-
-#### 优化每条消息消费过程
-
-举例如下,某条消息的消费过程如下:
-
-- 根据消息从 DB 查询【数据 1】
-- 根据消息从 DB 查询【数据 2】
-- 复杂的业务计算
-- 向 DB 插入【数据 3】
-- 向 DB 插入【数据 4】
-
-这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。
-
-### 消费打印日志
-
-如果消息量较少,建议在消费入口方法打印消息,消费耗时等,方便后续排查问题。
-
-
-```java
- public ConsumeConcurrentlyStatus consumeMessage(
- List<MessageExt> msgs,
- ConsumeConcurrentlyContext context) {
- log.info("RECEIVE_MSG_BEGIN: " + msgs.toString());
- // TODO 正常消费过程
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
-```
-
-如果能打印每条消息消费耗时,那么在排查消费慢等线上问题时,会更方便。
-
-### 其他消费建议
-
-#### 关于消费者和订阅
-
-第一件需要注意的事情是,不同的消费者组可以独立的消费一些 topic,并且每个消费者组都有自己的消费偏移量,请确保同一组内的每个消费者订阅信息保持一致。
-
-#### 关于有序消息
-
-消费者将锁定每个消息队列,以确保他们被逐个消费,虽然这将会导致性能下降,但是当你关心消息顺序的时候会很有用。我们不建议抛出异常,你可以返回 ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT 作为替代。
-
-#### 关于并发消费
-
-顾名思义,消费者将并发消费这些消息,建议你使用它来获得良好性能,我们不建议抛出异常,你可以返回 ConsumeConcurrentlyStatus.RECONSUME_LATER 作为替代。
-
-#### 关于消费状态Consume Status
-
-对于并发的消费监听器,你可以返回 RECONSUME_LATER 来通知消费者现在不能消费这条消息,并且希望可以稍后重新消费它。然后,你可以继续消费其他消息。对于有序的消息监听器,因为你关心它的顺序,所以不能跳过消息,但是你可以返回SUSPEND_CURRENT_QUEUE_A_MOMENT 告诉消费者等待片刻。
-
-#### 关于Blocking
-
-不建议阻塞监听器,因为它会阻塞线程池,并最终可能会终止消费进程
-
-#### 关于线程数设置
-
-消费者使用 ThreadPoolExecutor 在内部对消息进行消费,所以你可以通过设置 setConsumeThreadMin 或 setConsumeThreadMax 来改变它。
-
-#### 关于消费位点
-
-当建立一个新的消费者组时,需要决定是否需要消费已经存在于 Broker 中的历史消息CONSUME_FROM_LAST_OFFSET 将会忽略历史消息,并消费之后生成的任何消息。CONSUME_FROM_FIRST_OFFSET 将会消费每个存在于 Broker 中的信息。你也可以使用 CONSUME_FROM_TIMESTAMP 来消费在指定时间戳后产生的消息。
-
-## Broker
-
-### Broker 角色
- Broker 角色分为 ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。如果对消息的可靠性要求比较严格,可以采用 SYNC_MASTER加SLAVE的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加SLAVE的部署方式。如果只是测试方便,则可以选择仅ASYNC_MASTER或仅SYNC_MASTER的部署方式。
-### FlushDiskType
- SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。
-### Broker 配置
-
-| 参数名 | 默认值 | 说明 |
-| -------------------------------- | ----------------------------- | ------------------------------------------------------------ |
-| listenPort | 10911 | 接受客户端连接的监听端口 |
-| namesrvAddr | null | nameServer 地址 |
-| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
-| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
-| brokerName | null | broker 的名称 |
-| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
-| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
-| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
-| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
-| mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
-| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
-| fileReserverdTime | 72 | 以小时计算的文件保留时间 |
-| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
-| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
-
+# 基本最佳实践
+
+## 生产者
+
+### 发送消息注意事项
+
+#### Tags的使用
+
+一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags("TagA")。
+
+#### Keys的使用
+
+每个消息在业务层面的唯一标识码要设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。
+
+
+```java
+ // 订单Id
+ String orderId = "20034568923546";
+ message.setKeys(orderId);
+```
+#### 日志的打印
+
+消息发送成功或者失败要打印消息日志,务必要打印SendResult和key字段。send消息方法只要不抛异常,就代表发送成功。发送成功会有多个状态,在sendResult里定义。以下对每个状态进行说明:
+
+- **SEND_OK**
+
+消息发送成功。要注意的是消息发送成功也不意味着它是可靠的。要确保不会丢失任何消息,还应启用同步Master服务器或同步刷盘,即SYNC_MASTER或SYNC_FLUSH。
+
+
+- **FLUSH_DISK_TIMEOUT**
+
+消息发送成功但是服务器刷盘超时。此时消息已经进入服务器队列(内存),只有服务器宕机,消息才会丢失。消息存储配置参数中可以设置刷盘方式和同步刷盘时间长度,如果Broker服务器设置了刷盘方式为同步刷盘,即FlushDiskType=SYNC_FLUSH(默认为异步刷盘方式),当Broker服务器未在同步刷盘时间内(默认为5s)完成刷盘,则将返回该状态——刷盘超时。
+
+- **FLUSH_SLAVE_TIMEOUT**
+
+消息发送成功,但是服务器同步到Slave时超时。此时消息已经进入服务器队列,只有服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master即ASYNC_MASTER),并且从Broker服务器未在同步刷盘时间(默认为5秒)内完成与主服务器的同步,则将返回该状态——数据同步到Slave服务器超时。
+
+- **SLAVE_NOT_AVAILABLE**
+
+消息发送成功,但是此时Slave不可用。此时消息已经进入Master服务器队列,只有Master服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master服务器即ASYNC_MASTER),但没有配置slave Broker服务器,则将返回该状态——无Slave服务器可用。
+
+
+### 消息发送失败处理方式
+
+Producer的send方法本身支持内部重试,重试逻辑如下:
+
+- 至多重试2次(同步发送为2次,异步发送为0次)。
+- 如果发送失败,则轮转到下一个Broker。这个方法的总耗时时间不超过sendMsgTimeout设置的值,默认10s。
+- 如果本身向broker发送消息产生超时异常,就不会再重试。
+
+以上策略也是在一定程度上保证了消息可以发送成功。如果业务对消息可靠性要求比较高,建议应用增加相应的重试逻辑:比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
+
+上述db重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
+
+### 选择oneway形式发送
+通常消息的发送是这样一个过程:
+
+- 客户端发送请求到服务器
+- 服务器处理请求
+- 服务器向客户端返回应答
+
+所以,一次消息发送的耗时时间是上述三个步骤的总和,而某些场景要求耗时非常短,但是对可靠性要求并不高,例如日志收集类应用,此类应用可以采用oneway形式调用,oneway形式只发送请求不等待应答,而发送请求在客户端实现层面仅仅是一个操作系统系统调用的开销,即将数据写入客户端的socket缓冲区,此过程耗时通常在微秒级。
+
+## 客户端配置
+
+相对于RocketMQ的Broker集群,生产者和消费者都是客户端。本小节主要描述生产者和消费者公共的行为配置。
+
+### 客户端寻址方式
+
+RocketMQ可以令客户端找到Name Server, 然后通过Name Server再找到Broker。如下所示有多种配置方式,优先级由高到低,高优先级会覆盖低优先级。
+
+- 代码中指定Name Server地址,多个namesrv地址之间用分号分割
+
+ ```java
+ producer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");
+
+ consumer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");
+ ```
+
+- Java启动参数中指定Name Server地址
+
+ ```text
+ -Drocketmq.namesrv.addr=192.168.0.1:9876;192.168.0.2:9876
+ ```
+
+- 环境变量指定Name Server地址
+
+ ```text
+ export NAMESRV_ADDR=192.168.0.1:9876;192.168.0.2:9876
+ ```
+
+- HTTP静态服务器寻址(默认)
+
+ 客户端启动后,会定时访问一个静态HTTP服务器,地址如下:<http://jmenv.tbsite.net:8080/rocketmq/nsaddr>,这个URL的返回内容如下:
+
+ ```text
+ 192.168.0.1:9876;192.168.0.2:9876
+ ```
+
+客户端默认每隔2分钟访问一次这个HTTP服务器,并更新本地的Name Server地址。URL已经在代码中硬编码,可通过修改/etc/hosts文件来改变要访问的服务器,例如在/etc/hosts增加如下配置:
+```text
+10.232.22.67 jmenv.taobao.net
+```
+推荐使用HTTP静态服务器寻址方式,好处是客户端部署简单,且Name Server集群可以热升级。
+
+## 消费者
+
+### 消费过程幂等
+
+RocketMQ无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
+
+msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
+
+### 消费速度慢的处理方式
+
+### 提高消费并行度
+
+绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
+
+- 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度(需要注意的是超过订阅队列数的 Consumer 实例无效)。可以通过加机器,或者在已有机器启动多个进程的方式。
+- 提高单个 Consumer 的消费并行线程,通过修改参数 consumeThreadMin、consumeThreadMax实现。
+
+### 批量方式消费
+
+某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量,通过设置 consumer的 consumeMessageBatchMaxSize 返个参数,默认是 1,即一次只消费一条消息,例如设置为 N,那么每次消费的消息数小于等于 N。
+
+### 跳过非重要消息
+
+发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。例如,当某个队列的消息数堆积到100000条以上,则尝试丢弃部分或全部消息,这样就可以快速追上发送消息的速度。示例代码如下:
+
+```java
+ public ConsumeConcurrentlyStatus consumeMessage(
+ List<MessageExt> msgs,
+ ConsumeConcurrentlyContext context) {
+ long offset = msgs.get(0).getQueueOffset();
+ String maxOffset =
+ msgs.get(0).getProperty(Message.PROPERTY_MAX_OFFSET);
+ long diff = Long.parseLong(maxOffset) - offset;
+ if (diff > 100000) {
+ // TODO 消息堆积情况的特殊处理
+ return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
+ }
+ // TODO 正常消费过程
+ return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
+ }
+```
+
+
+#### 优化每条消息消费过程
+
+举例如下,某条消息的消费过程如下:
+
+- 根据消息从 DB 查询【数据 1】
+- 根据消息从 DB 查询【数据 2】
+- 复杂的业务计算
+- 向 DB 插入【数据 3】
+- 向 DB 插入【数据 4】
+
+这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。
+
+### 消费打印日志
+
+如果消息量较少,建议在消费入口方法打印消息,消费耗时等,方便后续排查问题。
+
+
+```java
+ public ConsumeConcurrentlyStatus consumeMessage(
+ List<MessageExt> msgs,
+ ConsumeConcurrentlyContext context) {
+ log.info("RECEIVE_MSG_BEGIN: " + msgs.toString());
+ // TODO 正常消费过程
+ return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
+ }
+```
+
+如果能打印每条消息消费耗时,那么在排查消费慢等线上问题时,会更方便。
+
+### 其他消费建议
+
+#### 关于消费者和订阅
+
+第一件需要注意的事情是,不同的消费者组可以独立的消费一些 topic,并且每个消费者组都有自己的消费偏移量,请确保同一组内的每个消费者订阅信息保持一致。
+
+#### 关于有序消息
+
+消费者将锁定每个消息队列,以确保他们被逐个消费,虽然这将会导致性能下降,但是当你关心消息顺序的时候会很有用。我们不建议抛出异常,你可以返回 ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT 作为替代。
+
+#### 关于并发消费
+
+顾名思义,消费者将并发消费这些消息,建议你使用它来获得良好性能,我们不建议抛出异常,你可以返回 ConsumeConcurrentlyStatus.RECONSUME_LATER 作为替代。
+
+#### 关于消费状态Consume Status
+
+对于并发的消费监听器,你可以返回 RECONSUME_LATER 来通知消费者现在不能消费这条消息,并且希望可以稍后重新消费它。然后,你可以继续消费其他消息。对于有序的消息监听器,因为你关心它的顺序,所以不能跳过消息,但是你可以返回SUSPEND_CURRENT_QUEUE_A_MOMENT 告诉消费者等待片刻。
+
+#### 关于Blocking
+
+不建议阻塞监听器,因为它会阻塞线程池,并最终可能会终止消费进程
+
+#### 关于线程数设置
+
+消费者使用 ThreadPoolExecutor 在内部对消息进行消费,所以你可以通过设置 setConsumeThreadMin 或 setConsumeThreadMax 来改变它。
+
+#### 关于消费位点
+
+当建立一个新的消费者组时,需要决定是否需要消费已经存在于 Broker 中的历史消息CONSUME_FROM_LAST_OFFSET 将会忽略历史消息,并消费之后生成的任何消息。CONSUME_FROM_FIRST_OFFSET 将会消费每个存在于 Broker 中的信息。你也可以使用 CONSUME_FROM_TIMESTAMP 来消费在指定时间戳后产生的消息。
+
+## Broker
+
+### Broker 角色
+ Broker 角色分为 ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。如果对消息的可靠性要求比较严格,可以采用 SYNC_MASTER加SLAVE的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加SLAVE的部署方式。如果只是测试方便,则可以选择仅ASYNC_MASTER或仅SYNC_MASTER的部署方式。
+### FlushDiskType
+ SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。
+### Broker 配置
+
+| 参数名 | 默认值 | 说明 |
+| -------------------------------- | ----------------------------- | ------------------------------------------------------------ |
+| listenPort | 10911 | 接受客户端连接的监听端口 |
+| namesrvAddr | null | nameServer 地址 |
+| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
+| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
+| brokerName | null | broker 的名称 |
+| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
+| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
+| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
+| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
+| mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
+| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
+| fileReserverdTime | 72 | 以小时计算的文件保留时间 |
+| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
+| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
+
diff --git "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/16dledger.md" b/docs/05-bestPractice/16dledger.md
similarity index 100%
rename from "docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/16dledger.md"
rename to docs/05-bestPractice/16dledger.md
diff --git "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/17messagetra.md" b/docs/05-bestPractice/17messagetra.md
similarity index 100%
rename from "docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/17messagetra.md"
rename to docs/05-bestPractice/17messagetra.md
diff --git "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/18access.md" b/docs/05-bestPractice/18access.md
similarity index 100%
rename from "docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/18access.md"
rename to docs/05-bestPractice/18access.md
diff --git "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/19JVMOS.md" b/docs/05-bestPractice/19JVMOS.md
similarity index 100%
rename from "docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/19JVMOS.md"
rename to docs/05-bestPractice/19JVMOS.md
diff --git "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/20log.md" b/docs/05-bestPractice/20log.md
similarity index 100%
rename from "docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/20log.md"
rename to docs/05-bestPractice/20log.md
diff --git "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md" b/docs/05-bestPractice/21subscribe.md
similarity index 100%
rename from "docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md"
rename to docs/05-bestPractice/21subscribe.md
diff --git "a/docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/22FAQ.md" b/docs/05-bestPractice/22FAQ.md
similarity index 100%
rename from "docs/05-\346\234\200\344\275\263\345\256\236\350\267\265/22FAQ.md"
rename to docs/05-bestPractice/22FAQ.md
diff --git "a/docs/06-\345\217\202\346\225\260\351\205\215\347\275\256/23local.md" b/docs/06-parameterConfiguration/23local.md
similarity index 100%
rename from "docs/06-\345\217\202\346\225\260\351\205\215\347\275\256/23local.md"
rename to docs/06-parameterConfiguration/23local.md
diff --git "a/docs/06-\345\217\202\346\225\260\351\205\215\347\275\256/24server.md" b/docs/06-parameterConfiguration/24server.md
similarity index 100%
rename from "docs/06-\345\217\202\346\225\260\351\205\215\347\275\256/24server.md"
rename to docs/06-parameterConfiguration/24server.md
diff --git "a/docs/08-\346\265\201\350\256\241\347\256\227/30RocketMQ Streams Overview.md" b/docs/07-strems/30RocketMQ Streams Overview.md
similarity index 100%
rename from "docs/08-\346\265\201\350\256\241\347\256\227/30RocketMQ Streams Overview.md"
rename to docs/07-strems/30RocketMQ Streams Overview.md
diff --git "a/docs/08-\346\265\201\350\256\241\347\256\227/31RocketMQ Streams Concept.md" b/docs/07-strems/31RocketMQ Streams Concept.md
similarity index 100%
rename from "docs/08-\346\265\201\350\256\241\347\256\227/31RocketMQ Streams Concept.md"
rename to docs/07-strems/31RocketMQ Streams Concept.md
diff --git "a/docs/08-\346\265\201\350\256\241\347\256\227/32RocketMQ Streams Quick Start.md" b/docs/07-strems/32RocketMQ Streams Quick Start.md
similarity index 100%
rename from "docs/08-\346\265\201\350\256\241\347\256\227/32RocketMQ Streams Quick Start.md"
rename to docs/07-strems/32RocketMQ Streams Quick Start.md
diff --git "a/docs/08-\346\265\201\350\256\241\347\256\227/33RocketMQ Streams In Action.md" b/docs/07-strems/33RocketMQ Streams In Action.md
similarity index 100%
rename from "docs/08-\346\265\201\350\256\241\347\256\227/33RocketMQ Streams In Action.md"
rename to docs/07-strems/33RocketMQ Streams In Action.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md" b/docs/08-contributionGuide/29how-to-contribute.md
similarity index 88%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md"
rename to docs/08-contributionGuide/29how-to-contribute.md
index 5d8a88fa0..2947525c8 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md"
+++ b/docs/08-contributionGuide/29how-to-contribute.md
@@ -33,7 +33,7 @@ Apache RocketMQ 社区提供完备的处理流程帮您解答问题。
* 根据您的需求评估投入成本和设计解决方案
* 便于社区围绕该提案展开建设性的讨论
-若您计划实现自己的提案以贡献社区,同样需要提供详细描述信息,并遵循 [code-guidelines](/docs/贡献指南/30code-guidelines) 中的编码规范
+若您计划实现自己的提案以贡献社区,同样需要提供详细描述信息,并遵循 [code-guidelines](/docs/contributionGuide/30code-guidelines) 中的编码规范
我们推荐先在社区达成共识再着手实现功能。通过讨论新特性的必要性及实现方案等问题,可以早发现超出项目范围的提案。
@@ -63,7 +63,7 @@ Apache RocketMQ 在其活跃社区的推动下持续发展着。每隔几周我
2. 测试预发布版本并评分 (+1 未发现问题, -1 测试出问题)
3. 若预发布版本未测试出问题则发布,否则回到步骤 1
-我们在网站上整理了 [release-manual](/docs/贡献指南/32release-manual) 版本发布指南。测试预发行版是项大工程,我们需要吸纳更多人的参与。 RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
+我们在网站上整理了 [release-manual](/docs/contributionGuide/32release-manual) 版本发布指南。测试预发行版是项大工程,我们需要吸纳更多人的参与。 RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
@@ -71,10 +71,10 @@ RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发
## 贡献代码
-Apache RocketMQ 已然并将持续进行维护,优化,和扩展。因此 Apache RocketMQ 鼓励所有人贡献源代码。为给予代码贡献者和审查者极佳的代码贡献体验,并提供高质量的代码仓库,社区遵循 [code-guidelines](/docs/贡献指南/30code-guidelines) 中的贡献流程。编码手册包含构建开发环境指南,社区编码指南和编码风格,并介绍了如何提交贡献的代码。
+Apache RocketMQ 已然并将持续进行维护,优化,和扩展。因此 Apache RocketMQ 鼓励所有人贡献源代码。为给予代码贡献者和审查者极佳的代码贡献体验,并提供高质量的代码仓库,社区遵循 [code-guidelines](/docs/contributionGuide/30code-guidelines) 中的贡献流程。编码手册包含构建开发环境指南,社区编码指南和编码风格,并介绍了如何提交贡献的代码。
-**请务必在编码之前仔细阅读 [code-guidelines](/docs/贡献指南/30code-guidelines)
+**请务必在编码之前仔细阅读 [code-guidelines](/docs/contributionGuide/30code-guidelines)
并请阅读 [AFS Apache 软件基金会 贡献者协议](https://www.apache.org/licenses/contributor-agreements.html) 提交电子签名。
diff --git "a/docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/30code-guidelines.md" b/docs/08-contributionGuide/30code-guidelines.md
similarity index 100%
rename from "docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/30code-guidelines.md"
rename to docs/08-contributionGuide/30code-guidelines.md
diff --git "a/docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md" b/docs/08-contributionGuide/31pull-request.md
similarity index 98%
rename from "docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md"
rename to docs/08-contributionGuide/31pull-request.md
index 7b7e2954f..71f2edcee 100644
--- "a/docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md"
+++ b/docs/08-contributionGuide/31pull-request.md
@@ -96,7 +96,7 @@ head repository / compare : 开发仓库及开发分支
提交 PR 前,请先做如下确认:
1. 已创建与 PR 对应的 [GitHub Issue]( [apache/rocketmq: Mirror of Apache RocketMQ (github.com)](https://github.com/apache/rocketmq/issues) )
-2. 修改内容符合 [Coding Guidelines](/docs/贡献指南/30code-guidelines) 编程规范
+2. 修改内容符合 [Coding Guidelines](/docs/contributionGuide/30code-guidelines) 编程规范
3. PR 摘要以 [ISSUE #XXX] 开始并简要描述变更需求
4. 概述 PR 变更需求,变更日志,验证信息,可参考 [PR Demo](https://github.com/apache/rocketmq/pull/152)
5. 提交内容具备完整的测试用例,并确保基本检查,单元测试,集成测试通过
diff --git "a/docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/32release-manual.md" b/docs/08-contributionGuide/32release-manual.md
similarity index 100%
rename from "docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/32release-manual.md"
rename to docs/08-contributionGuide/32release-manual.md
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 3ba924364..46ba05e5b 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -153,11 +153,11 @@ const darkCodeTheme = require("prism-react-renderer/themes/dracula");
},
{
from: '/docs/rmq-arc',
- to: '/docs/领域模型/01main'
+ to: '/docs/domainModel/01main'
},
{
from: '/docs/rmq-deployment/',
- to: '/docs/部署运维/15deploy'
+ to: '/docs/deploymentOperations/15deploy'
},
{
from: '/docs/motivation/',
@@ -165,59 +165,59 @@ const darkCodeTheme = require("prism-react-renderer/themes/dracula");
},
{
from: ['/docs/quickstart/', '/docs/quick-start'],
- to: '/docs/快速入门/02quickstart'
+ to: '/docs/quickStart/02quickstart'
},
{
from: '/docs/how-to-contribute/',
- to: '/docs/贡献指南/29how-to-contribute'
+ to: '/docs/contributionGuide/29how-to-contribute'
},
{
from: '/docs/code-guidelines/',
- to: '/docs/贡献指南/30code-guidelines'
+ to: '/docs/contributionGuide/30code-guidelines'
},
{
from: '/docs/pull-request/',
- to: '/docs/贡献指南/31pull-request'
+ to: '/docs/contributionGuide/31pull-request'
},
{
from: '/docs/release-manual',
- to: '/docs/贡献指南/32release-manual'
+ to: '/docs/contributionGuide/32release-manual'
},
{
from: '/docs/cli-admin-tool/',
- to: '/docs/部署运维/16admintool'
+ to: '/docs/deploymentOperations/16admintool'
},
{
from: '/docs/system-config',
- to: '/docs/最佳实践/19JVMOS'
+ to: '/docs/bestPractice/19JVMOS'
},
{
from: '/docs/faq/',
- to: '/docs/最佳实践/22FAQ'
+ to: '/docs/bestPractice/22FAQ'
},
{
from: '/docs/logappender-example/',
- to: '/docs/4.x/最佳实践/20log'
+ to: '/docs/4.x/bestPractice/20log'
},
{
from: '/docs/order-example/',
- to: '/docs/4.x/生产者/06message2'
+ to: '/docs/4.x/producer/06message2'
},
{
from: '/docs/schedule-example/',
- to: '/docs/4.x/生产者/07message3'
+ to: '/docs/4.x/producer/07message3'
},
{
from: '/docs/batch-example/',
- to: '/docs/4.x/生产者/08message4'
+ to: '/docs/4.x/producer/08message4'
},
{
from: '/docs/transaction-example/',
- to: '/docs/4.x/生产者/09message5'
+ to: '/docs/4.x/producer/09message5'
},
{
from: '/docs/cluster-deployment/',
- to: '/docs/4.x/参数配置/24server'
+ to: '/docs/4.x/parameterConfiguration/24server'
},
{
from: '/docs/documentation/',
@@ -225,7 +225,7 @@ const darkCodeTheme = require("prism-react-renderer/themes/dracula");
},
{
from: '/docs/best-practice-consumer/',
- to: '/docs/4.x/最佳实践/15bestpractice'
+ to: '/docs/4.x/bestPractice/15bestpractice'
},
{
from: '/release_notes/',
@@ -317,7 +317,7 @@ const darkCodeTheme = require("prism-react-renderer/themes/dracula");
{ to: "/contact", label: "参与社区" },
{ to: "/origin", label: "项目起源" },
{ to: "/team", label: "贡献团队" },
- { to: "/docs/贡献指南/29how-to-contribute", label: "贡献说明" },
+ { to: "/docs/contributionGuide/29how-to-contribute", label: "贡献说明" },
// ... more items
],
},
@@ -386,11 +386,11 @@ const darkCodeTheme = require("prism-react-renderer/themes/dracula");
items: [
{
label: 'Introduction',
- to: '/docs/领域模型/01main',
+ to: '/docs/domainModel/01main',
},
{
label: 'Installation',
- to: '/docs/快速入门/02quickstart',
+ to: '/docs/quickStart/02quickstart',
},
{
label: 'Migration from 4.x to 5.0',
diff --git a/i18n/en/docusaurus-plugin-content-docs/current.json b/i18n/en/docusaurus-plugin-content-docs/current.json
index f24c6a7fb..ff27cdb45 100644
--- a/i18n/en/docusaurus-plugin-content-docs/current.json
+++ b/i18n/en/docusaurus-plugin-content-docs/current.json
@@ -3,31 +3,31 @@
"message": "4.x",
"description": "The label for version current"
},
- "sidebar.myAutogeneratedSidebar.category.介绍": {
+ "sidebar.myAutogeneratedSidebar.category.introduction": {
"message": "Introduction",
"description": "The label for category 介绍 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.生产者": {
+ "sidebar.myAutogeneratedSidebar.category.producer": {
"message": "Producer",
"description": "The label for category 生产者 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.消费者": {
+ "sidebar.myAutogeneratedSidebar.category.consumer": {
"message": "Consumer",
"description": "The label for category 消费者 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.部署与运维": {
+ "sidebar.myAutogeneratedSidebar.category.deployment": {
"message": "Deployment",
"description": "The label for category 部署与运维 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.最佳实践": {
+ "sidebar.myAutogeneratedSidebar.category.bestPractice": {
"message": "Best Practice",
"description": "The label for category 最佳实践 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.参数配置": {
+ "sidebar.myAutogeneratedSidebar.category.parameterConfiguration": {
"message": "Parameter Configuration",
"description": "The label for category 参数配置 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.贡献指南": {
+ "sidebar.myAutogeneratedSidebar.category.contributionGuide": {
"message": "Contribution Guide",
"description": "The label for category 贡献指南 in sidebar myAutogeneratedSidebar"
}
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/01-\344\273\213\347\273\215/01whychoose.md" b/i18n/en/docusaurus-plugin-content-docs/current/01-introduction/01whychoose.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/01-\344\273\213\347\273\215/01whychoose.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/01-introduction/01whychoose.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/01-\344\273\213\347\273\215/02quickstart.md" b/i18n/en/docusaurus-plugin-content-docs/current/01-introduction/02quickstart.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/01-\344\273\213\347\273\215/02quickstart.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/01-introduction/02quickstart.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/01-\344\273\213\347\273\215/03whatis.md" b/i18n/en/docusaurus-plugin-content-docs/current/01-introduction/03whatis.md
similarity index 97%
rename from "i18n/en/docusaurus-plugin-content-docs/current/01-\344\273\213\347\273\215/03whatis.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/01-introduction/03whatis.md
index fa6f99afc..68c7da578 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/current/01-\344\273\213\347\273\215/03whatis.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/current/01-introduction/03whatis.md
@@ -17,18 +17,18 @@ import TabItem from '@theme/TabItem';
<TabItem value="Producer" label="生产者" default>
The producer is responsible for producing messages, and the business system is generally responsible for producing messages. A producer sends messages generated in the business application system to the broker server.RocketMQ provides a variety of sending methods, synchronous sending, asynchronous sending, sequential sending, and one-way sending.
-learn more ➡️ [Producer](../02-生产者/04concept1.md)
+learn more ➡️ [Producer](../02-producer/04concept1.md)
</TabItem>
<TabItem value="Consumer" label="消费者">
Aims to consume messages, which are generally responsible by the backend system (asynchronous consumption). A message consumer pulls messages from the Broker server and serves them to the application. From the perspective of user applications, two consumption methods are provided: pull consumption and push consumption.
-learn more ➡️ [Consumer](../03-消费者/11concept2.md)
+learn more ➡️ [Consumer](../03-consumer/11concept2.md)
</TabItem>
<TabItem value="Topic" label="主题">
RocketMQ's fundamental unit of event organization is called Topic. Each Topic contains several messages, and each message can only belong to one topic.
-learn more ➡️ [basic concept](../02-生产者/04concept1.md)
+learn more ➡️ [basic concept](../02-producer/04concept1.md)
</TabItem>
</Tabs>
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/04concept1.md" b/i18n/en/docusaurus-plugin-content-docs/current/02-producer/04concept1.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/04concept1.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/02-producer/04concept1.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/05message1.md" b/i18n/en/docusaurus-plugin-content-docs/current/02-producer/05message1.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/05message1.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/02-producer/05message1.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/06message2.md" b/i18n/en/docusaurus-plugin-content-docs/current/02-producer/06message2.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/06message2.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/02-producer/06message2.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/07message3.md" b/i18n/en/docusaurus-plugin-content-docs/current/02-producer/07message3.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/07message3.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/02-producer/07message3.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/08message4.md" b/i18n/en/docusaurus-plugin-content-docs/current/02-producer/08message4.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/08message4.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/02-producer/08message4.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/09message5.md" b/i18n/en/docusaurus-plugin-content-docs/current/02-producer/09message5.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/02-\347\224\237\344\272\247\350\200\205/09message5.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/02-producer/09message5.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/03-\346\266\210\350\264\271\350\200\205/11concept2.md" b/i18n/en/docusaurus-plugin-content-docs/current/03-consumer/11concept2.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/03-\346\266\210\350\264\271\350\200\205/11concept2.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/03-consumer/11concept2.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/03-\346\266\210\350\264\271\350\200\205/12push.md" b/i18n/en/docusaurus-plugin-content-docs/current/03-consumer/12push.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/03-\346\266\210\350\264\271\350\200\205/12push.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/03-consumer/12push.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/03-\346\266\210\350\264\271\350\200\205/13pull.md" b/i18n/en/docusaurus-plugin-content-docs/current/03-consumer/13pull.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/03-\346\266\210\350\264\271\350\200\205/13pull.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/03-consumer/13pull.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/15deploy.md" b/i18n/en/docusaurus-plugin-content-docs/current/04-deployment/15deploy.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/15deploy.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/04-deployment/15deploy.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/16admintool.md" b/i18n/en/docusaurus-plugin-content-docs/current/04-deployment/16admintool.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/16admintool.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/04-deployment/16admintool.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/17Dashboard.md" b/i18n/en/docusaurus-plugin-content-docs/current/04-deployment/17Dashboard.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/17Dashboard.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/04-deployment/17Dashboard.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/18Exporter.md" b/i18n/en/docusaurus-plugin-content-docs/current/04-deployment/18Exporter.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/04-\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264/18Exporter.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/04-deployment/18Exporter.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md" b/i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/15bestpractice.md
similarity index 98%
rename from "i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/15bestpractice.md
index 58afe6a50..02d48fe20 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/15bestpractice.md
@@ -1,228 +1,228 @@
-# 基本最佳实践
-
-## 生产者
-
-### 发送消息注意事项
-
-#### Tags的使用
-
-一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags("TagA")。
-
-#### Keys的使用
-
-每个消息在业务层面的唯一标识码要设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。
-
-
-```java
- // 订单Id
- String orderId = "20034568923546";
- message.setKeys(orderId);
-```
-#### 日志的打印
-
-消息发送成功或者失败要打印消息日志,务必要打印SendResult和key字段。send消息方法只要不抛异常,就代表发送成功。发送成功会有多个状态,在sendResult里定义。以下对每个状态进行说明:
-
-- **SEND_OK**
-
-消息发送成功。要注意的是消息发送成功也不意味着它是可靠的。要确保不会丢失任何消息,还应启用同步Master服务器或同步刷盘,即SYNC_MASTER或SYNC_FLUSH。
-
-
-- **FLUSH_DISK_TIMEOUT**
-
-消息发送成功但是服务器刷盘超时。此时消息已经进入服务器队列(内存),只有服务器宕机,消息才会丢失。消息存储配置参数中可以设置刷盘方式和同步刷盘时间长度,如果Broker服务器设置了刷盘方式为同步刷盘,即FlushDiskType=SYNC_FLUSH(默认为异步刷盘方式),当Broker服务器未在同步刷盘时间内(默认为5s)完成刷盘,则将返回该状态——刷盘超时。
-
-- **FLUSH_SLAVE_TIMEOUT**
-
-消息发送成功,但是服务器同步到Slave时超时。此时消息已经进入服务器队列,只有服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master即ASYNC_MASTER),并且从Broker服务器未在同步刷盘时间(默认为5秒)内完成与主服务器的同步,则将返回该状态——数据同步到Slave服务器超时。
-
-- **SLAVE_NOT_AVAILABLE**
-
-消息发送成功,但是此时Slave不可用。此时消息已经进入Master服务器队列,只有Master服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master服务器即ASYNC_MASTER),但没有配置slave Broker服务器,则将返回该状态——无Slave服务器可用。
-
-
-### 消息发送失败处理方式
-
-Producer的send方法本身支持内部重试,重试逻辑如下:
-
-- 至多重试2次(同步发送为2次,异步发送为0次)。
-- 如果发送失败,则轮转到下一个Broker。这个方法的总耗时时间不超过sendMsgTimeout设置的值,默认10s。
-- 如果本身向broker发送消息产生超时异常,就不会再重试。
-
-以上策略也是在一定程度上保证了消息可以发送成功。如果业务对消息可靠性要求比较高,建议应用增加相应的重试逻辑:比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
-
-上述db重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
-
-### 选择oneway形式发送
-通常消息的发送是这样一个过程:
-
-- 客户端发送请求到服务器
-- 服务器处理请求
-- 服务器向客户端返回应答
-
-所以,一次消息发送的耗时时间是上述三个步骤的总和,而某些场景要求耗时非常短,但是对可靠性要求并不高,例如日志收集类应用,此类应用可以采用oneway形式调用,oneway形式只发送请求不等待应答,而发送请求在客户端实现层面仅仅是一个操作系统系统调用的开销,即将数据写入客户端的socket缓冲区,此过程耗时通常在微秒级。
-
-## 客户端配置
-
-相对于RocketMQ的Broker集群,生产者和消费者都是客户端。本小节主要描述生产者和消费者公共的行为配置。
-
-### 客户端寻址方式
-
-RocketMQ可以令客户端找到Name Server, 然后通过Name Server再找到Broker。如下所示有多种配置方式,优先级由高到低,高优先级会覆盖低优先级。
-
-- 代码中指定Name Server地址,多个namesrv地址之间用分号分割
-
-```java
-producer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");
-
-consumer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");
-```
-- Java启动参数中指定Name Server地址
-
-```text
--Drocketmq.namesrv.addr=192.168.0.1:9876;192.168.0.2:9876
-```
-- 环境变量指定Name Server地址
-
-```text
-export NAMESRV_ADDR=192.168.0.1:9876;192.168.0.2:9876
-```
-- HTTP静态服务器寻址(默认)
-
-客户端启动后,会定时访问一个静态HTTP服务器,地址如下:<http://jmenv.tbsite.net:8080/rocketmq/nsaddr>,这个URL的返回内容如下:
-
-```text
-192.168.0.1:9876;192.168.0.2:9876
-```
-客户端默认每隔2分钟访问一次这个HTTP服务器,并更新本地的Name Server地址。URL已经在代码中硬编码,可通过修改/etc/hosts文件来改变要访问的服务器,例如在/etc/hosts增加如下配置:
-```text
-10.232.22.67 jmenv.taobao.net
-```
-推荐使用HTTP静态服务器寻址方式,好处是客户端部署简单,且Name Server集群可以热升级。
-
-## 消费者
-
-### 消费过程幂等
-
-RocketMQ无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
-
-msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
-
-### 消费速度慢的处理方式
-
-### 提高消费并行度
-
-绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
-
-- 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度(需要注意的是超过订阅队列数的 Consumer 实例无效)。可以通过加机器,或者在已有机器启动多个进程的方式。
-- 提高单个 Consumer 的消费并行线程,通过修改参数 consumeThreadMin、consumeThreadMax实现。
-
-### 批量方式消费
-
-某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量,通过设置 consumer的 consumeMessageBatchMaxSize 返个参数,默认是 1,即一次只消费一条消息,例如设置为 N,那么每次消费的消息数小于等于 N。
-
-### 跳过非重要消息
-
-发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。例如,当某个队列的消息数堆积到100000条以上,则尝试丢弃部分或全部消息,这样就可以快速追上发送消息的速度。示例代码如下:
-
-```java
- public ConsumeConcurrentlyStatus consumeMessage(
- List<MessageExt> msgs,
- ConsumeConcurrentlyContext context) {
- long offset = msgs.get(0).getQueueOffset();
- String maxOffset =
- msgs.get(0).getProperty(Message.PROPERTY_MAX_OFFSET);
- long diff = Long.parseLong(maxOffset) - offset;
- if (diff > 100000) {
- // TODO 消息堆积情况的特殊处理
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
- // TODO 正常消费过程
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
-```
-
-
-#### 优化每条消息消费过程
-
-举例如下,某条消息的消费过程如下:
-
-- 根据消息从 DB 查询【数据 1】
-- 根据消息从 DB 查询【数据 2】
-- 复杂的业务计算
-- 向 DB 插入【数据 3】
-- 向 DB 插入【数据 4】
-
-这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。
-
-### 消费打印日志
-
-如果消息量较少,建议在消费入口方法打印消息,消费耗时等,方便后续排查问题。
-
-
-```java
- public ConsumeConcurrentlyStatus consumeMessage(
- List<MessageExt> msgs,
- ConsumeConcurrentlyContext context) {
- log.info("RECEIVE_MSG_BEGIN: " + msgs.toString());
- // TODO 正常消费过程
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
-```
-
-如果能打印每条消息消费耗时,那么在排查消费慢等线上问题时,会更方便。
-
-### 其他消费建议
-
-#### 关于消费者和订阅
-
-第一件需要注意的事情是,不同的消费者组可以独立的消费一些 topic,并且每个消费者组都有自己的消费偏移量,请确保同一组内的每个消费者订阅信息保持一致。
-
-#### 关于有序消息
-
-消费者将锁定每个消息队列,以确保他们被逐个消费,虽然这将会导致性能下降,但是当你关心消息顺序的时候会很有用。我们不建议抛出异常,你可以返回 ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT 作为替代。
-
-#### 关于并发消费
-
-顾名思义,消费者将并发消费这些消息,建议你使用它来获得良好性能,我们不建议抛出异常,你可以返回 ConsumeConcurrentlyStatus.RECONSUME_LATER 作为替代。
-
-#### 关于消费状态Consume Status
-
-对于并发的消费监听器,你可以返回 RECONSUME_LATER 来通知消费者现在不能消费这条消息,并且希望可以稍后重新消费它。然后,你可以继续消费其他消息。对于有序的消息监听器,因为你关心它的顺序,所以不能跳过消息,但是你可以返回SUSPEND_CURRENT_QUEUE_A_MOMENT 告诉消费者等待片刻。
-
-#### 关于Blocking
-
-不建议阻塞监听器,因为它会阻塞线程池,并最终可能会终止消费进程
-
-#### 关于线程数设置
-
-消费者使用 ThreadPoolExecutor 在内部对消息进行消费,所以你可以通过设置 setConsumeThreadMin 或 setConsumeThreadMax 来改变它。
-
-#### 关于消费位点
-
-当建立一个新的消费者组时,需要决定是否需要消费已经存在于 Broker 中的历史消息CONSUME_FROM_LAST_OFFSET 将会忽略历史消息,并消费之后生成的任何消息。CONSUME_FROM_FIRST_OFFSET 将会消费每个存在于 Broker 中的信息。你也可以使用 CONSUME_FROM_TIMESTAMP 来消费在指定时间戳后产生的消息。
-
-## Broker
-
-### Broker 角色
- Broker 角色分为 ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。如果对消息的可靠性要求比较严格,可以采用 SYNC_MASTER加SLAVE的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加SLAVE的部署方式。如果只是测试方便,则可以选择仅ASYNC_MASTER或仅SYNC_MASTER的部署方式。
-### FlushDiskType
- SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。
-### Broker 配置
-
-| 参数名 | 默认值 | 说明 |
-| -------------------------------- | ----------------------------- | ------------------------------------------------------------ |
-| listenPort | 10911 | 接受客户端连接的监听端口 |
-| namesrvAddr | null | nameServer 地址 |
-| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
-| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
-| brokerName | null | broker 的名称 |
-| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
-| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
-| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
-| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
-| mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
-| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
-| fileReserverdTime | 72 | 以小时计算的文件保留时间 |
-| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
-| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
-
+# 基本最佳实践
+
+## 生产者
+
+### 发送消息注意事项
+
+#### Tags的使用
+
+一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags("TagA")。
+
+#### Keys的使用
+
+每个消息在业务层面的唯一标识码要设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。
+
+
+```java
+ // 订单Id
+ String orderId = "20034568923546";
+ message.setKeys(orderId);
+```
+#### 日志的打印
+
+消息发送成功或者失败要打印消息日志,务必要打印SendResult和key字段。send消息方法只要不抛异常,就代表发送成功。发送成功会有多个状态,在sendResult里定义。以下对每个状态进行说明:
+
+- **SEND_OK**
+
+消息发送成功。要注意的是消息发送成功也不意味着它是可靠的。要确保不会丢失任何消息,还应启用同步Master服务器或同步刷盘,即SYNC_MASTER或SYNC_FLUSH。
+
+
+- **FLUSH_DISK_TIMEOUT**
+
+消息发送成功但是服务器刷盘超时。此时消息已经进入服务器队列(内存),只有服务器宕机,消息才会丢失。消息存储配置参数中可以设置刷盘方式和同步刷盘时间长度,如果Broker服务器设置了刷盘方式为同步刷盘,即FlushDiskType=SYNC_FLUSH(默认为异步刷盘方式),当Broker服务器未在同步刷盘时间内(默认为5s)完成刷盘,则将返回该状态——刷盘超时。
+
+- **FLUSH_SLAVE_TIMEOUT**
+
+消息发送成功,但是服务器同步到Slave时超时。此时消息已经进入服务器队列,只有服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master即ASYNC_MASTER),并且从Broker服务器未在同步刷盘时间(默认为5秒)内完成与主服务器的同步,则将返回该状态——数据同步到Slave服务器超时。
+
+- **SLAVE_NOT_AVAILABLE**
+
+消息发送成功,但是此时Slave不可用。此时消息已经进入Master服务器队列,只有Master服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即SYNC_MASTER(默认是异步Master服务器即ASYNC_MASTER),但没有配置slave Broker服务器,则将返回该状态——无Slave服务器可用。
+
+
+### 消息发送失败处理方式
+
+Producer的send方法本身支持内部重试,重试逻辑如下:
+
+- 至多重试2次(同步发送为2次,异步发送为0次)。
+- 如果发送失败,则轮转到下一个Broker。这个方法的总耗时时间不超过sendMsgTimeout设置的值,默认10s。
+- 如果本身向broker发送消息产生超时异常,就不会再重试。
+
+以上策略也是在一定程度上保证了消息可以发送成功。如果业务对消息可靠性要求比较高,建议应用增加相应的重试逻辑:比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
+
+上述db重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
+
+### 选择oneway形式发送
+通常消息的发送是这样一个过程:
+
+- 客户端发送请求到服务器
+- 服务器处理请求
+- 服务器向客户端返回应答
+
+所以,一次消息发送的耗时时间是上述三个步骤的总和,而某些场景要求耗时非常短,但是对可靠性要求并不高,例如日志收集类应用,此类应用可以采用oneway形式调用,oneway形式只发送请求不等待应答,而发送请求在客户端实现层面仅仅是一个操作系统系统调用的开销,即将数据写入客户端的socket缓冲区,此过程耗时通常在微秒级。
+
+## 客户端配置
+
+相对于RocketMQ的Broker集群,生产者和消费者都是客户端。本小节主要描述生产者和消费者公共的行为配置。
+
+### 客户端寻址方式
+
+RocketMQ可以令客户端找到Name Server, 然后通过Name Server再找到Broker。如下所示有多种配置方式,优先级由高到低,高优先级会覆盖低优先级。
+
+- 代码中指定Name Server地址,多个namesrv地址之间用分号分割
+
+```java
+producer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");
+
+consumer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");
+```
+- Java启动参数中指定Name Server地址
+
+```text
+-Drocketmq.namesrv.addr=192.168.0.1:9876;192.168.0.2:9876
+```
+- 环境变量指定Name Server地址
+
+```text
+export NAMESRV_ADDR=192.168.0.1:9876;192.168.0.2:9876
+```
+- HTTP静态服务器寻址(默认)
+
+客户端启动后,会定时访问一个静态HTTP服务器,地址如下:<http://jmenv.tbsite.net:8080/rocketmq/nsaddr>,这个URL的返回内容如下:
+
+```text
+192.168.0.1:9876;192.168.0.2:9876
+```
+客户端默认每隔2分钟访问一次这个HTTP服务器,并更新本地的Name Server地址。URL已经在代码中硬编码,可通过修改/etc/hosts文件来改变要访问的服务器,例如在/etc/hosts增加如下配置:
+```text
+10.232.22.67 jmenv.taobao.net
+```
+推荐使用HTTP静态服务器寻址方式,好处是客户端部署简单,且Name Server集群可以热升级。
+
+## 消费者
+
+### 消费过程幂等
+
+RocketMQ无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
+
+msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
+
+### 消费速度慢的处理方式
+
+### 提高消费并行度
+
+绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
+
+- 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度(需要注意的是超过订阅队列数的 Consumer 实例无效)。可以通过加机器,或者在已有机器启动多个进程的方式。
+- 提高单个 Consumer 的消费并行线程,通过修改参数 consumeThreadMin、consumeThreadMax实现。
+
+### 批量方式消费
+
+某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量,通过设置 consumer的 consumeMessageBatchMaxSize 返个参数,默认是 1,即一次只消费一条消息,例如设置为 N,那么每次消费的消息数小于等于 N。
+
+### 跳过非重要消息
+
+发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。例如,当某个队列的消息数堆积到100000条以上,则尝试丢弃部分或全部消息,这样就可以快速追上发送消息的速度。示例代码如下:
+
+```java
+ public ConsumeConcurrentlyStatus consumeMessage(
+ List<MessageExt> msgs,
+ ConsumeConcurrentlyContext context) {
+ long offset = msgs.get(0).getQueueOffset();
+ String maxOffset =
+ msgs.get(0).getProperty(Message.PROPERTY_MAX_OFFSET);
+ long diff = Long.parseLong(maxOffset) - offset;
+ if (diff > 100000) {
+ // TODO 消息堆积情况的特殊处理
+ return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
+ }
+ // TODO 正常消费过程
+ return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
+ }
+```
+
+
+#### 优化每条消息消费过程
+
+举例如下,某条消息的消费过程如下:
+
+- 根据消息从 DB 查询【数据 1】
+- 根据消息从 DB 查询【数据 2】
+- 复杂的业务计算
+- 向 DB 插入【数据 3】
+- 向 DB 插入【数据 4】
+
+这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。
+
+### 消费打印日志
+
+如果消息量较少,建议在消费入口方法打印消息,消费耗时等,方便后续排查问题。
+
+
+```java
+ public ConsumeConcurrentlyStatus consumeMessage(
+ List<MessageExt> msgs,
+ ConsumeConcurrentlyContext context) {
+ log.info("RECEIVE_MSG_BEGIN: " + msgs.toString());
+ // TODO 正常消费过程
+ return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
+ }
+```
+
+如果能打印每条消息消费耗时,那么在排查消费慢等线上问题时,会更方便。
+
+### 其他消费建议
+
+#### 关于消费者和订阅
+
+第一件需要注意的事情是,不同的消费者组可以独立的消费一些 topic,并且每个消费者组都有自己的消费偏移量,请确保同一组内的每个消费者订阅信息保持一致。
+
+#### 关于有序消息
+
+消费者将锁定每个消息队列,以确保他们被逐个消费,虽然这将会导致性能下降,但是当你关心消息顺序的时候会很有用。我们不建议抛出异常,你可以返回 ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT 作为替代。
+
+#### 关于并发消费
+
+顾名思义,消费者将并发消费这些消息,建议你使用它来获得良好性能,我们不建议抛出异常,你可以返回 ConsumeConcurrentlyStatus.RECONSUME_LATER 作为替代。
+
+#### 关于消费状态Consume Status
+
+对于并发的消费监听器,你可以返回 RECONSUME_LATER 来通知消费者现在不能消费这条消息,并且希望可以稍后重新消费它。然后,你可以继续消费其他消息。对于有序的消息监听器,因为你关心它的顺序,所以不能跳过消息,但是你可以返回SUSPEND_CURRENT_QUEUE_A_MOMENT 告诉消费者等待片刻。
+
+#### 关于Blocking
+
+不建议阻塞监听器,因为它会阻塞线程池,并最终可能会终止消费进程
+
+#### 关于线程数设置
+
+消费者使用 ThreadPoolExecutor 在内部对消息进行消费,所以你可以通过设置 setConsumeThreadMin 或 setConsumeThreadMax 来改变它。
+
+#### 关于消费位点
+
+当建立一个新的消费者组时,需要决定是否需要消费已经存在于 Broker 中的历史消息CONSUME_FROM_LAST_OFFSET 将会忽略历史消息,并消费之后生成的任何消息。CONSUME_FROM_FIRST_OFFSET 将会消费每个存在于 Broker 中的信息。你也可以使用 CONSUME_FROM_TIMESTAMP 来消费在指定时间戳后产生的消息。
+
+## Broker
+
+### Broker 角色
+ Broker 角色分为 ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。如果对消息的可靠性要求比较严格,可以采用 SYNC_MASTER加SLAVE的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加SLAVE的部署方式。如果只是测试方便,则可以选择仅ASYNC_MASTER或仅SYNC_MASTER的部署方式。
+### FlushDiskType
+ SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。
+### Broker 配置
+
+| 参数名 | 默认值 | 说明 |
+| -------------------------------- | ----------------------------- | ------------------------------------------------------------ |
+| listenPort | 10911 | 接受客户端连接的监听端口 |
+| namesrvAddr | null | nameServer 地址 |
+| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
+| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
+| brokerName | null | broker 的名称 |
+| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
+| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
+| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
+| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
+| mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
+| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
+| fileReserverdTime | 72 | 以小时计算的文件保留时间 |
+| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
+| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
+
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/16dledger.md" b/i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/16dledger.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/16dledger.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/16dledger.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/17messagetra.md" b/i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/17messagetra.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/17messagetra.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/17messagetra.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/18access.md" b/i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/18access.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/18access.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/18access.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/19JVMOS.md" b/i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/19JVMOS.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/19JVMOS.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/19JVMOS.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md" b/i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/21subscribe.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/21subscribe.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/22FAQ.md" b/i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/22FAQ.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/05-\346\234\200\344\275\263\345\256\236\350\267\265/22FAQ.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/05-bestPractice/22FAQ.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/06-\345\217\202\346\225\260\351\205\215\347\275\256/23local.md" b/i18n/en/docusaurus-plugin-content-docs/current/06-parameterConfiguration/23local.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/06-\345\217\202\346\225\260\351\205\215\347\275\256/23local.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/06-parameterConfiguration/23local.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/08-\346\265\201\350\256\241\347\256\227/30RocketMQ Streams Overview.md" b/i18n/en/docusaurus-plugin-content-docs/current/07-strems/30RocketMQ Streams Overview.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/08-\346\265\201\350\256\241\347\256\227/30RocketMQ Streams Overview.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/07-strems/30RocketMQ Streams Overview.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/08-\346\265\201\350\256\241\347\256\227/31RocketMQ Streams Concept.md" b/i18n/en/docusaurus-plugin-content-docs/current/07-strems/31RocketMQ Streams Concept.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/08-\346\265\201\350\256\241\347\256\227/31RocketMQ Streams Concept.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/07-strems/31RocketMQ Streams Concept.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/08-\346\265\201\350\256\241\347\256\227/32RocketMQ Streams Quick Start.md" b/i18n/en/docusaurus-plugin-content-docs/current/07-strems/32RocketMQ Streams Quick Start.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/08-\346\265\201\350\256\241\347\256\227/32RocketMQ Streams Quick Start.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/07-strems/32RocketMQ Streams Quick Start.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/08-\346\265\201\350\256\241\347\256\227/33RocketMQ Streams In Action.md" b/i18n/en/docusaurus-plugin-content-docs/current/07-strems/33RocketMQ Streams In Action.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/08-\346\265\201\350\256\241\347\256\227/33RocketMQ Streams In Action.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/07-strems/33RocketMQ Streams In Action.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md" b/i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/29how-to-contribute.md
similarity index 88%
rename from "i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/29how-to-contribute.md
index 5d8a88fa0..2947525c8 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/29how-to-contribute.md
@@ -33,7 +33,7 @@ Apache RocketMQ 社区提供完备的处理流程帮您解答问题。
* 根据您的需求评估投入成本和设计解决方案
* 便于社区围绕该提案展开建设性的讨论
-若您计划实现自己的提案以贡献社区,同样需要提供详细描述信息,并遵循 [code-guidelines](/docs/贡献指南/30code-guidelines) 中的编码规范
+若您计划实现自己的提案以贡献社区,同样需要提供详细描述信息,并遵循 [code-guidelines](/docs/contributionGuide/30code-guidelines) 中的编码规范
我们推荐先在社区达成共识再着手实现功能。通过讨论新特性的必要性及实现方案等问题,可以早发现超出项目范围的提案。
@@ -63,7 +63,7 @@ Apache RocketMQ 在其活跃社区的推动下持续发展着。每隔几周我
2. 测试预发布版本并评分 (+1 未发现问题, -1 测试出问题)
3. 若预发布版本未测试出问题则发布,否则回到步骤 1
-我们在网站上整理了 [release-manual](/docs/贡献指南/32release-manual) 版本发布指南。测试预发行版是项大工程,我们需要吸纳更多人的参与。 RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
+我们在网站上整理了 [release-manual](/docs/contributionGuide/32release-manual) 版本发布指南。测试预发行版是项大工程,我们需要吸纳更多人的参与。 RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
@@ -71,10 +71,10 @@ RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发
## 贡献代码
-Apache RocketMQ 已然并将持续进行维护,优化,和扩展。因此 Apache RocketMQ 鼓励所有人贡献源代码。为给予代码贡献者和审查者极佳的代码贡献体验,并提供高质量的代码仓库,社区遵循 [code-guidelines](/docs/贡献指南/30code-guidelines) 中的贡献流程。编码手册包含构建开发环境指南,社区编码指南和编码风格,并介绍了如何提交贡献的代码。
+Apache RocketMQ 已然并将持续进行维护,优化,和扩展。因此 Apache RocketMQ 鼓励所有人贡献源代码。为给予代码贡献者和审查者极佳的代码贡献体验,并提供高质量的代码仓库,社区遵循 [code-guidelines](/docs/contributionGuide/30code-guidelines) 中的贡献流程。编码手册包含构建开发环境指南,社区编码指南和编码风格,并介绍了如何提交贡献的代码。
-**请务必在编码之前仔细阅读 [code-guidelines](/docs/贡献指南/30code-guidelines)
+**请务必在编码之前仔细阅读 [code-guidelines](/docs/contributionGuide/30code-guidelines)
并请阅读 [AFS Apache 软件基金会 贡献者协议](https://www.apache.org/licenses/contributor-agreements.html) 提交电子签名。
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/30code-guidelines.md" b/i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/30code-guidelines.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/30code-guidelines.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/30code-guidelines.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md" b/i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/31pull-request.md
similarity index 98%
rename from "i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/31pull-request.md
index ef0301af6..4dde73a85 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/31pull-request.md
@@ -96,7 +96,7 @@ head repository / compare : 开发仓库及开发分支
提交 PR 前,请先做如下确认:
1. 已创建与 PR 对应的 [GitHub Issue]( [apache/rocketmq: Mirror of Apache RocketMQ (github.com)](https://github.com/apache/rocketmq/issues) )
-2. 修改内容符合 [Coding Guidelines](/docs/贡献指南/30code-guidelines) 编程规范
+2. 修改内容符合 [Coding Guidelines](/docs/contributionGuide/30code-guidelines) 编程规范
3. PR 摘要以 [ISSUE #XXX] 开始并简要描述变更需求
4. 概述 PR 变更需求,变更日志,验证信息,可参考 [PR Demo](https://github.com/apache/rocketmq/pull/152)
5. 提交内容具备完整的测试用例,并确保基本检查,单元测试,集成测试通过
diff --git "a/i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/32release-manual.md" b/i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/32release-manual.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/current/08-\350\264\241\347\214\256\346\214\207\345\215\227/32release-manual.md"
rename to i18n/en/docusaurus-plugin-content-docs/current/08-contributionGuide/32release-manual.md
diff --git a/i18n/en/docusaurus-plugin-content-docs/version-5.0.json b/i18n/en/docusaurus-plugin-content-docs/version-5.0.json
index 34c6fb91a..51be2110f 100644
--- a/i18n/en/docusaurus-plugin-content-docs/version-5.0.json
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0.json
@@ -3,51 +3,51 @@
"message": "5.0",
"description": "The label for version 5.0"
},
- "sidebar.myAutogeneratedSidebar.category.介绍": {
+ "sidebar.myAutogeneratedSidebar.category.introduction": {
"message": "Introduction",
"description": "The label for category 介绍 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.生产者": {
+ "sidebar.myAutogeneratedSidebar.category.producer": {
"message": "Producer",
"description": "The label for category 生产者 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.消费者": {
+ "sidebar.myAutogeneratedSidebar.category.consumer": {
"message": "Consumer",
"description": "The label for category 消费者 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.部署与运维": {
+ "sidebar.myAutogeneratedSidebar.category.deployment": {
"message": "Deployment",
"description": "The label for category 部署与运维 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.最佳实践": {
+ "sidebar.myAutogeneratedSidebar.category.bestPractice": {
"message": "Best Practice",
"description": "The label for category 最佳实践 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.参数配置": {
+ "sidebar.myAutogeneratedSidebar.category.parameterConfiguration": {
"message": "Parameter Configuration",
"description": "The label for category 参数配置 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.贡献指南": {
+ "sidebar.myAutogeneratedSidebar.category.contributionGuide": {
"message": "Contribution Guide",
"description": "The label for category 贡献指南 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.基础介绍": {
+ "sidebar.myAutogeneratedSidebar.category.basicIntroduction": {
"message": "Basic Introduction",
"description": "The label for category 基础介绍 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.快速入门": {
+ "sidebar.myAutogeneratedSidebar.category.quickStart": {
"message": "Quick Start",
"description": "The label for category 快速入门 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.领域模型": {
+ "sidebar.myAutogeneratedSidebar.category.domainModel": {
"message": "Domain Model",
"description": "The label for category 领域模型 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.功能行为": {
+ "sidebar.myAutogeneratedSidebar.category.featureBehavior": {
"message": "Feature Behavior",
"description": "The label for category 功能行为 in sidebar myAutogeneratedSidebar"
},
- "sidebar.myAutogeneratedSidebar.category.部署运维": {
+ "sidebar.myAutogeneratedSidebar.category.deploymentOperations": {
"message": "Deployment Operations",
"description": "The label for category 部署运维 in sidebar myAutogeneratedSidebar"
}
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/01whychoose.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/01-introduction/01whychoose.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/01whychoose.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/01-introduction/01whychoose.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/02concepts.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/01-introduction/02concepts.md
similarity index 81%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/02concepts.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/01-introduction/02concepts.md
index 6d3634627..47318b16a 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/02concepts.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/01-introduction/02concepts.md
@@ -4,48 +4,48 @@ This section describes the core concepts of Apache RocketMQ.
## Topic
-A topic is a top-level container that is used in Apache RocketMQ to transfer and store messages that belong to the same business logic.Learn more [Topic](../03-领域模型/02topic.md).
+A topic is a top-level container that is used in Apache RocketMQ to transfer and store messages that belong to the same business logic.Learn more [Topic](../03-domainModel/02topic.md).
## MessageType
Categories defined by message transfer characteristics for type management and security verification. Apache RocketMQ support NORMAL,FIFO,TRANSACTION and DELAY message type.
## MessageQueue
-MessageQueue is a container that is used to store and transmit messages in Apache RocketMQ. MessageQueue is the smallest unit of storage for Apache RocketMQ messages. Learn more [MessageQueue](../03-领域模型/03messagequeue.md).
+MessageQueue is a container that is used to store and transmit messages in Apache RocketMQ. MessageQueue is the smallest unit of storage for Apache RocketMQ messages. Learn more [MessageQueue](../03-domainModel/03messagequeue.md).
## Message
-A message is the smallest unit of data transmission in Apache RocketMQ. A producer encapsulates the load and extended attributes of business data into messages and sends the messages to a Apache RocketMQ broker. Then, the broker delivers the messages to the consumer based on the relevant semantics. Learn more[Message](../03-领域模型/04message.md).
+A message is the smallest unit of data transmission in Apache RocketMQ. A producer encapsulates the load and extended attributes of business data into messages and sends the messages to a Apache RocketMQ broker. Then, the broker delivers the messages to the consumer based on the relevant semantics. Learn more[Message](../03-domainModel/04message.md).
## MessageView
MessageView is read-only interface to message from a development perspective. The message view allows you to read multiple properties and payload information inside a message, but you cannot make any changes to the message itself.
## MessageTag
-MessageTag is a fine-grained message classification property that allows message to be subdivided below the topic level. Consumers implement message filtering by subscribing to specific tags. Learn more [MessageFilter](../04-功能行为/07messagefilter.md).
+MessageTag is a fine-grained message classification property that allows message to be subdivided below the topic level. Consumers implement message filtering by subscribing to specific tags. Learn more [MessageFilter](../04-featureBehavior/07messagefilter.md).
## MessageOffset
-Messages are stored in the queue in order of precedence, each message has a unique coordinate of type Long in the queue, which is defined as the message site. Learn more [Consumer progress management](../04-功能行为/09consumerprogress.md)。
+Messages are stored in the queue in order of precedence, each message has a unique coordinate of type Long in the queue, which is defined as the message site. Learn more [Consumer progress management](../04-featureBehavior/09consumerprogress.md)。
## ConsumerOffset
-A message is not removed from the queue immediately after it has been consumed by a consumer, Apache RocketMQ will record the last consumed message based on each consumer group. Learn more [Consumer progress management](../04-功能行为/09consumerprogress.md).
+A message is not removed from the queue immediately after it has been consumed by a consumer, Apache RocketMQ will record the last consumed message based on each consumer group. Learn more [Consumer progress management](../04-featureBehavior/09consumerprogress.md).
## MessageKey
MessageKey is The message-oriented index property. By setting the message index, you can quickly find the corresponding message content.
## Producer
-A producer in Apache RocketMQ is a functional messaging entity that creates messages and sends them to the server. A producer is typically integrated on the business system and serves to encapsulate data as messages in Apache RocketMQ and send the messages to the server. Learn more [Producer](../03-领域模型/04producer.md)。
+A producer in Apache RocketMQ is a functional messaging entity that creates messages and sends them to the server. A producer is typically integrated on the business system and serves to encapsulate data as messages in Apache RocketMQ and send the messages to the server. Learn more [Producer](../03-domainModel/04producer.md)。
## TransactionChecker
-Apache RocketMQ uses a transaction messaging mechanism that requires a producer to implement a transaction checker to ensure eventual consistency of transactions. Learn more[Transaction Message](../04-功能行为/04transactionmessage.md)。
+Apache RocketMQ uses a transaction messaging mechanism that requires a producer to implement a transaction checker to ensure eventual consistency of transactions. Learn more[Transaction Message](../04-featureBehavior/04transactionmessage.md)。
## ConsumerGroup
-A consumer group is a load balancing group that contains consumers that use the same consumption behaviors in Apache RocketMQ. Learn more [ConsumerGroup](../03-领域模型/07consumergroup.md)。
+A consumer group is a load balancing group that contains consumers that use the same consumption behaviors in Apache RocketMQ. Learn more [ConsumerGroup](../03-domainModel/07consumergroup.md)。
## Consumer
-A consumer is an entity that receives and processes messages in Apache RocketMQ. Consumers are usually integrated in business systems. They obtain messages from Apache RocketMQ brokers and convert the messages into information that can be perceived and processed by business logic. Learn more [Consumer](../03-领域模型/08consumer.md)。
+A consumer is an entity that receives and processes messages in Apache RocketMQ. Consumers are usually integrated in business systems. They obtain messages from Apache RocketMQ brokers and convert the messages into information that can be perceived and processed by business logic. Learn more [Consumer](../03-domainModel/08consumer.md)。
## Subscription
-A subscription is the rule and status settings for consumers to obtain and process messages in Apache RocketMQ. Subscriptions are dynamically registered by consumer groups with brokers. Messages are then matched and consumed based on the filter rules defined by subscriptions. Learn more [Subscription](../03-领域模型/09subscription.md)。
+A subscription is the rule and status settings for consumers to obtain and process messages in Apache RocketMQ. Subscriptions are dynamically registered by consumer groups with brokers. Messages are then matched and consumed based on the filter rules defined by subscriptions. Learn more [Subscription](../03-domainModel/09subscription.md)。
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/03limits.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/01-introduction/03limits.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/03limits.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/01-introduction/03limits.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-\345\277\253\351\200\237\345\205\245\351\227\250/02quickstart.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/02quickstart.md
similarity index 97%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/02-\345\277\253\351\200\237\345\205\245\351\227\250/02quickstart.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/02quickstart.md
index c37ca6d4d..cdddd2dee 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-\345\277\253\351\200\237\345\205\245\351\227\250/02quickstart.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/02-quickStart/02quickstart.md
@@ -49,7 +49,7 @@ Once we see **'The Name Server boot success..'** from namesrv.log, it means the
## 3. Start Broker and Proxy
-After nameserver startup, we need start the broker and proxy. We recommend Local deployment mode, where Broker and Proxy are deployed in the same process. We also support cluster deployment mode. Learn more [Deployment introduction](../05-部署运维/15deploy.md).
+After nameserver startup, we need start the broker and proxy. We recommend Local deployment mode, where Broker and Proxy are deployed in the same process. We also support cluster deployment mode. Learn more [Deployment introduction](../05-deploymentOperations/15deploy.md).
```shell
### start broker
@@ -148,7 +148,7 @@ We can also try to use the client sdk to send and receive messages.
```
-5. In the Java project you have created, create a consumer demo program and run it. Apache RocketMQ support [SimpleConsumer](../04-功能行为/06consumertype.md) and [PushConsumer](../04-功能行为/06consumertype.md).
+5. In the Java project you have created, create a consumer demo program and run it. Apache RocketMQ support [SimpleConsumer](../04-featureBehavior/06consumertype.md) and [PushConsumer](../04-featureBehavior/06consumertype.md).
```java
import org.apache.rocketmq.client.apis.*;
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/01main.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/01main.md
similarity index 94%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/01main.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/01main.md
index 4cba26312..12bc79e3d 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/01main.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/01main.md
@@ -20,21 +20,21 @@ A producer generates a message and sends it to a Apache RocketMQ broker. The mes
**Message production**
-[Producer](../03-领域模型/04producer.md):
+[Producer](../03-domainModel/04producer.md):
The running entity that is used to generate messages in Apache RocketMQ. Producers are the upstream parts of business call links. Producers are lightweight, anonymous, and do not have identities.
**Message storage**
-* [Topic](../03-领域模型/02topic.md):
+* [Topic](../03-domainModel/02topic.md):
The grouping container that is used for message transmission and storage in Apache RocketMQ. A topic consists of multiple message queues, which are used to store messages and scale out the topic.
-* [MessageQueue](../03-领域模型/03messagequeue.md):
+* [MessageQueue](../03-domainModel/03messagequeue.md):
The unit container that is used for message transmission and storage in Apache RocketMQ. Message queues are similar to partitions in Kafka. Apache RocketMQ stores messages in a streaming manner based on an infinite queue structure. Messages are stored in order in a queue.
-* [Message](../03-领域模型/04message.md):
+* [Message](../03-domainModel/04message.md):
The minimum unit of data transmission in Apache RocketMQ. Messages are immutable after they are initialized and stored.
@@ -43,15 +43,15 @@ The running entity that is used to generate messages in Apache RocketMQ. Produce
**Message consumption**
-* [ConsumerGroup](../03-领域模型/07consumergroup.md):
+* [ConsumerGroup](../03-domainModel/07consumergroup.md):
An independent group of consumption identities defined in the publish/subscribe model of Apache RocketMQ. A consumer group is used to centrally manage consumers that run at the bottom layer. Consumers in the same group must maintain the same consumption logic and configurations with each other, and consume the messages subscribed by the group together to scale out the consumption capacity of the group.
-* [Consumer](../03-领域模型/08consumer.md):
+* [Consumer](../03-domainModel/08consumer.md):
The running entity that is used to consume messages in Apache RocketMQ. Consumers are the downstream parts of business call links, A consumer must belong to a specific consumer group.
-* [Subscription](../03-领域模型/09subscription.md):
+* [Subscription](../03-domainModel/09subscription.md):
The collection of configurations in the publish/subscribe model of Apache RocketMQ. The configurations include message filtering, retry, and consumer progress Subscriptions are managed at the consumer group level. You use consumer groups to specify subscriptions to manage how consumers in the group filter messages, retry consumption, and restore a consumer offset.
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/02topic.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/02topic.md
similarity index 87%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/02topic.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/02topic.md
index ac30f4a12..3115deb5e 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/02topic.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/02topic.md
@@ -33,12 +33,12 @@ A topic contains one or more queues. Message storage and scalability are impleme
* Value: A topic name is specified by the user when a topic is created.
-* Constraint: See [Parameter limits](../01-基础介绍/03limits.md).
+* Constraint: See [Parameter limits](../01-introduction/03limits.md).
**Queues**
-* Definition: the actual storage unit that stores messages. A topic contains one or more queues. For more information, see [Message queues](../03-领域模型/03messagequeue.md).
+* Definition: the actual storage unit that stores messages. A topic contains one or more queues. For more information, see [Message queues](../03-domainModel/03messagequeue.md).
* Value: You can specify the number of queues when you create a topic. Apache RocketMQ allocates the specified number of queues to the topic.
@@ -51,13 +51,13 @@ A topic contains one or more queues. Message storage and scalability are impleme
* Definition: the message type that is specified for a topic.
* Value: When you create a topic in Apache RocketMQ, select one of the following message types for the topic:
- * Normal: [Normal messages](../04-功能行为/01normalmessage.md). A normal message does not require special semantics and is not correlated with other normal messages.
+ * Normal: [Normal messages](../04-featureBehavior/01normalmessage.md). A normal message does not require special semantics and is not correlated with other normal messages.
- * FIFO: [Fifo messages](../04-功能行为/03fifomessage.md). Apache RocketMQ uses a message group to determine the order of a specified set of messages. The messages are delivered in the order in which they are sent.
+ * FIFO: [Fifo messages](../04-featureBehavior/03fifomessage.md). Apache RocketMQ uses a message group to determine the order of a specified set of messages. The messages are delivered in the order in which they are sent.
- * Delay: [Delayed messages](../04-功能行为/02delaymessage.md). You can specify a delay to make messages available to consumers only after the delay has elapsed, instead of delivering messages immediately when they are produced.
+ * Delay: [Delayed messages](../04-featureBehavior/02delaymessage.md). You can specify a delay to make messages available to consumers only after the delay has elapsed, instead of delivering messages immediately when they are produced.
- * Transaction: [Transaction messages](../04-功能行为/04transactionmessage.md). Apache RocketMQ supports distributed transaction messages and ensures transaction consistency of database updates and message calls.
+ * Transaction: [Transaction messages](../04-featureBehavior/04transactionmessage.md). Apache RocketMQ supports distributed transaction messages and ensures transaction consistency of database updates and message calls.
* Constraint: A topic supports only one message type.
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/03messagequeue.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/03messagequeue.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/03messagequeue.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/03messagequeue.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04message.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/04message.md
similarity index 84%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04message.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/04message.md
index 1c040028e..c2a1b6994 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04message.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/04message.md
@@ -43,13 +43,13 @@ The following figure shows the position of messages in the domain model of Apach
* Definition: the type of a message.
* Values: obtained from the SDK of the client. Apache RocketMQ supports the following message types:
- * Normal: [Normal messages](../04-功能行为/01normalmessage.md). A normal message does not require special semantics and is not correlated with other normal messages.
+ * Normal: [Normal messages](../04-featureBehavior/01normalmessage.md). A normal message does not require special semantics and is not correlated with other normal messages.
- * FIFO: [Fifo messages](../04-功能行为/03fifomessage.md). Apache RocketMQ uses a message group to determine the order of a specified set of messages. The messages are delivered in the order in which they are sent.
+ * FIFO: [Fifo messages](../04-featureBehavior/03fifomessage.md). Apache RocketMQ uses a message group to determine the order of a specified set of messages. The messages are delivered in the order in which they are sent.
- * Delay: [Delayed messages](../04-功能行为/02delaymessage.md). You can specify a delay to make messages available to consumers only after the delay has elapsed, instead of delivering messages immediately when they are produced.
+ * Delay: [Delayed messages](../04-featureBehavior/02delaymessage.md). You can specify a delay to make messages available to consumers only after the delay has elapsed, instead of delivering messages immediately when they are produced.
- * Transaction: [Transaction messages](../04-功能行为/04transactionmessage.md). Apache RocketMQ supports distributed transaction messages and ensures transaction consistency of database updates and message calls.
+ * Transaction: [Transaction messages](../04-featureBehavior/04transactionmessage.md). Apache RocketMQ supports distributed transaction messages and ensures transaction consistency of database updates and message calls.
@@ -67,7 +67,7 @@ The following figure shows the position of messages in the domain model of Apach
**Message offset**
-* Definition: the location where the current message is stored in the queue. For more information, see [Working mechanism](../04-功能行为/09consumerprogress.md).
+* Definition: the location where the current message is stored in the queue. For more information, see [Working mechanism](../04-featureBehavior/09consumerprogress.md).
* Values: specified and populated by the broker. Valid values: 0 to Long.Max.
@@ -104,7 +104,7 @@ The following figure shows the position of messages in the domain model of Apach
**(Optional) Scheduled time**
-* Definition: the millisecond-level timestamp that is used when a message triggers delayed delivery in a scheduled time scenario. For more information, see [Delayed messages](../04-功能行为/02delaymessage.md).
+* Definition: the millisecond-level timestamp that is used when a message triggers delayed delivery in a scheduled time scenario. For more information, see [Delayed messages](../04-featureBehavior/02delaymessage.md).
* Values: defined by the message producer.
@@ -139,7 +139,7 @@ The following figure shows the position of messages in the domain model of Apach
**Retry times**
-* Definition: the number of times that the Apache RocketMQ broker redelivers a message after the message fails to be consumed. After each retry, the maximum number of retries is increased by one. For more information, see [Consumption retry](../04-功能行为/10consumerretrypolicy.md).
+* Definition: the number of times that the Apache RocketMQ broker redelivers a message after the message fails to be consumed. After each retry, the maximum number of retries is increased by one. For more information, see [Consumption retry](../04-featureBehavior/10consumerretrypolicy.md).
* Values: labeled by the broker. The first time that a message is consumed, the number of retries is zero. The first time that a message fails to be consumed, the number of retries is one.
@@ -155,11 +155,13 @@ The following figure shows the position of messages in the domain model of Apach
**Message load**
+**Message load**
+
* Definition: the actual message data of the service message.
* Values: serialized by the producer and transmitted in binary bytes.
-* Constraints: see [Parameter limits](../01-基础介绍/03limits.md).
+* Constraints: see [Parameter limits](../01-introduction/03limits.md).
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04producer.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/04producer.md
similarity index 95%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04producer.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/04producer.md
index ef66a001f..6c6bf25bf 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04producer.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/04producer.md
@@ -15,7 +15,7 @@ The following message delivery elements are defined on the producer side:
* Batch transmission: A producer can specify batch transmission in an API operation. For example, the number or size of messages sent at a time can be specified.
-* Transactional behavior: Apache RocketMQ supports transaction messages. Producers are involved in transaction checks to ensure eventual consistency of transactions. For more information, see [Transactional messages](../04-功能行为/04transactionmessage.md).
+* Transactional behavior: Apache RocketMQ supports transaction messages. Producers are involved in transaction checks to ensure eventual consistency of transactions. For more information, see [Transactional messages](../04-featureBehavior/04transactionmessage.md).
Producers and topics have an n-to-n relationship. A producer can send messages to multiple topics, and a topic can receive messages from multiple producers. This many-to-many relationship facilitates performance scaling and disaster recovery.
@@ -56,7 +56,7 @@ The following figure shows the role of producers in the messaging model of Apach
Transmission is required only when identity recognition and authentication are enabled on the server.
-* Request Timeout **(Optional)** : the timeout period of the network request. For more information about the value range and default value, see [Parameter limits](../01-基础介绍/03limits.md).
+* Request Timeout **(Optional)** : the timeout period of the network request. For more information about the value range and default value, see [Parameter limits](../01-introduction/03limits.md).
**Prebound topic list**
@@ -75,14 +75,14 @@ The following figure shows the role of producers in the messaging model of Apach
**Transaction checker**
-* Apache RocketMQ uses a transaction messaging mechanism that requires a producer to implement a transaction checker to ensure eventual consistency of transactions. For more information, see [Transaction messages](../04-功能行为/04transactionmessage.md).
+* Apache RocketMQ uses a transaction messaging mechanism that requires a producer to implement a transaction checker to ensure eventual consistency of transactions. For more information, see [Transaction messages](../04-featureBehavior/04transactionmessage.md).
* When a producer sends transaction messages, a transaction checker must be configured and used together with prebound topics.
**Send retry policy**
-Send retry policy specifies how a producer retries the delivery of messages upon a failed message delivery attempt. For more information, see [Message sending retry](../04-功能行为/05sendretrypolicy.md).
+Send retry policy specifies how a producer retries the delivery of messages upon a failed message delivery attempt. For more information, see [Message sending retry](../04-featureBehavior/05sendretrypolicy.md).
## Version compatibility
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/07consumergroup.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/07consumergroup.md
similarity index 93%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/07consumergroup.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/07consumergroup.md
index a56e065fc..3eed7dd86 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/07consumergroup.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/07consumergroup.md
@@ -11,9 +11,9 @@ In a consumer group, consumers consume messages based on the consumption behavio
* Subscription: Apache RocketMQ manages and traces subscriptions based on consumer groups. For more information, see [Subscriptions](./09subscription.md).
aa
-* Delivery order: The Apache RocketMQ broker delivers messages to consumers by using ordered delivery or concurrent delivery. You can configure the delivery method in the consumer group. For more information, see [fifo messages](../04-功能行为/03fifomessage.md).
+* Delivery order: The Apache RocketMQ broker delivers messages to consumers by using ordered delivery or concurrent delivery. You can configure the delivery method in the consumer group. For more information, see [fifo messages](../04-featureBehavior/03fifomessage.md).
-* Consumption retry policy: the retry policy that is used when a consumer fails to consume a message. The policy includes the number of retries and the setting of dead-letter queues. For more information, see [Consumption retry](../04-功能行为/10consumerretrypolicy.md).
+* Consumption retry policy: the retry policy that is used when a consumer fails to consume a message. The policy includes the number of retries and the setting of dead-letter queues. For more information, see [Consumption retry](../04-featureBehavior/10consumerretrypolicy.md).
## Model relationship
@@ -34,13 +34,13 @@ The following figure shows the position of consumer groups in the domain model o
* Definition: the name of a consumer group. Consumer group names are used to distinguish between consumer groups. Consumer group names are globally unique in a cluster.
-* Values: created and configured by users. For more information, see [Parameter limits](../01-基础介绍/03limits.md).
+* Values: created and configured by users. For more information, see [Parameter limits](../01-introduction/03limits.md).
**Delivery order**
* Definition: the order in which Apache RocketMQ delivers messages to a consumer client.
- Apache RocketMQ supports ordered delivery and concurrent delivery based on different consumption scenarios. For more information, see [Fifo messages](../04-功能行为/03fifomessage.md).
+ Apache RocketMQ supports ordered delivery and concurrent delivery based on different consumption scenarios. For more information, see [Fifo messages](../04-featureBehavior/03fifomessage.md).
* Values: The default delivery method is concurrent delivery.
@@ -49,7 +49,7 @@ The following figure shows the position of consumer groups in the domain model o
**Consumption retry policy**
-* Definition: the retry policy that is used when a consumer fails to consume a message. If a consumer fails to consume a message, the system re-delivers the failed message to the consumer for re-consumption based on the policy. For more information, see [Consumption retry](../04-功能行为/10consumerretrypolicy.md).
+* Definition: the retry policy that is used when a consumer fails to consume a message. If a consumer fails to consume a message, the system re-delivers the failed message to the consumer for re-consumption based on the policy. For more information, see [Consumption retry](../04-featureBehavior/10consumerretrypolicy.md).
* Values:A consumption retry policy contains the following items:
@@ -58,14 +58,14 @@ The following figure shows the position of consumer groups in the domain model o
* Retry interval: the interval between which the Apache RocketMQ broker re-delivers a failed message.
-For more information about the valid values and default values of maximum retries and retry intervals, see [Parameter limits](../01-基础介绍/03limits.md).
+For more information about the valid values and default values of maximum retries and retry intervals, see [Parameter limits](../01-introduction/03limits.md).
* Constraint: Retry interval is available only for push consumers.
**Subscription**
-* Definition: the set of subscription relationships that are associated with the current consumer group. A subscription includes the topics to which the consumers subscribe and the message filter rules that are used by consumers. For more information, see [Subscriptions](../03-领域模型/09subscription.md).
+* Definition: the set of subscription relationships that are associated with the current consumer group. A subscription includes the topics to which the consumers subscribe and the message filter rules that are used by consumers. For more information, see [Subscriptions](../03-domainModel/09subscription.md).
Consumers dynamically register subscriptions for consumer groups. The Apache RocketMQ broker persists subscriptions and matches the subscriptions to the consumption progress of messages.
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/08consumer.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/08consumer.md
similarity index 96%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/08consumer.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/08consumer.md
index 4de372460..d8ae4cca6 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/08consumer.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/08consumer.md
@@ -12,7 +12,7 @@ The following items determine consumer behavior:
* Consumer identity: A consumer must be associated with a consumer group to obtain behavior settings and consumption status.
-* Consumer type: Apache RocketMQ provides a variety of consumer types for different development scenarios, including push consumers, simple consumers and pull consumers. For more information, see [Consumer types](../04-功能行为/06consumertype.md).
+* Consumer type: Apache RocketMQ provides a variety of consumer types for different development scenarios, including push consumers, simple consumers and pull consumers. For more information, see [Consumer types](../04-featureBehavior/06consumertype.md).
* Local settings for consumers: These settings specify how consumer clients run based on the consumer type. For example, you can configure the number of threads and concurrency settings on consumers to achieve different transmission effects.
@@ -36,7 +36,7 @@ The following figure shows how consumers are positioned in the domain model of A
* Values: Consumer groups are the logical resources of Apache RocketMQ{#product-name}
- . You must create consumer groups by using the console or calling API operations in advance. For more information about the limits on this operation, see[Parameter limits](../01-基础介绍/03limits.md).
+ . You must create consumer groups by using the console or calling API operations in advance. For more information about the limits on this operation, see[Parameter limits](../01-introduction/03limits.md).
**Client ID**
@@ -58,7 +58,7 @@ The following figure shows how consumers are positioned in the domain model of A
Transmission is required only when identity recognition and authentication are enabled on the server.
-* Request Timeout **(Optional)** : the timeout period of the network request. For more information about the value range and default value, see [Parameter limits](../01-基础介绍/03limits.md).
+* Request Timeout **(Optional)** : the timeout period of the network request. For more information about the value range and default value, see [Parameter limits](../01-introduction/03limits.md).
**Pre-bound subscription list**
@@ -73,7 +73,7 @@ The following figure shows how consumers are positioned in the domain model of A
* Values: The value of a message listener is configured on the consumer client.
-* Constraints: When you consume messages as a push consumer, you must configure the message listener on the consumer client. For more information about consumer types, see [Consumer types](../04-功能行为/06consumertype.md).
+* Constraints: When you consume messages as a push consumer, you must configure the message listener on the consumer client. For more information about consumer types, see [Consumer types](../04-featureBehavior/06consumertype.md).
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/09subscription.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/09subscription.md
similarity index 98%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/09subscription.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/09subscription.md
index 92c6cc764..05e7395cd 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/09subscription.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/03-domainModel/09subscription.md
@@ -10,7 +10,7 @@ Subscriptions are dynamically registered by consumer groups with brokers. Messag
By configuring subscriptions, you can control the following messaging behaviors:
-* Message filter rules: These rules are used to define which messages in a topic are consumed by a consumer. By configuring message filter rules, consumers can effectively obtain messages that they want and specify message receiving ranges based on different business scenarios. For more information, see [Message filtering](../04-功能行为/07messagefilter.md).
+* Message filter rules: These rules are used to define which messages in a topic are consumed by a consumer. By configuring message filter rules, consumers can effectively obtain messages that they want and specify message receiving ranges based on different business scenarios. For more information, see [Message filtering](../04-featureBehavior/07messagefilter.md).
* Consumption status: By default, the Apache RocketMQ broker provides persistent subscriptions. In other words, after a consumer group subscribes to a broker, consumers in the group can continue consuming messages from where the consumers left off after they reconnect.
@@ -55,7 +55,7 @@ The following figure shows the position of subscriptions in the domain model of
* Definition: the expression of a custom filter rule.
-* Values: For more information, see [Syntax for filter expressions](../04-功能行为/07messagefilter.md).
+* Values: For more information, see [Syntax for filter expressions](../04-featureBehavior/07messagefilter.md).
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/01normalmessage.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/01normalmessage.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/01normalmessage.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/01normalmessage.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/02delaymessage.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/02delaymessage.md
similarity index 97%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/02delaymessage.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/02delaymessage.md
index 186f3a968..a1121eadd 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/02delaymessage.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/02delaymessage.md
@@ -42,7 +42,7 @@ delay messages are messages with advanced features in Apache RocketMQ. delay mes
* The scheduled time must be within the allowed time range. If the scheduled time exceeds the range, the scheduled time does not take effect and the messages are immediately delivered from the server side.
-* By default, the maximum time range for delay messages is 24 hours. You cannot change the default value. For more information, see[Parameter limits](../01-基础介绍/03limits.md).
+* By default, the maximum time range for delay messages is 24 hours. You cannot change the default value. For more information, see[Parameter limits](../01-introduction/03limits.md).
* The scheduled time must be later than the current time. If the scheduled time is set to a time earlier than the current time, the scheduled time does not take effect and the messages are immediately delivered from the server side.
@@ -67,7 +67,7 @@ delay messages are messages with advanced features in Apache RocketMQ. delay mes
* Inflight: The message is obtained by the consumer and processed based on the local business logic of the consumer.
- In this process, the broker waits for the consumer to complete the consumption and submit the consumption result. If no response is received from the consumer in a certain period of time, Apache RocketMQ retries the message. For more information, see [Consumption retry](../04-功能行为/10consumerretrypolicy.md).
+ In this process, the broker waits for the consumer to complete the consumption and submit the consumption result. If no response is received from the consumer in a certain period of time, Apache RocketMQ retries the message. For more information, see [Consumption retry](../04-featureBehavior/10consumerretrypolicy.md).
* Acked: The consumer completes consumption and submits the consumption result to the broker. The broker marks whether the current message is successfully consumed.
@@ -75,7 +75,7 @@ delay messages are messages with advanced features in Apache RocketMQ. delay mes
By default, Apache RocketMQ retains all messages. When the consumption result is submitted, the message data is logically marked as consumed instead of being deleted immediately. Therefore, the consumer can backtrack the message for re-consumption before it is deleted due to the expiration of the retention period or insufficient storage space.
-* Deleted: When the retention period of the message expires or the storage space is insufficient, Apache RocketMQ deletes the earliest saved message from the physical file in a rolling manner. For more information, see [Message storage and cleanup](../04-功能行为/11messagestorepolicy.md).
+* Deleted: When the retention period of the message expires or the storage space is insufficient, Apache RocketMQ deletes the earliest saved message from the physical file in a rolling manner. For more information, see [Message storage and cleanup](../04-featureBehavior/11messagestorepolicy.md).
## Usage limits
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/03fifomessage.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/03fifomessage.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/03fifomessage.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/03fifomessage.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/04transactionmessage.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/04transactionmessage.md
similarity index 99%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/04transactionmessage.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/04transactionmessage.md
index 8b0a3a379..a6a9c2dbb 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/04transactionmessage.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/04transactionmessage.md
@@ -67,7 +67,7 @@ The following figure shows the interaction process of transactional messages..
+ **Note** For more information about the length of the period and the maximum number of queries, see[Parameter limits](../01-introduction/03limits.md).
6. After the producer receives the request, the producer checks the execution result of the local transaction that corresponds to the half message.
@@ -113,7 +113,7 @@ The transactional message feature of Apache RocketMQ ensures only final consiste
**Transaction timeout mechanism**
-Apache RocketMQ implements a timeout mechanism for transactional messages. Upon receiving a half message, if the broker cannot determine whether to commit or roll back the transaction after a certain period of time, the broker rolls back the message by default. For more information about the timeout period, see[Parameter limits](../01-基础介绍/03limits.md).
+Apache RocketMQ implements a timeout mechanism for transactional messages. Upon receiving a half message, if the broker cannot determine whether to commit or roll back the transaction after a certain period of time, the broker rolls back the message by default. For more information about the timeout period, see[Parameter limits](../01-introduction/03limits.md).
## Example
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/05sendretrypolicy.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/05sendretrypolicy.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/05sendretrypolicy.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/05sendretrypolicy.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/06consumertype.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/06consumertype.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/06consumertype.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/06consumertype.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/07messagefilter.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/07messagefilter.md
similarity index 99%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/07messagefilter.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/07messagefilter.md
index 505d658c5..b23a080fa 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/07messagefilter.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/07messagefilter.md
@@ -43,7 +43,7 @@ For more information about how to use the filtering methods, see [Tag-based filt
## Subscription consistency
-Filter expressions are part of a subscription. According to the publish-subscribe pattern of Apache RocketMQ, the subscription of one consumer must be consistent with that of another within a consumer group, including their filter expressions, to avoid situations where some messages cannot be consumed. For more information, see [Subscriptions](../03-领域模型/09subscription.md).
+Filter expressions are part of a subscription. According to the publish-subscribe pattern of Apache RocketMQ, the subscription of one consumer must be consistent with that of another within a consumer group, including their filter expressions, to avoid situations where some messages cannot be consumed. For more information, see [Subscriptions](../03-domainModel/09subscription.md).
## Tag-based filtering
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/08consumerloadbalance.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/08consumerloadbalance.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/08consumerloadbalance.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/08consumerloadbalance.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/09consumerprogress.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/09consumerprogress.md
similarity index 98%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/09consumerprogress.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/09consumerprogress.md
index dd5af636d..7d6c9cd0b 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/09consumerprogress.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/09consumerprogress.md
@@ -21,7 +21,7 @@ The consumer progress management mechanism of Apache RocketMQ solves the followi
**Message Offset**
-In Apache RocketMQ, messages are queued in topics in the order that they arrive, and are assigned a unique Long-type coordinate. This is also known as the offset of the message. For more information about the individual definitions of these concepts, see [Topic](../03-领域模型/02topic.md) and [Message queue](../03-领域模型/03messagequeue.md).
+In Apache RocketMQ, messages are queued in topics in the order that they arrive, and are assigned a unique Long-type coordinate. This is also known as the offset of the message. For more information about the individual definitions of these concepts, see [Topic](../03-domainModel/02topic.md) and [Message queue](../03-domainModel/03messagequeue.md).
Theoretically speaking, a message queue can store an indefinite number of messages. Therefore, the value range of offset is from 0 to Long.MAX_VALUE. You can locate any message based on its topic, queue, and offset. The following figure shows the relationship between these three concepts.
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/10consumerretrypolicy.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/10consumerretrypolicy.md
similarity index 98%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/10consumerretrypolicy.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/10consumerretrypolicy.md
index 67bee82a0..f26a9a231 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/10consumerretrypolicy.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/10consumerretrypolicy.md
@@ -90,7 +90,7 @@ When a message is retried, its state changes from Ready to Inflight and then to
**Maximum number of retries**
-The maximum number of retries for a push consumer is specified in the metadata when the consumer group is created. For more information, see [Consumer groups](../03-领域模型/07consumergroup.md).
+The maximum number of retries for a push consumer is specified in the metadata when the consumer group is created. For more information, see [Consumer groups](../03-domainModel/07consumergroup.md).
For example, if the maximum number of retries is three, the message can be delivered four times: one original attempt and three retries.
@@ -114,7 +114,7 @@ For example, if the maximum number of retries is three, the message can be deliv
If the number of retries exceeds 16, the interval of each subsequent retry is 2 hours.
:::
-* Ordered messages: fixed. For more information, see[Parameter limits](../01-基础介绍/03limits.md).
+* Ordered messages: fixed. For more information, see[Parameter limits](../01-introduction/03limits.md).
**Example**
@@ -169,7 +169,7 @@ As shown in the following figure, the change takes effect immediately, that is,
**Maximum number of retries**
-The maximum number of retries for a simple consumer is specified in the metadata when the consumer group is created. For more information, see [Consumer groups](../03-领域模型/07consumergroup.md).
+The maximum number of retries for a simple consumer is specified in the metadata when the consumer group is created. For more information, see [Consumer groups](../03-domainModel/07consumergroup.md).
**Message retry interval**
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/11messagestorepolicy.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/11messagestorepolicy.md
similarity index 95%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/11messagestorepolicy.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/11messagestorepolicy.md
index 6d90935ea..4506f01fb 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/11messagestorepolicy.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/04-featureBehavior/11messagestorepolicy.md
@@ -4,7 +4,7 @@ This topic describes how Apache RocketMQ stores messages, including storage gran
## Background information
-Based on the definition of [MessageQueue](../03-领域模型/03messagequeue.md) in Apache RocketMQ, messages are stored in queues in the order in which the messages are received by the broker. In theory, the number of messages that a queue can store is unlimited.
+Based on the definition of [MessageQueue](../03-domainModel/03messagequeue.md) in Apache RocketMQ, messages are stored in queues in the order in which the messages are received by the broker. In theory, the number of messages that a queue can store is unlimited.
In actual deployment scenarios, messages cannot be permanently stored because the physical storage space of a broker is limited. Therefore, when you deploy messages, you need to answer three questions: What criteria are used to determine how to store messages on a broker? What granularity is used to manage the stored messages? What measures must be taken when message storage usage exceeds the limit? The message storage and cleanup mechanisms of Apache RocketMQ provide answers to the prec [...]
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/15deploy.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/05-deploymentOperations/15deploy.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/15deploy.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/05-deploymentOperations/15deploy.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/16admintool.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/05-deploymentOperations/16admintool.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/16admintool.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/05-deploymentOperations/16admintool.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/17Dashboard.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/05-deploymentOperations/17Dashboard.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/17Dashboard.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/05-deploymentOperations/17Dashboard.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/18Exporter.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/05-deploymentOperations/18Exporter.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/18Exporter.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/05-deploymentOperations/18Exporter.md
diff --git "a/versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/15bestpractice.md
similarity index 98%
rename from "versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/15bestpractice.md
index 9fe8a3ca4..8c2b75400 100644
--- "a/versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/15bestpractice.md
@@ -1,104 +1,104 @@
-# 基本最佳实践
-
-## 生产者
-
-### 发送消息注意事项
-
-#### Tag的使用
-
-一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤,5.x SDK 可以调用messageBuilder.setTag("messageTag"),历史版本可以调用 message.setTags("messageTag")。
-
-#### Keys的使用
-
-每个消息在业务层面一般建议映射到业务的唯一标识并设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。常见的设置策略使用订单Id、用户Id、请求Id等比较离散的唯一标识来处理。
-
-#### 日志的打印
-
-消息发送成功或者失败要打印消息日志,用于业务排查问题。Send消息方法只要不抛异常,就代表发送成功。
-### 消息发送失败处理方式
-
-Producer的send方法本身支持内部重试,5.x SDK的重试逻辑参考[发送重试策略](../04-功能行为/05sendretrypolicy.md):
-
-以上策略也是在一定程度上保证了消息可以发送成功。如果业务要求消息发送不能丢,仍然需要对可能出现的异常做兜底,比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
-
-上述DB重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
-
-## 消费者
-
-### 消费过程幂等
-
-RocketMQ 无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
-
-msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
-
-### 消费速度慢的处理方式
-
-### 提高消费并行度
-
-绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
-
-- 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度。可以通过加机器,或者在已有机器启动多个进程的方式。
-- 提高单个 Consumer 的消费并行线程,5.x PushConsumer SDK 可以通过PushConsumerBuilder.setConsumptionThreadCount() 设置线程数,SimpleConsumer可以由业务线程自由增加并发,底层线程安全;历史版本SDK PushConsumer可以通过修改参数 consumeThreadMin、consumeThreadMax实现。
-
-### 批量方式消费
-
-某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量。建议使用5.x SDK的SimpleConsumer,每次接口调用设置批次大小,一次性拉取消费多条消息。
-
-### 重置位点跳过非重要消息
-
-发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。建议使用重置位点功能直接调整消费位点到指定时刻或者指定位置。
-
-#### 优化每条消息消费过程
-
-举例如下,某条消息的消费过程如下:
-
-- 根据消息从 DB 查询【数据 1】
-- 根据消息从 DB 查询【数据 2】
-- 复杂的业务计算
-- 向 DB 插入【数据 3】
-- 向 DB 插入【数据 4】
-
-这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。
-
-### 消费打印日志
-
-如果消息量较少,建议在消费入口方法打印消息,消费耗时等,方便后续排查问题。
-
-```java
- new MessageListener() {
- @Override
- public ConsumeResult consume(MessageView messageView) {
- LOGGER.info("Consume message={}", messageView);
- //Do your consume process
- return ConsumeResult.SUCCESS;
- }
- }
-```
-
-如果能打印每条消息消费耗时,那么在排查消费慢等线上问题时,会更方便。但如果线上环境TPS很高,不建议开启,避免日志太多影响性能。
-
-## Broker
-
-### Broker 角色
- Broker 角色分为 ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。如果对消息的可靠性要求比较严格,可以采用 SYNC_MASTER加SLAVE的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加SLAVE的部署方式。如果只是测试方便,则可以选择仅ASYNC_MASTER或仅SYNC_MASTER的部署方式。
-### FlushDiskType
- SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。
-### Broker 配置
-
-| 参数名 | 默认值 | 说明 |
-| -------------------------------- | ----------------------------- | ------------------------------------------------------------ |
-| listenPort | 10911 | 接受客户端连接的监听端口 |
-| namesrvAddr | null | nameServer 地址 |
-| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
-| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
-| brokerName | null | broker 的名称 |
-| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
-| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
-| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
-| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
-| mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
-| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
-| fileReserverdTime | 72 | 以小时计算的文件保留时间 |
-| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
-| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
-
+# 基本最佳实践
+
+## 生产者
+
+### 发送消息注意事项
+
+#### Tag的使用
+
+一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤,5.x SDK 可以调用messageBuilder.setTag("messageTag"),历史版本可以调用 message.setTags("messageTag")。
+
+#### Keys的使用
+
+每个消息在业务层面一般建议映射到业务的唯一标识并设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。常见的设置策略使用订单Id、用户Id、请求Id等比较离散的唯一标识来处理。
+
+#### 日志的打印
+
+消息发送成功或者失败要打印消息日志,用于业务排查问题。Send消息方法只要不抛异常,就代表发送成功。
+### 消息发送失败处理方式
+
+Producer的send方法本身支持内部重试,5.x SDK的重试逻辑参考[发送重试策略](../04-featureBehavior/05sendretrypolicy.md):
+
+以上策略也是在一定程度上保证了消息可以发送成功。如果业务要求消息发送不能丢,仍然需要对可能出现的异常做兜底,比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
+
+上述DB重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
+
+## 消费者
+
+### 消费过程幂等
+
+RocketMQ 无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
+
+msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
+
+### 消费速度慢的处理方式
+
+### 提高消费并行度
+
+绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
+
+- 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度。可以通过加机器,或者在已有机器启动多个进程的方式。
+- 提高单个 Consumer 的消费并行线程,5.x PushConsumer SDK 可以通过PushConsumerBuilder.setConsumptionThreadCount() 设置线程数,SimpleConsumer可以由业务线程自由增加并发,底层线程安全;历史版本SDK PushConsumer可以通过修改参数 consumeThreadMin、consumeThreadMax实现。
+
+### 批量方式消费
+
+某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量。建议使用5.x SDK的SimpleConsumer,每次接口调用设置批次大小,一次性拉取消费多条消息。
+
+### 重置位点跳过非重要消息
+
+发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。建议使用重置位点功能直接调整消费位点到指定时刻或者指定位置。
+
+#### 优化每条消息消费过程
+
+举例如下,某条消息的消费过程如下:
+
+- 根据消息从 DB 查询【数据 1】
+- 根据消息从 DB 查询【数据 2】
+- 复杂的业务计算
+- 向 DB 插入【数据 3】
+- 向 DB 插入【数据 4】
+
+这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。
+
+### 消费打印日志
+
+如果消息量较少,建议在消费入口方法打印消息,消费耗时等,方便后续排查问题。
+
+```java
+ new MessageListener() {
+ @Override
+ public ConsumeResult consume(MessageView messageView) {
+ LOGGER.info("Consume message={}", messageView);
+ //Do your consume process
+ return ConsumeResult.SUCCESS;
+ }
+ }
+```
+
+如果能打印每条消息消费耗时,那么在排查消费慢等线上问题时,会更方便。但如果线上环境TPS很高,不建议开启,避免日志太多影响性能。
+
+## Broker
+
+### Broker 角色
+ Broker 角色分为 ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。如果对消息的可靠性要求比较严格,可以采用 SYNC_MASTER加SLAVE的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加SLAVE的部署方式。如果只是测试方便,则可以选择仅ASYNC_MASTER或仅SYNC_MASTER的部署方式。
+### FlushDiskType
+ SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。
+### Broker 配置
+
+| 参数名 | 默认值 | 说明 |
+| -------------------------------- | ----------------------------- | ------------------------------------------------------------ |
+| listenPort | 10911 | 接受客户端连接的监听端口 |
+| namesrvAddr | null | nameServer 地址 |
+| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
+| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
+| brokerName | null | broker 的名称 |
+| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
+| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
+| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
+| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
+| mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
+| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
+| fileReserverdTime | 72 | 以小时计算的文件保留时间 |
+| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
+| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
+
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/16dledger.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/16dledger.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/16dledger.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/16dledger.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/18access.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/18access.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/18access.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/18access.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/19JVMOS.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/19JVMOS.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/19JVMOS.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/19JVMOS.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/21subscribe.md
similarity index 98%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/21subscribe.md
index b34c071e1..8c237124c 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/21subscribe.md
@@ -2,7 +2,7 @@
## 前言
-订阅关系是 RocketMQ 领域模型中非常重要的环节,用于表达消费者消费消息的控制元数据,完整的概念请参考[订阅关系模型](../03-领域模型/09subscription.md)。
+订阅关系是 RocketMQ 领域模型中非常重要的环节,用于表达消费者消费消息的控制元数据,完整的概念请参考[订阅关系模型](../03-domainModel/09subscription.md)。
订阅关系一致是指,同一个消费者组下所有消费者实例所订阅的Topic、Tag必须完全一致。如果订阅关系(消费者分组名-Topic-Tag)不一致,会导致消费消息紊乱,甚至消息丢失。
diff --git "a/versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/22FAQ.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/22FAQ.md
similarity index 100%
rename from "versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/22FAQ.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/06-bestPractice/22FAQ.md
diff --git "a/docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/29how-to-contribute.md
similarity index 88%
rename from "docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/29how-to-contribute.md
index 5d8a88fa0..2947525c8 100644
--- "a/docs/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/29how-to-contribute.md
@@ -33,7 +33,7 @@ Apache RocketMQ 社区提供完备的处理流程帮您解答问题。
* 根据您的需求评估投入成本和设计解决方案
* 便于社区围绕该提案展开建设性的讨论
-若您计划实现自己的提案以贡献社区,同样需要提供详细描述信息,并遵循 [code-guidelines](/docs/贡献指南/30code-guidelines) 中的编码规范
+若您计划实现自己的提案以贡献社区,同样需要提供详细描述信息,并遵循 [code-guidelines](/docs/contributionGuide/30code-guidelines) 中的编码规范
我们推荐先在社区达成共识再着手实现功能。通过讨论新特性的必要性及实现方案等问题,可以早发现超出项目范围的提案。
@@ -63,7 +63,7 @@ Apache RocketMQ 在其活跃社区的推动下持续发展着。每隔几周我
2. 测试预发布版本并评分 (+1 未发现问题, -1 测试出问题)
3. 若预发布版本未测试出问题则发布,否则回到步骤 1
-我们在网站上整理了 [release-manual](/docs/贡献指南/32release-manual) 版本发布指南。测试预发行版是项大工程,我们需要吸纳更多人的参与。 RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
+我们在网站上整理了 [release-manual](/docs/contributionGuide/32release-manual) 版本发布指南。测试预发行版是项大工程,我们需要吸纳更多人的参与。 RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
@@ -71,10 +71,10 @@ RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发
## 贡献代码
-Apache RocketMQ 已然并将持续进行维护,优化,和扩展。因此 Apache RocketMQ 鼓励所有人贡献源代码。为给予代码贡献者和审查者极佳的代码贡献体验,并提供高质量的代码仓库,社区遵循 [code-guidelines](/docs/贡献指南/30code-guidelines) 中的贡献流程。编码手册包含构建开发环境指南,社区编码指南和编码风格,并介绍了如何提交贡献的代码。
+Apache RocketMQ 已然并将持续进行维护,优化,和扩展。因此 Apache RocketMQ 鼓励所有人贡献源代码。为给予代码贡献者和审查者极佳的代码贡献体验,并提供高质量的代码仓库,社区遵循 [code-guidelines](/docs/contributionGuide/30code-guidelines) 中的贡献流程。编码手册包含构建开发环境指南,社区编码指南和编码风格,并介绍了如何提交贡献的代码。
-**请务必在编码之前仔细阅读 [code-guidelines](/docs/贡献指南/30code-guidelines)
+**请务必在编码之前仔细阅读 [code-guidelines](/docs/contributionGuide/30code-guidelines)
并请阅读 [AFS Apache 软件基金会 贡献者协议](https://www.apache.org/licenses/contributor-agreements.html) 提交电子签名。
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/30code-guidelines.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/30code-guidelines.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/30code-guidelines.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/30code-guidelines.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/31pull-request.md
similarity index 98%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/31pull-request.md
index ef0301af6..4dde73a85 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md"
+++ b/i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/31pull-request.md
@@ -96,7 +96,7 @@ head repository / compare : 开发仓库及开发分支
提交 PR 前,请先做如下确认:
1. 已创建与 PR 对应的 [GitHub Issue]( [apache/rocketmq: Mirror of Apache RocketMQ (github.com)](https://github.com/apache/rocketmq/issues) )
-2. 修改内容符合 [Coding Guidelines](/docs/贡献指南/30code-guidelines) 编程规范
+2. 修改内容符合 [Coding Guidelines](/docs/contributionGuide/30code-guidelines) 编程规范
3. PR 摘要以 [ISSUE #XXX] 开始并简要描述变更需求
4. 概述 PR 变更需求,变更日志,验证信息,可参考 [PR Demo](https://github.com/apache/rocketmq/pull/152)
5. 提交内容具备完整的测试用例,并确保基本检查,单元测试,集成测试通过
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/32release-manual.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/32release-manual.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/32release-manual.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/07-contributionGuide/32release-manual.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/30RocketMQ Streams Overview.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-streams/30RocketMQ Streams Overview.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/30RocketMQ Streams Overview.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/08-streams/30RocketMQ Streams Overview.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/31RocketMQ Streams Concept.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-streams/31RocketMQ Streams Concept.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/31RocketMQ Streams Concept.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/08-streams/31RocketMQ Streams Concept.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/32RocketMQ Streams Quick Start.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-streams/32RocketMQ Streams Quick Start.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/32RocketMQ Streams Quick Start.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/08-streams/32RocketMQ Streams Quick Start.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/33RocketMQ Streams In Action.md" b/i18n/en/docusaurus-plugin-content-docs/version-5.0/08-streams/33RocketMQ Streams In Action.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/33RocketMQ Streams In Action.md"
rename to i18n/en/docusaurus-plugin-content-docs/version-5.0/08-streams/33RocketMQ Streams In Action.md
diff --git a/package.json b/package.json
index d056278c3..85a8b6300 100644
--- a/package.json
+++ b/package.json
@@ -14,9 +14,9 @@
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
- "@docusaurus/core": "2.0.0-beta.21",
- "@docusaurus/plugin-client-redirects": "2.0.0-beta.21",
- "@docusaurus/preset-classic": "2.0.0-beta.21",
+ "@docusaurus/core": "^2.1.0",
+ "@docusaurus/plugin-client-redirects": "^2.1.0",
+ "@docusaurus/preset-classic": "^2.1.0",
"@emotion/react": "^11.9.3",
"@emotion/styled": "^11.9.3",
"@headlessui/react": "^1.6.5",
diff --git a/release-notes/2017-01-24-4.0.0.md b/release-notes/2017-01-24-4.0.0.md
index f2c5b87af..c019a56fc 100644
--- a/release-notes/2017-01-24-4.0.0.md
+++ b/release-notes/2017-01-24-4.0.0.md
@@ -13,7 +13,7 @@ tags:
* Binary: [rocketmq-all-4.0.0-incubating-bin-release.zip](https://archive.apache.org/dist/rocketmq/4.0.0-incubating/rocketmq-all-4.0.0-incubating-bin-release.zip) [[PGP](https://archive.apache.org/dist/rocketmq/4.0.0-incubating/rocketmq-all-4.0.0-incubating-bin-release.zip.asc)] [[MD5](https://archive.apache.org/dist/rocketmq/4.0.0-incubating/rocketmq-all-4.0.0-incubating-bin-release.zip.md5)] [[SHA1](https://archive.apache.org/dist/rocketmq/4.0.0-incubating/rocketmq-all-4.0.0-incubating [...]
:::
<!--truncate-->
-Below is a summary of the JIRA issues addressed in the 4.0.0-incubating release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the JIRA issues addressed in the 4.0.0-incubating release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
<h2> Bug
</h2>
diff --git a/release-notes/2017-12-13-4.2.0.md b/release-notes/2017-12-13-4.2.0.md
index 8cab88fab..9cee55495 100644
--- a/release-notes/2017-12-13-4.2.0.md
+++ b/release-notes/2017-12-13-4.2.0.md
@@ -14,7 +14,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the JIRA issues addressed in the 4.2.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the JIRA issues addressed in the 4.2.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## New Feature
diff --git a/release-notes/2018-07-24-4.3.0.md b/release-notes/2018-07-24-4.3.0.md
index 0390eda67..be9908bb9 100644
--- a/release-notes/2018-07-24-4.3.0.md
+++ b/release-notes/2018-07-24-4.3.0.md
@@ -13,7 +13,7 @@ tags:
* Binary: [rocketmq-all-4.3.0-bin-release.zip](https://archive.apache.org/dist/rocketmq/4.3.0/rocketmq-all-4.3.0-bin-release.zip) [[PGP](https://archive.apache.org/dist/rocketmq/4.3.0/rocketmq-all-4.3.0-bin-release.zip.asc)] [[MD5](https://archive.apache.org/dist/rocketmq/4.3.0/rocketmq-all-4.3.0-bin-release.zip.md5)] [[SHA1](https://archive.apache.org/dist/rocketmq/4.3.0/rocketmq-all-4.3.0-bin-release.zip.sha1)]
:::
<!--truncate-->
-Below is a summary of the JIRA issues addressed in the 4.3.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the JIRA issues addressed in the 4.3.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## New Feature
diff --git a/release-notes/2018-08-29-4.3.1.md b/release-notes/2018-08-29-4.3.1.md
index dbda6a926..6a9fa8b73 100644
--- a/release-notes/2018-08-29-4.3.1.md
+++ b/release-notes/2018-08-29-4.3.1.md
@@ -14,7 +14,7 @@ tags:
* Binary: [rocketmq-all-4.3.1-bin-release.zip](https://archive.apache.org/dist/rocketmq/4.3.1/rocketmq-all-4.3.1-bin-release.zip) [[PGP](https://archive.apache.org/dist/rocketmq/4.3.1/rocketmq-all-4.3.1-bin-release.zip.asc)] [[MD5](https://archive.apache.org/dist/rocketmq/4.3.1/rocketmq-all-4.3.1-bin-release.zip.md5)] [[SHA1](https://archive.apache.org/dist/rocketmq/4.3.1/rocketmq-all-4.3.1-bin-release.zip.sha1)]
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.3.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.3.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Improvement
diff --git a/release-notes/2018-11-02-4.3.2.md b/release-notes/2018-11-02-4.3.2.md
index d6b0661cf..b2787231a 100644
--- a/release-notes/2018-11-02-4.3.2.md
+++ b/release-notes/2018-11-02-4.3.2.md
@@ -15,7 +15,7 @@ tags:
<!--truncate-->
-Below is a summary of the issues addressed in the 4.3.2 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.3.2 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Improvement
<ul>
diff --git a/release-notes/2019-01-17-4.4.0.md b/release-notes/2019-01-17-4.4.0.md
index 1ec8d13cf..2744c0591 100644
--- a/release-notes/2019-01-17-4.4.0.md
+++ b/release-notes/2019-01-17-4.4.0.md
@@ -15,7 +15,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.4.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.4.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## New Feature
diff --git a/release-notes/2019-03-29-4.5.0.md b/release-notes/2019-03-29-4.5.0.md
index af07e0e49..13c2e7d94 100644
--- a/release-notes/2019-03-29-4.5.0.md
+++ b/release-notes/2019-03-29-4.5.0.md
@@ -15,7 +15,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.5.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.5.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## New Feature
diff --git a/release-notes/2019-05-13-4.5.1.md b/release-notes/2019-05-13-4.5.1.md
index ea9822a69..4fde7a103 100644
--- a/release-notes/2019-05-13-4.5.1.md
+++ b/release-notes/2019-05-13-4.5.1.md
@@ -15,7 +15,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.5.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.5.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## New Feature
<ul>
diff --git a/release-notes/2019-08-02-4.5.2.md b/release-notes/2019-08-02-4.5.2.md
index efbb3a272..6bdd63983 100644
--- a/release-notes/2019-08-02-4.5.2.md
+++ b/release-notes/2019-08-02-4.5.2.md
@@ -17,7 +17,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.5.2 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.5.2 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Improvement
diff --git a/release-notes/2019-11-25-4.6.0.md b/release-notes/2019-11-25-4.6.0.md
index d13615a46..73f9bdee9 100644
--- a/release-notes/2019-11-25-4.6.0.md
+++ b/release-notes/2019-11-25-4.6.0.md
@@ -16,7 +16,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.6.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.6.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
diff --git a/release-notes/2020-03-16-4.7.0.md b/release-notes/2020-03-16-4.7.0.md
index ced9e8611..abeb55205 100644
--- a/release-notes/2020-03-16-4.7.0.md
+++ b/release-notes/2020-03-16-4.7.0.md
@@ -16,7 +16,7 @@ tags:
<!--truncate-->
-Below is a summary of the issues addressed in the 4.7.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.7.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## New Feature
diff --git a/release-notes/2020-06-29-4.7.1.md b/release-notes/2020-06-29-4.7.1.md
index b146796c8..1191b9ce0 100644
--- a/release-notes/2020-06-29-4.7.1.md
+++ b/release-notes/2020-06-29-4.7.1.md
@@ -15,7 +15,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.7.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.7.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
diff --git a/release-notes/2020-12-21-4.8.0.md b/release-notes/2020-12-21-4.8.0.md
index 6d0d60473..caa270507 100644
--- a/release-notes/2020-12-21-4.8.0.md
+++ b/release-notes/2020-12-21-4.8.0.md
@@ -14,7 +14,7 @@ tags:
* Binary: [rocketmq-all-4.8.0-bin-release.zip](https://archive.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip) [[PGP](https://www.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip.asc)] [[SHA512](https://www.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip.sha512)]
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.8.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.8.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Feature
diff --git a/release-notes/2020-2-14-4.6.1.md b/release-notes/2020-2-14-4.6.1.md
index f4897e74c..6dcaab095 100644
--- a/release-notes/2020-2-14-4.6.1.md
+++ b/release-notes/2020-2-14-4.6.1.md
@@ -15,7 +15,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.6.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.6.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Improvement
diff --git a/release-notes/2021-06-15-4.9.0.md b/release-notes/2021-06-15-4.9.0.md
index c029659fc..07cb386ce 100644
--- a/release-notes/2021-06-15-4.9.0.md
+++ b/release-notes/2021-06-15-4.9.0.md
@@ -15,7 +15,7 @@ tags:
<!--truncate-->
-Below is a summary of the issues addressed in the 4.9.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.9.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Feature
<ul>
diff --git a/release-notes/2021-08-22-4.9.1.md b/release-notes/2021-08-22-4.9.1.md
index f6f44919f..07dd7aacb 100644
--- a/release-notes/2021-08-22-4.9.1.md
+++ b/release-notes/2021-08-22-4.9.1.md
@@ -14,7 +14,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.9.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.9.1 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Improvement
diff --git a/release-notes/2021-10-26-4.9.2.md b/release-notes/2021-10-26-4.9.2.md
index 063e611a7..1f5804f07 100644
--- a/release-notes/2021-10-26-4.9.2.md
+++ b/release-notes/2021-10-26-4.9.2.md
@@ -15,7 +15,7 @@ tags:
* Binary: [rocketmq-all-4.9.2-bin-release.zip](https://archive.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip) [[PGP](https://www.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip.asc)] [[SHA512](https://www.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip.sha512)]
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.9.2 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.9.2 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Feature
diff --git a/release-notes/2022-03-04-4.9.3.md b/release-notes/2022-03-04-4.9.3.md
index d60d40bed..0d577f111 100644
--- a/release-notes/2022-03-04-4.9.3.md
+++ b/release-notes/2022-03-04-4.9.3.md
@@ -17,7 +17,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.9.3 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.9.3 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Feature
<ul>
diff --git a/release-notes/2022-03-04-4.9.4.md b/release-notes/2022-03-04-4.9.4.md
index 03961356d..3f073b33e 100644
--- a/release-notes/2022-03-04-4.9.4.md
+++ b/release-notes/2022-03-04-4.9.4.md
@@ -14,7 +14,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 4.9.4 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 4.9.4 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Improvement
diff --git a/release-notes/2022-03-15-5.0.0-ALPHA.md b/release-notes/2022-03-15-5.0.0-ALPHA.md
index f191d5ac5..78326124a 100644
--- a/release-notes/2022-03-15-5.0.0-ALPHA.md
+++ b/release-notes/2022-03-15-5.0.0-ALPHA.md
@@ -13,7 +13,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 5.0.0-ALPHA release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart//'>Quick Start</a>.
+Below is a summary of the issues addressed in the 5.0.0-ALPHA release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart//'>Quick Start</a>.
## Feature
diff --git a/release-notes/2022-09-09-5.0.0.md b/release-notes/2022-09-09-5.0.0.md
index 1194a402d..fc6aad6a8 100644
--- a/release-notes/2022-09-09-5.0.0.md
+++ b/release-notes/2022-09-09-5.0.0.md
@@ -14,7 +14,7 @@ tags:
:::
<!--truncate-->
-Below is a summary of the issues addressed in the 5.0.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/快速入门/02quickstart/'>Quick Start</a>.
+Below is a summary of the issues addressed in the 5.0.0 release of RocketMQ. For full documentation of the release, a guide to get started, please refer to <a href='/docs/quickStart/02quickstart/'>Quick Start</a>.
## Feature
<ul>
<li>[<a href='https://github.com/apache/rocketmq/wiki/%5BRIP-19%5D-Server-side-rebalance,--lightweight-consumer-client-support'>RIP-19</a>] - Server side rebalance, lightweight consumer client support.
diff --git a/src/pages/components/Community.js b/src/pages/components/Community.js
index 4de3b84a8..5fbb4aca0 100644
--- a/src/pages/components/Community.js
+++ b/src/pages/components/Community.js
@@ -36,7 +36,7 @@ export default function Community() {
"button button--outline button--secondary button--lg",
styles.buttoncommunity
)}
- to={"/docs/贡献指南/29how-to-contribute"}
+ to={"/docs/contributionGuide/29how-to-contribute"}
><Translate id="贡献指南">
贡献指南
</Translate>
diff --git a/src/pages/components/Hero.js b/src/pages/components/Hero.js
index e5a498156..59a1f3e9a 100644
--- a/src/pages/components/Hero.js
+++ b/src/pages/components/Hero.js
@@ -35,7 +35,7 @@ export default function Hero(){
className={clsx(
"button button--outline button--secondary button--lg",styles.button
)}
- to={"/docs/快速入门/02quickstart"}
+ to={"/docs/quickStart/02quickstart"}
>
<Translate id="快速开始">快速开始</Translate>
</Link>
diff --git "a/versioned_docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/01whychoose.md" b/versioned_docs/version-5.0/01-introduction/01whychoose.md
similarity index 100%
rename from "versioned_docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/01whychoose.md"
rename to versioned_docs/version-5.0/01-introduction/01whychoose.md
diff --git "a/versioned_docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/02concepts.md" b/versioned_docs/version-5.0/01-introduction/02concepts.md
similarity index 87%
rename from "versioned_docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/02concepts.md"
rename to versioned_docs/version-5.0/01-introduction/02concepts.md
index 33d28a3c3..f9cd13d72 100644
--- "a/versioned_docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/02concepts.md"
+++ b/versioned_docs/version-5.0/01-introduction/02concepts.md
@@ -3,59 +3,59 @@
本文介绍 Apache RocketMQ 的基本概念,以便您更好地理解和使用 Apache RocketMQ 。
## 主题(Topic)
-Apache RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。主题通过TopicName来做唯一标识和区分。更多信息,请参见[主题(Topic)](../03-领域模型/02topic.md)。
+Apache RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。主题通过TopicName来做唯一标识和区分。更多信息,请参见[主题(Topic)](../03-domainModel/02topic.md)。
## 消息类型(MessageType)
Apache RocketMQ 中按照消息传输特性的不同而定义的分类,用于类型管理和安全校验。 Apache RocketMQ 支持的消息类型有普通消息、顺序消息、事务消息和定时/延时消息。
## 消息队列(MessageQueue)
-队列是 Apache RocketMQ 中消息存储和传输的实际容器,也是消息的最小存储单元。 Apache RocketMQ 的所有主题都是由多个队列组成,以此实现队列数量的水平拆分和队列内部的流式存储。队列通过QueueId来做唯一标识和区分。更多信息,请参见[队列(MessageQueue)](../03-领域模型/03messagequeue.md)。
+队列是 Apache RocketMQ 中消息存储和传输的实际容器,也是消息的最小存储单元。 Apache RocketMQ 的所有主题都是由多个队列组成,以此实现队列数量的水平拆分和队列内部的流式存储。队列通过QueueId来做唯一标识和区分。更多信息,请参见[队列(MessageQueue)](../03-domainModel/03messagequeue.md)。
## 消息(Message)
-消息是 Apache RocketMQ 中的最小数据传输单元。生产者将业务数据的负载和拓展属性包装成消息发送到服务端,服务端按照相关语义将消息投递到消费端进行消费。更多信息,请参见[消息(Message)](../03-领域模型/04message.md)。
+消息是 Apache RocketMQ 中的最小数据传输单元。生产者将业务数据的负载和拓展属性包装成消息发送到服务端,服务端按照相关语义将消息投递到消费端进行消费。更多信息,请参见[消息(Message)](../03-domainModel/04message.md)。
## 消息视图(MessageView)
消息视图是 Apache RocketMQ 面向开发视角提供的一种消息只读接口。通过消息视图可以读取消息内部的多个属性和负载信息,但是不能对消息本身做任何修改。
## 消息标签(MessageTag)
-消息标签是Apache RocketMQ 提供的细粒度消息分类属性,可以在主题层级之下做消息类型的细分。消费者通过订阅特定的标签来实现细粒度过滤。更多信息,请参见[消息过滤](../04-功能行为/07messagefilter.md)。
+消息标签是Apache RocketMQ 提供的细粒度消息分类属性,可以在主题层级之下做消息类型的细分。消费者通过订阅特定的标签来实现细粒度过滤。更多信息,请参见[消息过滤](../04-featureBehavior/07messagefilter.md)。
## 消息位点(MessageQueueOffset)
-消息是按到达Apache RocketMQ 服务端的先后顺序存储在指定主题的多个队列中,每条消息在队列中都有一个唯一的Long类型坐标,这个坐标被定义为消息位点。更多信息,请参见[消费进度管理](../04-功能行为/09consumerprogress.md)。
+消息是按到达Apache RocketMQ 服务端的先后顺序存储在指定主题的多个队列中,每条消息在队列中都有一个唯一的Long类型坐标,这个坐标被定义为消息位点。更多信息,请参见[消费进度管理](../04-featureBehavior/09consumerprogress.md)。
## 消费位点(ConsumerOffset)
-一条消息被某个消费者消费完成后不会立即从队列中删除,Apache RocketMQ 会基于每个消费者分组记录消费过的最新一条消息的位点,即消费位点。更多信息,请参见[消费进度管理](../04-功能行为/09consumerprogress.md)。
+一条消息被某个消费者消费完成后不会立即从队列中删除,Apache RocketMQ 会基于每个消费者分组记录消费过的最新一条消息的位点,即消费位点。更多信息,请参见[消费进度管理](../04-featureBehavior/09consumerprogress.md)。
## 消息索引(MessageKey)
消息索引是Apache RocketMQ 提供的面向消息的索引属性。通过设置的消息索引可以快速查找到对应的消息内容。
## 生产者(Producer)
-生产者是Apache RocketMQ 系统中用来构建并传输消息到服务端的运行实体。生产者通常被集成在业务系统中,将业务消息按照要求封装成消息并发送至服务端。更多信息,请参见[生产者(Producer)](../03-领域模型/04producer.md)。
+生产者是Apache RocketMQ 系统中用来构建并传输消息到服务端的运行实体。生产者通常被集成在业务系统中,将业务消息按照要求封装成消息并发送至服务端。更多信息,请参见[生产者(Producer)](../03-domainModel/04producer.md)。
## 事务检查器(TransactionChecker)
-Apache RocketMQ 中生产者用来执行本地事务检查和异常事务恢复的监听器。事务检查器应该通过业务侧数据的状态来检查和判断事务消息的状态。更多信息,请参见[事务消息](../04-功能行为/04transactionmessage.md)。
+Apache RocketMQ 中生产者用来执行本地事务检查和异常事务恢复的监听器。事务检查器应该通过业务侧数据的状态来检查和判断事务消息的状态。更多信息,请参见[事务消息](../04-featureBehavior/04transactionmessage.md)。
## 事务状态(TransactionResolution)
-Apache RocketMQ 中事务消息发送过程中,事务提交的状态标识,服务端通过事务状态控制事务消息是否应该提交和投递。事务状态包括事务提交、事务回滚和事务未决。更多信息,请参见[事务消息](../04-功能行为/04transactionmessage.md)。
+Apache RocketMQ 中事务消息发送过程中,事务提交的状态标识,服务端通过事务状态控制事务消息是否应该提交和投递。事务状态包括事务提交、事务回滚和事务未决。更多信息,请参见[事务消息](../04-featureBehavior/04transactionmessage.md)。
## 消费者分组(ConsumerGroup)
-消费者分组是Apache RocketMQ 系统中承载多个消费行为一致的消费者的负载均衡分组。和消费者不同,消费者分组并不是运行实体,而是一个逻辑资源。在 Apache RocketMQ 中,通过消费者分组内初始化多个消费者实现消费性能的水平扩展以及高可用容灾。更多信息,请参见[消费者分组(ConsumerGroup)](../03-领域模型/07consumergroup.md)。
+消费者分组是Apache RocketMQ 系统中承载多个消费行为一致的消费者的负载均衡分组。和消费者不同,消费者分组并不是运行实体,而是一个逻辑资源。在 Apache RocketMQ 中,通过消费者分组内初始化多个消费者实现消费性能的水平扩展以及高可用容灾。更多信息,请参见[消费者分组(ConsumerGroup)](../03-domainModel/07consumergroup.md)。
## 消费者(Consumer)
-消费者是Apache RocketMQ 中用来接收并处理消息的运行实体。消费者通常被集成在业务系统中,从服务端获取消息,并将消息转化成业务可理解的信息,供业务逻辑处理。更多信息,请参见[消费者(Consumer)](../03-领域模型/08consumer.md)。
+消费者是Apache RocketMQ 中用来接收并处理消息的运行实体。消费者通常被集成在业务系统中,从服务端获取消息,并将消息转化成业务可理解的信息,供业务逻辑处理。更多信息,请参见[消费者(Consumer)](../03-domainModel/08consumer.md)。
## 消费结果(ConsumeResult)
Apache RocketMQ 中PushConsumer消费监听器处理消息完成后返回的处理结果,用来标识本次消息是否正确处理。消费结果包含消费成功和消费失败。
## 订阅关系(Subscription)
-订阅关系是Apache RocketMQ 系统中消费者获取消息、处理消息的规则和状态配置。订阅关系由消费者分组动态注册到服务端系统,并在后续的消息传输中按照订阅关系定义的过滤规则进行消息匹配和消费进度维护。更多信息,请参见[订阅关系(Subscription)](../03-领域模型/09subscription.md)。
+订阅关系是Apache RocketMQ 系统中消费者获取消息、处理消息的规则和状态配置。订阅关系由消费者分组动态注册到服务端系统,并在后续的消息传输中按照订阅关系定义的过滤规则进行消息匹配和消费进度维护。更多信息,请参见[订阅关系(Subscription)](../03-domainModel/09subscription.md)。
## 消息过滤
消费者可以通过订阅指定消息标签(Tag)对消息进行过滤,确保最终只接收被过滤后的消息合集。过滤规则的计算和匹配在Apache RocketMQ
-的服务端完成。更多信息,请参见[消息过滤](../04-功能行为/07messagefilter.md)。
+的服务端完成。更多信息,请参见[消息过滤](../04-featureBehavior/07messagefilter.md)。
## 重置消费位点
-以时间轴为坐标,在消息持久化存储的时间范围内,重新设置消费者分组对已订阅主题的消费进度,设置完成后消费者将接收设定时间点之后,由生产者发送到Apache RocketMQ 服务端的消息。更多信息,请参见[重置消费位点](../04-功能行为/09consumerprogress.md)。
+以时间轴为坐标,在消息持久化存储的时间范围内,重新设置消费者分组对已订阅主题的消费进度,设置完成后消费者将接收设定时间点之后,由生产者发送到Apache RocketMQ 服务端的消息。更多信息,请参见[重置消费位点](../04-featureBehavior/09consumerprogress.md)。
## 消息轨迹
在一条消息从生产者发出到消费者接收并处理过程中,由各个相关节点的时间、地点等数据汇聚而成的完整链路信息。通过消息轨迹,您能清晰定位消息从生产者发出,经由Apache RocketMQ 服务端,投递给消费者的完整链路,方便定位排查问题。
diff --git "a/versioned_docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/03limits.md" b/versioned_docs/version-5.0/01-introduction/03limits.md
similarity index 100%
rename from "versioned_docs/version-5.0/01-\345\237\272\347\241\200\344\273\213\347\273\215/03limits.md"
rename to versioned_docs/version-5.0/01-introduction/03limits.md
diff --git "a/versioned_docs/version-5.0/02-\345\277\253\351\200\237\345\205\245\351\227\250/02quickstart.md" b/versioned_docs/version-5.0/02-quickStart/02quickstart.md
similarity index 97%
rename from "versioned_docs/version-5.0/02-\345\277\253\351\200\237\345\205\245\351\227\250/02quickstart.md"
rename to versioned_docs/version-5.0/02-quickStart/02quickstart.md
index 13b731b8f..89887fd3f 100644
--- "a/versioned_docs/version-5.0/02-\345\277\253\351\200\237\345\205\245\351\227\250/02quickstart.md"
+++ b/versioned_docs/version-5.0/02-quickStart/02quickstart.md
@@ -50,7 +50,7 @@ The Name Server boot success...
## 3. 启动Broker+Proxy
-NameServer成功启动后,我们启动Broker和Proxy,5.x 版本下我们建议使用 Local 模式部署,即 Broker 和 Proxy 同进程部署。5.x 版本也支持 Broker 和 Proxy 分离部署以实现更灵活的集群能力。详情参考[部署教程](../05-部署运维/15deploy.md)。
+NameServer成功启动后,我们启动Broker和Proxy,5.x 版本下我们建议使用 Local 模式部署,即 Broker 和 Proxy 同进程部署。5.x 版本也支持 Broker 和 Proxy 分离部署以实现更灵活的集群能力。详情参考[部署教程](../05-deploymentOperations/15deploy.md)。
```shell
### 先启动broker
@@ -158,7 +158,7 @@ $ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
```
-4. 在已创建的Java工程中,创建订阅普通消息程序并运行。Apache RocketMQ 支持[SimpleConsumer](../04-功能行为/06consumertype.md)和[PushConsumer](../04-功能行为/06consumertype.md)两种消费者类型,您可以选择以下任意一种方式订阅消息。
+4. 在已创建的Java工程中,创建订阅普通消息程序并运行。Apache RocketMQ 支持[SimpleConsumer](../04-featureBehavior/06consumertype.md)和[PushConsumer](../04-featureBehavior/06consumertype.md)两种消费者类型,您可以选择以下任意一种方式订阅消息。
```java
import org.apache.rocketmq.client.apis.*;
diff --git "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/01main.md" b/versioned_docs/version-5.0/03-domainModel/01main.md
similarity index 92%
rename from "versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/01main.md"
rename to versioned_docs/version-5.0/03-domainModel/01main.md
index b2813ffc6..7c32e71ec 100644
--- "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/01main.md"
+++ b/versioned_docs/version-5.0/03-domainModel/01main.md
@@ -15,21 +15,21 @@ Apache RocketMQ 产品具备异步通信的优势,系统拓扑简单、上下
**消息生产**
-[生产者(Producer)](../03-领域模型/04producer.md):
+[生产者(Producer)](../03-domainModel/04producer.md):
Apache RocketMQ 中用于产生消息的运行实体,一般集成于业务调用链路的上游。生产者是轻量级匿名无身份的。
**消息存储**
-* [主题(Topic)](../03-领域模型/02topic.md):
+* [主题(Topic)](../03-domainModel/02topic.md):
Apache RocketMQ 消息传输和存储的分组容器,主题内部由多个队列组成,消息的存储和水平扩展实际是通过主题内的队列实现的。
-* [队列(MessageQueue)](../03-领域模型/03messagequeue.md):
+* [队列(MessageQueue)](../03-domainModel/03messagequeue.md):
Apache RocketMQ 消息传输和存储的实际单元容器,类比于其他消息队列中的分区。 Apache RocketMQ 通过流式特性的无限队列结构来存储消息,消息在队列内具备顺序性存储特征。
-* [消息(Message)](../03-领域模型/04message.md):
+* [消息(Message)](../03-domainModel/04message.md):
Apache RocketMQ 的最小传输单元。消息具备不可变性,在初始化发送和完成存储后即不可变。
@@ -38,15 +38,15 @@ Apache RocketMQ 中用于产生消息的运行实体,一般集成于业务调
**消息消费**
-* [消费者分组(ConsumerGroup)](../03-领域模型/07consumergroup.md):
+* [消费者分组(ConsumerGroup)](../03-domainModel/07consumergroup.md):
Apache RocketMQ 发布订阅模型中定义的独立的消费身份分组,用于统一管理底层运行的多个消费者(Consumer)。同一个消费组的多个消费者必须保持消费逻辑和配置一致,共同分担该消费组订阅的消息,实现消费能力的水平扩展。
-* [消费者(Consumer)](../03-领域模型/08consumer.md):
+* [消费者(Consumer)](../03-domainModel/08consumer.md):
Apache RocketMQ 消费消息的运行实体,一般集成在业务调用链路的下游。消费者必须被指定到某一个消费组中。
-* [订阅关系(Subscription)](../03-领域模型/09subscription.md):
+* [订阅关系(Subscription)](../03-domainModel/09subscription.md):
Apache RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。
diff --git "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/02topic.md" b/versioned_docs/version-5.0/03-domainModel/02topic.md
similarity index 86%
rename from "versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/02topic.md"
rename to versioned_docs/version-5.0/03-domainModel/02topic.md
index 54fe601ff..f832f8c76 100644
--- "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/02topic.md"
+++ b/versioned_docs/version-5.0/03-domainModel/02topic.md
@@ -30,14 +30,14 @@
* 取值:由用户创建主题时定义。
-* 约束:请参见[参数限制](../01-基础介绍/03limits.md)。
+* 约束:请参见[参数限制](../01-introduction/03limits.md)。
**队列列表**
-* 定义:队列作为主题的组成单元,是消息存储的实际容器,一个主题内包含一个或多个队列,消息实际存储在主题的各队列内。更多信息,请参见[队列(MessageQueue)](../03-领域模型/03messagequeue.md)。
+* 定义:队列作为主题的组成单元,是消息存储的实际容器,一个主题内包含一个或多个队列,消息实际存储在主题的各队列内。更多信息,请参见[队列(MessageQueue)](../03-domainModel/03messagequeue.md)。
* 取值:系统根据队列数量给主题分配队列,队列数量创建主题时定义。
@@ -51,13 +51,13 @@
* 定义:主题所支持的消息类型。
* 取值:创建主题时选择消息类型。Apache RocketMQ 支持的主题类型如下:
- * Normal:[普通消息](../04-功能行为/01normalmessage.md),消息本身无特殊语义,消息之间也没有任何关联。
+ * Normal:[普通消息](../04-featureBehavior/01normalmessage.md),消息本身无特殊语义,消息之间也没有任何关联。
- * FIFO:[顺序消息](../04-功能行为/03fifomessage.md),Apache RocketMQ 通过消息分组MessageGroup标记一组特定消息的先后顺序,可以保证消息的投递顺序严格按照消息发送时的顺序。
+ * FIFO:[顺序消息](../04-featureBehavior/03fifomessage.md),Apache RocketMQ 通过消息分组MessageGroup标记一组特定消息的先后顺序,可以保证消息的投递顺序严格按照消息发送时的顺序。
- * Delay:[定时/延时消息](../04-功能行为/02delaymessage.md),通过指定延时时间控制消息生产后不要立即投递,而是在延时间隔后才对消费者可见。
+ * Delay:[定时/延时消息](../04-featureBehavior/02delaymessage.md),通过指定延时时间控制消息生产后不要立即投递,而是在延时间隔后才对消费者可见。
- * Transaction:[事务消息](../04-功能行为/04transactionmessage.md),Apache RocketMQ 支持分布式事务消息,支持应用数据库更新和消息调用的事务一致性保障。
+ * Transaction:[事务消息](../04-featureBehavior/04transactionmessage.md),Apache RocketMQ 支持分布式事务消息,支持应用数据库更新和消息调用的事务一致性保障。
* 约束:每个主题只支持一种消息类型。
diff --git "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/03messagequeue.md" b/versioned_docs/version-5.0/03-domainModel/03messagequeue.md
similarity index 100%
rename from "versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/03messagequeue.md"
rename to versioned_docs/version-5.0/03-domainModel/03messagequeue.md
diff --git "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04message.md" b/versioned_docs/version-5.0/03-domainModel/04message.md
similarity index 84%
rename from "versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04message.md"
rename to versioned_docs/version-5.0/03-domainModel/04message.md
index 6cbe1f756..6ea68d998 100644
--- "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04message.md"
+++ b/versioned_docs/version-5.0/03-domainModel/04message.md
@@ -54,13 +54,13 @@ Apache RocketMQ 的消息模型具备如下特点:
* 定义:当前消息的类型。
* 取值:从客户端SDK接口获取。Apache RocketMQ 支持的消息类型如下:
- * Normal:[普通消息](../04-功能行为/01normalmessage.md),消息本身无特殊语义,消息之间也没有任何关联。
+ * Normal:[普通消息](../04-featureBehavior/01normalmessage.md),消息本身无特殊语义,消息之间也没有任何关联。
- * FIFO:[顺序消息](../04-功能行为/03fifomessage.md),Apache RocketMQ 通过消息分组MessageGroup标记一组特定消息的先后顺序,可以保证消息的投递顺序严格按照消息发送时的顺序。
+ * FIFO:[顺序消息](../04-featureBehavior/03fifomessage.md),Apache RocketMQ 通过消息分组MessageGroup标记一组特定消息的先后顺序,可以保证消息的投递顺序严格按照消息发送时的顺序。
- * Delay:[定时/延时消息](../04-功能行为/02delaymessage.md),通过指定延时时间控制消息生产后不要立即投递,而是在延时间隔后才对消费者可见。
+ * Delay:[定时/延时消息](../04-featureBehavior/02delaymessage.md),通过指定延时时间控制消息生产后不要立即投递,而是在延时间隔后才对消费者可见。
- * Transaction:[事务消息](../04-功能行为/04transactionmessage.md),Apache RocketMQ 支持分布式事务消息,支持应用数据库更新和消息调用的事务一致性保障。
+ * Transaction:[事务消息](../04-featureBehavior/04transactionmessage.md),Apache RocketMQ 支持分布式事务消息,支持应用数据库更新和消息调用的事务一致性保障。
@@ -79,7 +79,7 @@ Apache RocketMQ 的消息模型具备如下特点:
**消息位点**
-* 定义:当前消息存储在队列中的位置。更多信息,请参见[消费进度原理](../04-功能行为/09consumerprogress.md)。
+* 定义:当前消息存储在队列中的位置。更多信息,请参见[消费进度原理](../04-featureBehavior/09consumerprogress.md)。
* 取值:由服务端指定并填充。取值范围:0\~long.Max。
@@ -117,7 +117,7 @@ Apache RocketMQ 的消息模型具备如下特点:
**定时时间(可选)**
-* 定义:定时场景下,消息触发延时投递的毫秒级时间戳。更多信息,请参见[定时/延时消息](../04-功能行为/02delaymessage.md)。
+* 定义:定时场景下,消息触发延时投递的毫秒级时间戳。更多信息,请参见[定时/延时消息](../04-featureBehavior/02delaymessage.md)。
* 取值:由消息生产者定义。
@@ -151,7 +151,7 @@ Apache RocketMQ 的消息模型具备如下特点:
**消费重试次数**
-* 定义:消息消费失败后,Apache RocketMQ 服务端重新投递的次数。每次重试后,重试次数加1。更多信息,请参见[消费重试](../04-功能行为/10consumerretrypolicy.md)。
+* 定义:消息消费失败后,Apache RocketMQ 服务端重新投递的次数。每次重试后,重试次数加1。更多信息,请参见[消费重试](../04-featureBehavior/10consumerretrypolicy.md)。
* 取值:由服务端系统标记。首次消费,重试次数为0;消费失败首次重试时,重试次数为1。
@@ -174,7 +174,7 @@ Apache RocketMQ 的消息模型具备如下特点:
* 取值:由生产者负责序列化编码,按照二进制字节传输。
-* 约束:请参见[参数限制](../01-基础介绍/03limits.md)。
+* 约束:请参见[参数限制](../01-introduction/03limits.md)。
diff --git "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04producer.md" b/versioned_docs/version-5.0/03-domainModel/04producer.md
similarity index 95%
rename from "versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04producer.md"
rename to versioned_docs/version-5.0/03-domainModel/04producer.md
index af3fb4096..67d3bfc08 100644
--- "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/04producer.md"
+++ b/versioned_docs/version-5.0/03-domainModel/04producer.md
@@ -14,7 +14,7 @@
* 批量发送:生产者可通过API接口设置消息批量传输的方式。例如,批量发送的消息条数或消息大小。
-* 事务行为:Apache RocketMQ 支持事务消息,对于事务消息需要生产者配合进行事务检查等行为保障事务的最终一致性。具体信息,请参见[事务消息](../04-功能行为/04transactionmessage.md)。
+* 事务行为:Apache RocketMQ 支持事务消息,对于事务消息需要生产者配合进行事务检查等行为保障事务的最终一致性。具体信息,请参见[事务消息](../04-featureBehavior/04transactionmessage.md)。
@@ -53,7 +53,7 @@
* 身份认证信息 **(可选)** :客户端用于身份验证的凭证信息。 仅在服务端开启身份识别和认证时需要传输。
-* 请求超时时间 **(可选)** :客户端网络请求调用的超时时间。取值范围和默认值,请参见[参数限制](../01-基础介绍/03limits.md)。
+* 请求超时时间 **(可选)** :客户端网络请求调用的超时时间。取值范围和默认值,请参见[参数限制](../01-introduction/03limits.md)。
@@ -74,7 +74,7 @@
**事务检查器**
-* 定义:Apache RocketMQ 的事务消息机制中,为保证异常场景下事务的最终一致性,生产者需要主动实现事务检查器的接口。具体信息,请参见[事务消息](../04-功能行为/04transactionmessage.md)。
+* 定义:Apache RocketMQ 的事务消息机制中,为保证异常场景下事务的最终一致性,生产者需要主动实现事务检查器的接口。具体信息,请参见[事务消息](../04-featureBehavior/04transactionmessage.md)。
* 发送事务消息时,事务检查器必须设置,且需要和预绑定主题列表一起配合使用。
@@ -83,7 +83,7 @@
**发送重试策略**:
-* 定义: 生产者在消息发送失败时的重试策略。具体信息,请参见[消息发送重试机制](../04-功能行为/05sendretrypolicy.md)。
+* 定义: 生产者在消息发送失败时的重试策略。具体信息,请参见[消息发送重试机制](../04-featureBehavior/05sendretrypolicy.md)。
## 版本兼容性
diff --git "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/07consumergroup.md" b/versioned_docs/version-5.0/03-domainModel/07consumergroup.md
similarity index 93%
rename from "versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/07consumergroup.md"
rename to versioned_docs/version-5.0/03-domainModel/07consumergroup.md
index 9e3e79bbe..1888b3ba6 100644
--- "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/07consumergroup.md"
+++ b/versioned_docs/version-5.0/03-domainModel/07consumergroup.md
@@ -13,9 +13,9 @@
* 订阅关系:Apache RocketMQ 以消费者分组的粒度管理订阅关系,实现订阅关系的管理和追溯。具体信息,请参见[订阅关系(Subscription)](./09subscription.md)。
-* 投递顺序性:Apache RocketMQ 的服务端将消息投递给消费者消费时,支持顺序投递和并发投递,投递方式在消费者分组中统一配置。具体信息,请参见[顺序消息](../04-功能行为/03fifomessage.md)。
+* 投递顺序性:Apache RocketMQ 的服务端将消息投递给消费者消费时,支持顺序投递和并发投递,投递方式在消费者分组中统一配置。具体信息,请参见[顺序消息](../04-featureBehavior/03fifomessage.md)。
-* 消费重试策略: 消费者消费消息失败时的重试策略,包括重试次数、死信队列设置等。具体信息,请参见[消费重试](../04-功能行为/10consumerretrypolicy.md)。
+* 消费重试策略: 消费者消费消息失败时的重试策略,包括重试次数、死信队列设置等。具体信息,请参见[消费重试](../04-featureBehavior/10consumerretrypolicy.md)。
@@ -41,7 +41,7 @@
* 定义:消费者分组的名称,用于区分不同的消费者分组。集群内全局唯一。
-* 取值:消费者分组由用户设置并创建。具体命名规范,请参见[参数限制](../01-基础介绍/03limits.md)。
+* 取值:消费者分组由用户设置并创建。具体命名规范,请参见[参数限制](../01-introduction/03limits.md)。
@@ -50,7 +50,7 @@
* 定义:消费者消费消息时,Apache RocketMQ 向消费者客户端投递消息的顺序。
- 根据不同的消费场景,Apache RocketMQ 提供顺序投递和并发投递两种方式。具体信息,请参见[顺序消息](../04-功能行为/03fifomessage.md)。
+ 根据不同的消费场景,Apache RocketMQ 提供顺序投递和并发投递两种方式。具体信息,请参见[顺序消息](../04-featureBehavior/03fifomessage.md)。
* 取值:默认投递方式为并发投递。
@@ -59,13 +59,13 @@
**消费重试策略**
-* 定义:消费者消费消息失败时,系统的重试策略。消费者消费消息失败时,系统会按照重试策略,将指定消息投递给消费者重新消费。具体信息,请参见[消费重试](../04-功能行为/10consumerretrypolicy.md)。
+* 定义:消费者消费消息失败时,系统的重试策略。消费者消费消息失败时,系统会按照重试策略,将指定消息投递给消费者重新消费。具体信息,请参见[消费重试](../04-featureBehavior/10consumerretrypolicy.md)。
* 取值:重试策略包括:
* 最大重试次数:表示消息可以重新被投递的最大次数,超过最大重试次数还没被成功消费,消息将被投递至死信队列或丢弃。
- * 重试间隔:Apache RocketMQ 服务端重新投递消息的间隔时间。 最大重试次数和重试间隔的取值范围及默认值,请参见[参数限制](../01-基础介绍/03limits.md)。
+ * 重试间隔:Apache RocketMQ 服务端重新投递消息的间隔时间。 最大重试次数和重试间隔的取值范围及默认值,请参见[参数限制](../01-introduction/03limits.md)。
* 约束:重试间隔仅在PushConsumer消费类型下有效。
diff --git "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/08consumer.md" b/versioned_docs/version-5.0/03-domainModel/08consumer.md
similarity index 96%
rename from "versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/08consumer.md"
rename to versioned_docs/version-5.0/03-domainModel/08consumer.md
index db14f07fe..ba3f6060b 100644
--- "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/08consumer.md"
+++ b/versioned_docs/version-5.0/03-domainModel/08consumer.md
@@ -11,7 +11,7 @@
* 消费者身份:消费者必须关联一个指定的消费者分组,以获取分组内统一定义的行为配置和消费状态。
-* 消费者类型:Apache RocketMQ 面向不同的开发场景提供了多样的消费者类型,包括PushConsumer类型、SimpleConsumer类型、PullConsumer类型(仅推荐流处理场景使用)等。具体信息,请参见[消费者分类](../04-功能行为/06consumertype.md)。
+* 消费者类型:Apache RocketMQ 面向不同的开发场景提供了多样的消费者类型,包括PushConsumer类型、SimpleConsumer类型、PullConsumer类型(仅推荐流处理场景使用)等。具体信息,请参见[消费者分类](../04-featureBehavior/06consumertype.md)。
* 消费者本地运行配置:消费者根据不同的消费者类型,控制消费者客户端本地的运行配置。例如消费者客户端的线程数,消费并发度等,实现不同的传输效果。
@@ -38,7 +38,7 @@
* 定义:当前消费者关联的消费者分组名称,消费者必须关联到指定的消费者分组,通过消费者分组获取消费行为。更多信息,请参见[消费者分组(ConsumerGroup)](./07consumergroup.md)。
-* 取值:消费者分组为Apache RocketMQ 的逻辑资源,需要您提前通过控制台或OpenAPI创建。具体命名格式,请参见[使用限制](../01-基础介绍/03limits.md)。
+* 取值:消费者分组为Apache RocketMQ 的逻辑资源,需要您提前通过控制台或OpenAPI创建。具体命名格式,请参见[使用限制](../01-introduction/03limits.md)。
@@ -58,7 +58,7 @@
* 身份认证信息 **(可选)** :客户端用于身份验证的凭证信息。 仅在服务端开启身份识别和认证时需要传输。
-* 请求超时时间 **(可选)** :客户端网络请求调用的超时时间。取值范围和默认值,请参见[参数限制](../01-基础介绍/03limits.md)。
+* 请求超时时间 **(可选)** :客户端网络请求调用的超时时间。取值范围和默认值,请参见[参数限制](../01-introduction/03limits.md)。
@@ -79,7 +79,7 @@
* 取值:由消费者客户端本地配置。
-* 约束:使用PushConsumer类型的消费者消费消息时,消费者客户端必须设置消费监听器。消费者类型的具体信息,请参见[消费者分类](../04-功能行为/06consumertype.md)。
+* 约束:使用PushConsumer类型的消费者消费消息时,消费者客户端必须设置消费监听器。消费者类型的具体信息,请参见[消费者分类](../04-featureBehavior/06consumertype.md)。
diff --git "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/09subscription.md" b/versioned_docs/version-5.0/03-domainModel/09subscription.md
similarity index 96%
rename from "versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/09subscription.md"
rename to versioned_docs/version-5.0/03-domainModel/09subscription.md
index 035d8da60..e1337c2de 100644
--- "a/versioned_docs/version-5.0/03-\351\242\206\345\237\237\346\250\241\345\236\213/09subscription.md"
+++ b/versioned_docs/version-5.0/03-domainModel/09subscription.md
@@ -11,7 +11,7 @@
通过配置订阅关系,可控制如下传输行为:
-* 消息过滤规则:用于控制消费者在消费消息时,选择主题内的哪些消息进行消费,设置消费过滤规则可以高效地过滤消费者需要的消息集合,灵活根据不同的业务场景设置不同的消息接收范围。具体信息,请参见[消息过滤](../04-功能行为/07messagefilter.md)。
+* 消息过滤规则:用于控制消费者在消费消息时,选择主题内的哪些消息进行消费,设置消费过滤规则可以高效地过滤消费者需要的消息集合,灵活根据不同的业务场景设置不同的消息接收范围。具体信息,请参见[消息过滤](../04-featureBehavior/07messagefilter.md)。
* 消费状态:Apache RocketMQ 服务端默认提供订阅关系持久化的能力,即消费者分组在服务端注册订阅关系后,当消费者离线并再次上线后,可以获取离线前的消费进度并继续消费。
@@ -57,7 +57,7 @@ Apache RocketMQ 的订阅关系按照消费者分组和主题粒度设计,因
* 定义:自定义的过滤规则表达式。
-* 取值:具体取值规范,请参见[过滤表达式语法规范](../04-功能行为/07messagefilter.md)。
+* 取值:具体取值规范,请参见[过滤表达式语法规范](../04-featureBehavior/07messagefilter.md)。
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/01normalmessage.md" b/versioned_docs/version-5.0/04-featureBehavior/01normalmessage.md
similarity index 100%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/01normalmessage.md"
rename to versioned_docs/version-5.0/04-featureBehavior/01normalmessage.md
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/02delaymessage.md" b/versioned_docs/version-5.0/04-featureBehavior/02delaymessage.md
similarity index 99%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/02delaymessage.md"
rename to versioned_docs/version-5.0/04-featureBehavior/02delaymessage.md
index f4bac7520..865375fda 100644
--- "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/02delaymessage.md"
+++ b/versioned_docs/version-5.0/04-featureBehavior/02delaymessage.md
@@ -41,7 +41,7 @@
* 定时时间必须设置在定时时长范围内,超过范围则定时不生效,服务端会立即投递消息。
-* 定时时长最大值默认为24小时,不支持自定义修改,更多信息,请参见[参数限制](../01-基础介绍/03limits.md)。
+* 定时时长最大值默认为24小时,不支持自定义修改,更多信息,请参见[参数限制](../01-introduction/03limits.md)。
* 定时时间必须设置为当前时间之后,若设置到当前时间之前,则定时不生效,服务端会立即投递消息。
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/03fifomessage.md" b/versioned_docs/version-5.0/04-featureBehavior/03fifomessage.md
similarity index 100%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/03fifomessage.md"
rename to versioned_docs/version-5.0/04-featureBehavior/03fifomessage.md
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/04transactionmessage.md" b/versioned_docs/version-5.0/04-featureBehavior/04transactionmessage.md
similarity index 99%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/04transactionmessage.md"
rename to versioned_docs/version-5.0/04-featureBehavior/04transactionmessage.md
index c84be92b4..283834376 100644
--- "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/04transactionmessage.md"
+++ b/versioned_docs/version-5.0/04-featureBehavior/04transactionmessage.md
@@ -67,7 +67,7 @@ Apache RocketMQ事务消息的方案,具备高性能、可扩展、业务开
* 二次确认结果为Rollback:服务端将回滚事务,不会将半事务消息投递给消费者。
5. 在断网或者是生产者应用重启的特殊情况下,若服务端未收到发送者提交的二次确认结果,或服务端收到的二次确认结果为Unknown未知状态,经过固定时间后,服务端将对消息生产者即生产者集群中任一生产者实例发起消息回查。
- **说明** 服务端回查的间隔时间和最大回查次数,请参见[参数限制](../01-基础介绍/03limits.md)。
+ **说明** 服务端回查的间隔时间和最大回查次数,请参见[参数限制](../01-introduction/03limits.md)。
6. 生产者收到消息回查后,需要检查对应消息的本地事务执行的最终结果。
@@ -108,7 +108,7 @@ Apache RocketMQ 事务消息为最终一致性,即在消息提交到下游消
**事务超时机制**
-Apache RocketMQ 事务消息的命周期存在超时机制,即半事务消息被生产者发送服务端后,如果在指定时间内服务端无法确认提交或者回滚状态,则消息默认会被回滚。事务超时时间,请参见[参数限制](../01-基础介绍/03limits.md)。
+Apache RocketMQ 事务消息的命周期存在超时机制,即半事务消息被生产者发送服务端后,如果在指定时间内服务端无法确认提交或者回滚状态,则消息默认会被回滚。事务超时时间,请参见[参数限制](../01-introduction/03limits.md)。
## 使用示例
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/05sendretrypolicy.md" b/versioned_docs/version-5.0/04-featureBehavior/05sendretrypolicy.md
similarity index 100%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/05sendretrypolicy.md"
rename to versioned_docs/version-5.0/04-featureBehavior/05sendretrypolicy.md
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/06consumertype.md" b/versioned_docs/version-5.0/04-featureBehavior/06consumertype.md
similarity index 100%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/06consumertype.md"
rename to versioned_docs/version-5.0/04-featureBehavior/06consumertype.md
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/07messagefilter.md" b/versioned_docs/version-5.0/04-featureBehavior/07messagefilter.md
similarity index 99%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/07messagefilter.md"
rename to versioned_docs/version-5.0/04-featureBehavior/07messagefilter.md
index 520ba08be..68af044c1 100644
--- "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/07messagefilter.md"
+++ b/versioned_docs/version-5.0/04-featureBehavior/07messagefilter.md
@@ -45,7 +45,7 @@ Apache RocketMQ 支持Tag标签过滤和SQL属性过滤,这两种过滤方式
## 订阅关系一致性
-过滤表达式属于订阅关系的一部分,Apache RocketMQ 的领域模型规定,同一消费者分组内的多个消费者的订阅关系包括过滤表达式,必须保持一致,否则可能会导致部分消息消费不到。更多信息,请参见[订阅关系(Subscription)](../03-领域模型/09subscription.md)。
+过滤表达式属于订阅关系的一部分,Apache RocketMQ 的领域模型规定,同一消费者分组内的多个消费者的订阅关系包括过滤表达式,必须保持一致,否则可能会导致部分消息消费不到。更多信息,请参见[订阅关系(Subscription)](../03-domainModel/09subscription.md)。
## Tag标签过滤
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/08consumerloadbalance.md" b/versioned_docs/version-5.0/04-featureBehavior/08consumerloadbalance.md
similarity index 100%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/08consumerloadbalance.md"
rename to versioned_docs/version-5.0/04-featureBehavior/08consumerloadbalance.md
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/09consumerprogress.md" b/versioned_docs/version-5.0/04-featureBehavior/09consumerprogress.md
similarity index 95%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/09consumerprogress.md"
rename to versioned_docs/version-5.0/04-featureBehavior/09consumerprogress.md
index 0477a526c..80dfb99d6 100644
--- "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/09consumerprogress.md"
+++ b/versioned_docs/version-5.0/04-featureBehavior/09consumerprogress.md
@@ -21,7 +21,7 @@ Apache RocketMQ 的生产者和消费者在进行消息收发时,必然会涉
**消息位点(Offset)**
-参考 Apache RocketMQ [主题](../03-领域模型/02topic.md)和[队列](../03-领域模型/03messagequeue.md)的定义,消息是按到达服务端的先后顺序存储在指定主题的多个队列中,每条消息在队列中都有一个唯一的Long类型坐标,这个坐标被定义为消息位点。
+参考 Apache RocketMQ [主题](../03-domainModel/02topic.md)和[队列](../03-domainModel/03messagequeue.md)的定义,消息是按到达服务端的先后顺序存储在指定主题的多个队列中,每条消息在队列中都有一个唯一的Long类型坐标,这个坐标被定义为消息位点。
任意一个消息队列在逻辑上都是无限存储,即消息位点会从0到Long.MAX无限增加。通过主题、队列和位点就可以定位任意一条消息的位置,具体关系如下图所示:
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/10consumerretrypolicy.md" b/versioned_docs/version-5.0/04-featureBehavior/10consumerretrypolicy.md
similarity index 98%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/10consumerretrypolicy.md"
rename to versioned_docs/version-5.0/04-featureBehavior/10consumerretrypolicy.md
index 43d51f1c5..380f798a4 100644
--- "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/10consumerretrypolicy.md"
+++ b/versioned_docs/version-5.0/04-featureBehavior/10consumerretrypolicy.md
@@ -87,7 +87,7 @@ PushConsumer消费消息时,消息的几个主要状态如下:。
+PushConsumer的最大重试次数由消费者分组创建时的元数据控制,具体参数,请参见[消费者分组](../03-domainModel/07consumergroup.md)。
例如,最大重试次数为3次,则该消息最多可被投递4次,1次为原始消息,3次为重试投递次数。
@@ -110,7 +110,7 @@ PushConsumer的最大重试次数由消费者分组创建时的元数据控制
若重试次数超过16次,后面每次重试间隔都为2小时。
:::
-* 顺序消息:重试间隔为固定时间,具体取值,请参见[参数限制](../01-基础介绍/03limits.md)。
+* 顺序消息:重试间隔为固定时间,具体取值,请参见[参数限制](../01-introduction/03limits.md)。
**使用示例**
@@ -163,7 +163,7 @@ SimpleConsumer消费消息时,消息的几个主要状态如下:。
+SimpleConsumer的最大重试次数由消费者分组创建时的元数据控制,具体参数,请参见[消费者分组](../03-domainModel/07consumergroup.md)。
**消息重试间隔**
diff --git "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/11messagestorepolicy.md" b/versioned_docs/version-5.0/04-featureBehavior/11messagestorepolicy.md
similarity index 95%
rename from "versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/11messagestorepolicy.md"
rename to versioned_docs/version-5.0/04-featureBehavior/11messagestorepolicy.md
index ada82e8cb..9471918a4 100644
--- "a/versioned_docs/version-5.0/04-\345\212\237\350\203\275\350\241\214\344\270\272/11messagestorepolicy.md"
+++ b/versioned_docs/version-5.0/04-featureBehavior/11messagestorepolicy.md
@@ -4,7 +4,7 @@
## 背景信息
-参考 Apache RocketMQ 中[队列](../03-领域模型/03messagequeue.md)的定义,消息按照达到服务器的先后顺序被存储到队列中,理论上每个队列都支持无限存储。
+参考 Apache RocketMQ 中[队列](../03-domainModel/03messagequeue.md)的定义,消息按照达到服务器的先后顺序被存储到队列中,理论上每个队列都支持无限存储。
但是在实际部署场景中,服务端节点的物理存储空间有限,消息无法做到永久存储。因此,在实际使用中需要考虑以下问题,消息在服务端中的存储以什么维度为判定条件?消息存储以什么粒度进行管理?消息存储超过限制后如何处理?这些问题都是由消息存储和过期清理机制来定义的。
diff --git "a/versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/15deploy.md" b/versioned_docs/version-5.0/05-deploymentOperations/15deploy.md
similarity index 100%
rename from "versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/15deploy.md"
rename to versioned_docs/version-5.0/05-deploymentOperations/15deploy.md
diff --git "a/versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/16admintool.md" b/versioned_docs/version-5.0/05-deploymentOperations/16admintool.md
similarity index 100%
rename from "versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/16admintool.md"
rename to versioned_docs/version-5.0/05-deploymentOperations/16admintool.md
diff --git "a/versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/16autoswitchdeploy.md" b/versioned_docs/version-5.0/05-deploymentOperations/16autoswitchdeploy.md
similarity index 100%
rename from "versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/16autoswitchdeploy.md"
rename to versioned_docs/version-5.0/05-deploymentOperations/16autoswitchdeploy.md
diff --git "a/versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/17Dashboard.md" b/versioned_docs/version-5.0/05-deploymentOperations/17Dashboard.md
similarity index 100%
rename from "versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/17Dashboard.md"
rename to versioned_docs/version-5.0/05-deploymentOperations/17Dashboard.md
diff --git "a/versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/18Exporter.md" b/versioned_docs/version-5.0/05-deploymentOperations/18Exporter.md
similarity index 100%
rename from "versioned_docs/version-5.0/05-\351\203\250\347\275\262\350\277\220\347\273\264/18Exporter.md"
rename to versioned_docs/version-5.0/05-deploymentOperations/18Exporter.md
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md" b/versioned_docs/version-5.0/06-bestPractice/15bestpractice.md
similarity index 98%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md"
rename to versioned_docs/version-5.0/06-bestPractice/15bestpractice.md
index 9fe8a3ca4..8c2b75400 100644
--- "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/15bestpractice.md"
+++ b/versioned_docs/version-5.0/06-bestPractice/15bestpractice.md
@@ -1,104 +1,104 @@
-# 基本最佳实践
-
-## 生产者
-
-### 发送消息注意事项
-
-#### Tag的使用
-
-一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤,5.x SDK 可以调用messageBuilder.setTag("messageTag"),历史版本可以调用 message.setTags("messageTag")。
-
-#### Keys的使用
-
-每个消息在业务层面一般建议映射到业务的唯一标识并设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。常见的设置策略使用订单Id、用户Id、请求Id等比较离散的唯一标识来处理。
-
-#### 日志的打印
-
-消息发送成功或者失败要打印消息日志,用于业务排查问题。Send消息方法只要不抛异常,就代表发送成功。
-### 消息发送失败处理方式
-
-Producer的send方法本身支持内部重试,5.x SDK的重试逻辑参考[发送重试策略](../04-功能行为/05sendretrypolicy.md):
-
-以上策略也是在一定程度上保证了消息可以发送成功。如果业务要求消息发送不能丢,仍然需要对可能出现的异常做兜底,比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
-
-上述DB重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
-
-## 消费者
-
-### 消费过程幂等
-
-RocketMQ 无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
-
-msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
-
-### 消费速度慢的处理方式
-
-### 提高消费并行度
-
-绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
-
-- 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度。可以通过加机器,或者在已有机器启动多个进程的方式。
-- 提高单个 Consumer 的消费并行线程,5.x PushConsumer SDK 可以通过PushConsumerBuilder.setConsumptionThreadCount() 设置线程数,SimpleConsumer可以由业务线程自由增加并发,底层线程安全;历史版本SDK PushConsumer可以通过修改参数 consumeThreadMin、consumeThreadMax实现。
-
-### 批量方式消费
-
-某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量。建议使用5.x SDK的SimpleConsumer,每次接口调用设置批次大小,一次性拉取消费多条消息。
-
-### 重置位点跳过非重要消息
-
-发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。建议使用重置位点功能直接调整消费位点到指定时刻或者指定位置。
-
-#### 优化每条消息消费过程
-
-举例如下,某条消息的消费过程如下:
-
-- 根据消息从 DB 查询【数据 1】
-- 根据消息从 DB 查询【数据 2】
-- 复杂的业务计算
-- 向 DB 插入【数据 3】
-- 向 DB 插入【数据 4】
-
-这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。
-
-### 消费打印日志
-
-如果消息量较少,建议在消费入口方法打印消息,消费耗时等,方便后续排查问题。
-
-```java
- new MessageListener() {
- @Override
- public ConsumeResult consume(MessageView messageView) {
- LOGGER.info("Consume message={}", messageView);
- //Do your consume process
- return ConsumeResult.SUCCESS;
- }
- }
-```
-
-如果能打印每条消息消费耗时,那么在排查消费慢等线上问题时,会更方便。但如果线上环境TPS很高,不建议开启,避免日志太多影响性能。
-
-## Broker
-
-### Broker 角色
- Broker 角色分为 ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。如果对消息的可靠性要求比较严格,可以采用 SYNC_MASTER加SLAVE的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加SLAVE的部署方式。如果只是测试方便,则可以选择仅ASYNC_MASTER或仅SYNC_MASTER的部署方式。
-### FlushDiskType
- SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。
-### Broker 配置
-
-| 参数名 | 默认值 | 说明 |
-| -------------------------------- | ----------------------------- | ------------------------------------------------------------ |
-| listenPort | 10911 | 接受客户端连接的监听端口 |
-| namesrvAddr | null | nameServer 地址 |
-| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
-| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
-| brokerName | null | broker 的名称 |
-| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
-| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
-| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
-| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
-| mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
-| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
-| fileReserverdTime | 72 | 以小时计算的文件保留时间 |
-| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
-| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
-
+# 基本最佳实践
+
+## 生产者
+
+### 发送消息注意事项
+
+#### Tag的使用
+
+一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤,5.x SDK 可以调用messageBuilder.setTag("messageTag"),历史版本可以调用 message.setTags("messageTag")。
+
+#### Keys的使用
+
+每个消息在业务层面一般建议映射到业务的唯一标识并设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。常见的设置策略使用订单Id、用户Id、请求Id等比较离散的唯一标识来处理。
+
+#### 日志的打印
+
+消息发送成功或者失败要打印消息日志,用于业务排查问题。Send消息方法只要不抛异常,就代表发送成功。
+### 消息发送失败处理方式
+
+Producer的send方法本身支持内部重试,5.x SDK的重试逻辑参考[发送重试策略](../04-featureBehavior/05sendretrypolicy.md):
+
+以上策略也是在一定程度上保证了消息可以发送成功。如果业务要求消息发送不能丢,仍然需要对可能出现的异常做兜底,比如调用send同步方法发送失败时,则尝试将消息存储到db,然后由后台线程定时重试,确保消息一定到达Broker。
+
+上述DB重试方式为什么没有集成到MQ客户端内部做,而是要求应用自己去完成,主要基于以下几点考虑:首先,MQ的客户端设计为无状态模式,方便任意的水平扩展,且对机器资源的消耗仅仅是cpu、内存、网络。其次,如果MQ客户端内部集成一个KV存储模块,那么数据只有同步落盘才能较可靠,而同步落盘本身性能开销较大,所以通常会采用异步落盘,又由于应用关闭过程不受MQ运维人员控制,可能经常会发生 kill -9 这样暴力方式关闭,造成数据没有及时落盘而丢失。第三,Producer所在机器的可靠性较低,一般为虚拟机,不适合存储重要数据。综上,建议重试过程交由应用来控制。
+
+## 消费者
+
+### 消费过程幂等
+
+RocketMQ 无法避免消息重复(Exactly-Once),所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。(实际过程要考虑原子性问题,判断是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
+
+msgId一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同msgId的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
+
+### 消费速度慢的处理方式
+
+### 提高消费并行度
+
+绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:
+
+- 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度。可以通过加机器,或者在已有机器启动多个进程的方式。
+- 提高单个 Consumer 的消费并行线程,5.x PushConsumer SDK 可以通过PushConsumerBuilder.setConsumptionThreadCount() 设置线程数,SimpleConsumer可以由业务线程自由增加并发,底层线程安全;历史版本SDK PushConsumer可以通过修改参数 consumeThreadMin、consumeThreadMax实现。
+
+### 批量方式消费
+
+某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量。建议使用5.x SDK的SimpleConsumer,每次接口调用设置批次大小,一次性拉取消费多条消息。
+
+### 重置位点跳过非重要消息
+
+发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。建议使用重置位点功能直接调整消费位点到指定时刻或者指定位置。
+
+#### 优化每条消息消费过程
+
+举例如下,某条消息的消费过程如下:
+
+- 根据消息从 DB 查询【数据 1】
+- 根据消息从 DB 查询【数据 2】
+- 复杂的业务计算
+- 向 DB 插入【数据 3】
+- 向 DB 插入【数据 4】
+
+这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。
+
+### 消费打印日志
+
+如果消息量较少,建议在消费入口方法打印消息,消费耗时等,方便后续排查问题。
+
+```java
+ new MessageListener() {
+ @Override
+ public ConsumeResult consume(MessageView messageView) {
+ LOGGER.info("Consume message={}", messageView);
+ //Do your consume process
+ return ConsumeResult.SUCCESS;
+ }
+ }
+```
+
+如果能打印每条消息消费耗时,那么在排查消费慢等线上问题时,会更方便。但如果线上环境TPS很高,不建议开启,避免日志太多影响性能。
+
+## Broker
+
+### Broker 角色
+ Broker 角色分为 ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。如果对消息的可靠性要求比较严格,可以采用 SYNC_MASTER加SLAVE的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加SLAVE的部署方式。如果只是测试方便,则可以选择仅ASYNC_MASTER或仅SYNC_MASTER的部署方式。
+### FlushDiskType
+ SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。
+### Broker 配置
+
+| 参数名 | 默认值 | 说明 |
+| -------------------------------- | ----------------------------- | ------------------------------------------------------------ |
+| listenPort | 10911 | 接受客户端连接的监听端口 |
+| namesrvAddr | null | nameServer 地址 |
+| brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
+| brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
+| brokerName | null | broker 的名称 |
+| brokerClusterName | DefaultCluster | 本 broker 所属的 Cluser 名称 |
+| brokerId | 0 | broker id, 0 表示 master, 其他的正整数表示 slave |
+| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
+| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
+| mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
+| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
+| fileReserverdTime | 72 | 以小时计算的文件保留时间 |
+| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
+| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
+
diff --git "a/versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/16dledger.md" b/versioned_docs/version-5.0/06-bestPractice/16dledger.md
similarity index 100%
rename from "versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/16dledger.md"
rename to versioned_docs/version-5.0/06-bestPractice/16dledger.md
diff --git "a/versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/18access.md" b/versioned_docs/version-5.0/06-bestPractice/18access.md
similarity index 100%
rename from "versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/18access.md"
rename to versioned_docs/version-5.0/06-bestPractice/18access.md
diff --git "a/versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/19JVMOS.md" b/versioned_docs/version-5.0/06-bestPractice/19JVMOS.md
similarity index 100%
rename from "versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/19JVMOS.md"
rename to versioned_docs/version-5.0/06-bestPractice/19JVMOS.md
diff --git "a/versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md" b/versioned_docs/version-5.0/06-bestPractice/21subscribe.md
similarity index 98%
rename from "versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md"
rename to versioned_docs/version-5.0/06-bestPractice/21subscribe.md
index b34c071e1..8c237124c 100644
--- "a/versioned_docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/21subscribe.md"
+++ b/versioned_docs/version-5.0/06-bestPractice/21subscribe.md
@@ -2,7 +2,7 @@
## 前言
-订阅关系是 RocketMQ 领域模型中非常重要的环节,用于表达消费者消费消息的控制元数据,完整的概念请参考[订阅关系模型](../03-领域模型/09subscription.md)。
+订阅关系是 RocketMQ 领域模型中非常重要的环节,用于表达消费者消费消息的控制元数据,完整的概念请参考[订阅关系模型](../03-domainModel/09subscription.md)。
订阅关系一致是指,同一个消费者组下所有消费者实例所订阅的Topic、Tag必须完全一致。如果订阅关系(消费者分组名-Topic-Tag)不一致,会导致消费消息紊乱,甚至消息丢失。
diff --git "a/i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/22FAQ.md" b/versioned_docs/version-5.0/06-bestPractice/22FAQ.md
similarity index 100%
rename from "i18n/en/docusaurus-plugin-content-docs/version-5.0/06-\346\234\200\344\275\263\345\256\236\350\267\265/22FAQ.md"
rename to versioned_docs/version-5.0/06-bestPractice/22FAQ.md
diff --git "a/versioned_docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/30RocketMQ Streams Overview.md" b/versioned_docs/version-5.0/07-streams/30RocketMQ Streams Overview.md
similarity index 100%
rename from "versioned_docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/30RocketMQ Streams Overview.md"
rename to versioned_docs/version-5.0/07-streams/30RocketMQ Streams Overview.md
diff --git "a/versioned_docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/31RocketMQ Streams Concept.md" b/versioned_docs/version-5.0/07-streams/31RocketMQ Streams Concept.md
similarity index 100%
rename from "versioned_docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/31RocketMQ Streams Concept.md"
rename to versioned_docs/version-5.0/07-streams/31RocketMQ Streams Concept.md
diff --git "a/versioned_docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/32RocketMQ Streams Quick Start.md" b/versioned_docs/version-5.0/07-streams/32RocketMQ Streams Quick Start.md
similarity index 100%
rename from "versioned_docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/32RocketMQ Streams Quick Start.md"
rename to versioned_docs/version-5.0/07-streams/32RocketMQ Streams Quick Start.md
diff --git "a/versioned_docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/33RocketMQ Streams In Action.md" b/versioned_docs/version-5.0/07-streams/33RocketMQ Streams In Action.md
similarity index 100%
rename from "versioned_docs/version-5.0/08-\346\265\201\350\256\241\347\256\227/33RocketMQ Streams In Action.md"
rename to versioned_docs/version-5.0/07-streams/33RocketMQ Streams In Action.md
diff --git "a/versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md" b/versioned_docs/version-5.0/08-contributionGuide/29how-to-contribute.md
similarity index 88%
rename from "versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md"
rename to versioned_docs/version-5.0/08-contributionGuide/29how-to-contribute.md
index 5d8a88fa0..2947525c8 100644
--- "a/versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/29how-to-contribute.md"
+++ b/versioned_docs/version-5.0/08-contributionGuide/29how-to-contribute.md
@@ -33,7 +33,7 @@ Apache RocketMQ 社区提供完备的处理流程帮您解答问题。
* 根据您的需求评估投入成本和设计解决方案
* 便于社区围绕该提案展开建设性的讨论
-若您计划实现自己的提案以贡献社区,同样需要提供详细描述信息,并遵循 [code-guidelines](/docs/贡献指南/30code-guidelines) 中的编码规范
+若您计划实现自己的提案以贡献社区,同样需要提供详细描述信息,并遵循 [code-guidelines](/docs/contributionGuide/30code-guidelines) 中的编码规范
我们推荐先在社区达成共识再着手实现功能。通过讨论新特性的必要性及实现方案等问题,可以早发现超出项目范围的提案。
@@ -63,7 +63,7 @@ Apache RocketMQ 在其活跃社区的推动下持续发展着。每隔几周我
2. 测试预发布版本并评分 (+1 未发现问题, -1 测试出问题)
3. 若预发布版本未测试出问题则发布,否则回到步骤 1
-我们在网站上整理了 [release-manual](/docs/贡献指南/32release-manual) 版本发布指南。测试预发行版是项大工程,我们需要吸纳更多人的参与。 RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
+我们在网站上整理了 [release-manual](/docs/contributionGuide/32release-manual) 版本发布指南。测试预发行版是项大工程,我们需要吸纳更多人的参与。 RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发布版本, 您将确信新的 RocketMQ 版本仍将为您的程序提供正常服务,并确实在支持版本升级。
@@ -71,10 +71,10 @@ RocketMQ 社区鼓励每个人都参与新版本的测试。通过测试预发
## 贡献代码
-Apache RocketMQ 已然并将持续进行维护,优化,和扩展。因此 Apache RocketMQ 鼓励所有人贡献源代码。为给予代码贡献者和审查者极佳的代码贡献体验,并提供高质量的代码仓库,社区遵循 [code-guidelines](/docs/贡献指南/30code-guidelines) 中的贡献流程。编码手册包含构建开发环境指南,社区编码指南和编码风格,并介绍了如何提交贡献的代码。
+Apache RocketMQ 已然并将持续进行维护,优化,和扩展。因此 Apache RocketMQ 鼓励所有人贡献源代码。为给予代码贡献者和审查者极佳的代码贡献体验,并提供高质量的代码仓库,社区遵循 [code-guidelines](/docs/contributionGuide/30code-guidelines) 中的贡献流程。编码手册包含构建开发环境指南,社区编码指南和编码风格,并介绍了如何提交贡献的代码。
-**请务必在编码之前仔细阅读 [code-guidelines](/docs/贡献指南/30code-guidelines)
+**请务必在编码之前仔细阅读 [code-guidelines](/docs/contributionGuide/30code-guidelines)
并请阅读 [AFS Apache 软件基金会 贡献者协议](https://www.apache.org/licenses/contributor-agreements.html) 提交电子签名。
diff --git "a/versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/30code-guidelines.md" b/versioned_docs/version-5.0/08-contributionGuide/30code-guidelines.md
similarity index 100%
rename from "versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/30code-guidelines.md"
rename to versioned_docs/version-5.0/08-contributionGuide/30code-guidelines.md
diff --git "a/versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md" b/versioned_docs/version-5.0/08-contributionGuide/31pull-request.md
similarity index 98%
rename from "versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md"
rename to versioned_docs/version-5.0/08-contributionGuide/31pull-request.md
index 0683ebfff..2be7da0b9 100644
--- "a/versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/31pull-request.md"
+++ b/versioned_docs/version-5.0/08-contributionGuide/31pull-request.md
@@ -96,7 +96,7 @@ head repository / compare : 开发仓库及开发分支
提交 PR 前,请先做如下确认:
1. 已创建与 PR 对应的 [GitHub Issue]( [apache/rocketmq: Mirror of Apache RocketMQ (github.com)](https://github.com/apache/rocketmq/issues) )
-2. 修改内容符合 [Coding Guidelines](/docs/贡献指南/30code-guidelines) 编程规范
+2. 修改内容符合 [Coding Guidelines](/docs/contributionGuide/30code-guidelines) 编程规范
3. PR 摘要以 [ISSUE #XXX] 开始并简要描述变更需求
4. 概述 PR 变更需求,变更日志,验证信息,可参考 [PR Demo](https://github.com/apache/rocketmq/pull/152)
5. 提交内容具备完整的测试用例,并确保基本检查,单元测试,集成测试通过
diff --git "a/versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/32release-manual.md" b/versioned_docs/version-5.0/08-contributionGuide/32release-manual.md
similarity index 100%
rename from "versioned_docs/version-5.0/08-\350\264\241\347\214\256\346\214\207\345\215\227/32release-manual.md"
rename to versioned_docs/version-5.0/08-contributionGuide/32release-manual.md