From df4e98855d461d85e9c4ed43add1b12a58bca7b6 Mon Sep 17 00:00:00 2001 From: lushilin <897401919@qq.com> Date: Thu, 28 Oct 2021 08:51:26 +0800 Subject: [PATCH 1/3] fix(broker): can not clear topic unitSubFlag (#3429) Co-authored-by: lushilin --- .../apache/rocketmq/broker/topic/TopicConfigManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/broker/src/main/java/org/apache/rocketmq/broker/topic/TopicConfigManager.java b/broker/src/main/java/org/apache/rocketmq/broker/topic/TopicConfigManager.java index 1f2bb4d8ba4..e09080afaea 100644 --- a/broker/src/main/java/org/apache/rocketmq/broker/topic/TopicConfigManager.java +++ b/broker/src/main/java/org/apache/rocketmq/broker/topic/TopicConfigManager.java @@ -320,7 +320,7 @@ public void updateTopicUnitFlag(final String topic, final boolean unit) { topicConfig.setTopicSysFlag(TopicSysFlag.clearUnitFlag(oldTopicSysFlag)); } - log.info("update topic sys flag. oldTopicSysFlag={}, newTopicSysFlag", oldTopicSysFlag, + log.info("update topic sys flag. oldTopicSysFlag={}, newTopicSysFlag={}", oldTopicSysFlag, topicConfig.getTopicSysFlag()); this.topicConfigTable.put(topic, topicConfig); @@ -338,9 +338,11 @@ public void updateTopicUnitSubFlag(final String topic, final boolean hasUnitSub) int oldTopicSysFlag = topicConfig.getTopicSysFlag(); if (hasUnitSub) { topicConfig.setTopicSysFlag(TopicSysFlag.setUnitSubFlag(oldTopicSysFlag)); + } else { + topicConfig.setTopicSysFlag(TopicSysFlag.clearUnitSubFlag(oldTopicSysFlag)); } - log.info("update topic sys flag. oldTopicSysFlag={}, newTopicSysFlag", oldTopicSysFlag, + log.info("update topic sys flag. oldTopicSysFlag={}, newTopicSysFlag={}", oldTopicSysFlag, topicConfig.getTopicSysFlag()); this.topicConfigTable.put(topic, topicConfig); From a75c74234915f1673c635639e6a70e4c25dcd740 Mon Sep 17 00:00:00 2001 From: Smile <1494445739@qq.com> Date: Tue, 23 Nov 2021 11:11:21 +0800 Subject: [PATCH 2/3] doc-optimization (#3523) --- .../java/API_Reference_DefaultMQProducer.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/cn/client/java/API_Reference_DefaultMQProducer.md b/docs/cn/client/java/API_Reference_DefaultMQProducer.md index c45f7d4e50c..4a0b9d5f6c1 100644 --- a/docs/cn/client/java/API_Reference_DefaultMQProducer.md +++ b/docs/cn/client/java/API_Reference_DefaultMQProducer.md @@ -54,7 +54,7 @@ public class Producer { |int|retryTimesWhenSendAsyncFailed|异步模式下内部尝试发送消息的最大次数| |boolean|retryAnotherBrokerWhenNotStoreOK|是否在内部发送失败时重试另一个broker| |int|maxMessageSize|消息的最大长度| -|TraceDispatcher|traceDispatcher|消息追踪器。使用rcpHook来追踪消息| +|TraceDispatcher|traceDispatcher|基于RPCHooK实现的消息轨迹插件| ### 构造方法摘要 @@ -62,11 +62,11 @@ public class Producer { |-------|------------| |DefaultMQProducer()|由默认参数值创建一个生产者 | |DefaultMQProducer(final String producerGroup)|使用指定的分组名创建一个生产者| -|DefaultMQProducer(final String producerGroup, boolean enableMsgTrace)|使用指定的分组名创建一个生产者,并设置是否开启消息追踪| -|DefaultMQProducer(final String producerGroup, boolean enableMsgTrace, final String customizedTraceTopic)|使用指定的分组名创建一个生产者,并设置是否开启消息追踪及追踪topic的名称| +|DefaultMQProducer(final String producerGroup, boolean enableMsgTrace)|使用指定的分组名创建一个生产者,并设置是否开启消息轨迹| +|DefaultMQProducer(final String producerGroup, boolean enableMsgTrace, final String customizedTraceTopic)|使用指定的分组名创建一个生产者,并设置是否开启消息轨迹及追踪topic的名称| |DefaultMQProducer(RPCHook rpcHook)|使用指定的hook创建一个生产者| |DefaultMQProducer(final String producerGroup, RPCHook rpcHook)|使用指定的分组名及自定义hook创建一个生产者| -|DefaultMQProducer(final String producerGroup, RPCHook rpcHook, boolean enableMsgTrace,final String customizedTraceTopic)|使用指定的分组名及自定义hook创建一个生产者,并设置是否开启消息追踪及追踪topic的名称| +|DefaultMQProducer(final String producerGroup, RPCHook rpcHook, boolean enableMsgTrace,final String customizedTraceTopic)|使用指定的分组名及自定义hook创建一个生产者,并设置是否开启消息轨迹及追踪topic的名称| ### 使用方法摘要 @@ -204,7 +204,7 @@ public class Producer { `private TraceDispatcher traceDispatcher = null` - 在开启消息追踪后,该类通过hook的方式把消息生产者,消息存储的broker和消费者消费消息的信息像链路一样记录下来。在构造生产者时根据构造入参enableMsgTrace来决定是否创建该对象。 + 在开启消息轨迹后,该类通过hook的方式把消息生产者,消息存储的broker和消费者消费消息的信息像链路一样记录下来。在构造生产者时根据构造入参enableMsgTrace来决定是否创建该对象。 ### 构造方法详细信息 @@ -230,20 +230,20 @@ public class Producer { `DefaultMQProducer(final String producerGroup, boolean enableMsgTrace)` - 使用指定的分组名创建一个生产者,并设置是否开启消息追踪。 + 使用指定的分组名创建一个生产者,并设置是否开启消息轨迹。 - 入参描述: 参数名 | 类型 | 是否必须 | 缺省值 |描述 ---|---|---|---|--- producerGroup | String | 是 | DEFAULT_PRODUCER | 生产者的分组名称 - enableMsgTrace | boolean | 是 | false |是否开启消息追踪 + enableMsgTrace | boolean | 是 | false |是否开启消息轨迹 4. DefaultMQProducer `DefaultMQProducer(final String producerGroup, boolean enableMsgTrace, final String customizedTraceTopic)` - 使用指定的分组名创建一个生产者,并设置是否开启消息追踪及追踪topic的名称。 + 使用指定的分组名创建一个生产者,并设置是否开启消息轨迹及追踪topic的名称。 - 入参描述: @@ -251,8 +251,8 @@ public class Producer { ---|---|---|---|--- producerGroup | String | 是 | DEFAULT_PRODUCER | 生产者的分组名称 rpcHook | RPCHook | 否 | null |每个远程命令执行后会回调rpcHook - enableMsgTrace | boolean | 是 | false |是否开启消息追踪 - customizedTraceTopic | String | 否 | RMQ_SYS_TRACE_TOPIC | 消息跟踪topic的名称 + enableMsgTrace | boolean | 是 | false |是否开启消息轨迹 + customizedTraceTopic | String | 否 | RMQ_SYS_TRACE_TOPIC | 消息轨迹topic的名称 5. DefaultMQProducer @@ -283,7 +283,7 @@ public class Producer { `DefaultMQProducer(final String producerGroup, RPCHook rpcHook, boolean enableMsgTrace,final String customizedTraceTopic)` - 使用指定的分组名及自定义hook创建一个生产者,并设置是否开启消息追踪及追踪topic的名称。 + 使用指定的分组名及自定义hook创建一个生产者,并设置是否开启消息轨迹及追踪topic的名称。 - 入参描述: @@ -291,8 +291,8 @@ public class Producer { ---|---|---|---|--- producerGroup | String | 是 | DEFAULT_PRODUCER | 生产者的分组名称 rpcHook | RPCHook | 否 | null |每个远程命令执行后会回调rpcHook - enableMsgTrace | boolean | 是 | false |是否开启消息追踪 - customizedTraceTopic | String | 否 | RMQ_SYS_TRACE_TOPIC | 消息跟踪topic的名称 + enableMsgTrace | boolean | 是 | false |是否开启消息轨迹 + customizedTraceTopic | String | 否 | RMQ_SYS_TRACE_TOPIC | 消息轨迹topic的名称 ### 使用方法详细信息 From f1ee0239fb60af9c2f899137dfd8a1bd6f41e7e5 Mon Sep 17 00:00:00 2001 From: Frank Jia <474165491@qq.com> Date: Thu, 2 Dec 2021 14:45:11 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=AE=8C=E5=96=84BrokerServer=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=8F=8F=E8=BF=B0=E7=BB=86=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善BrokerServer部分描述细节 --- docs/cn/architecture.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/cn/architecture.md b/docs/cn/architecture.md index 42df9f07b29..942464f94ac 100644 --- a/docs/cn/architecture.md +++ b/docs/cn/architecture.md @@ -9,11 +9,11 @@ RocketMQ架构上主要分为四部分,如上图所示: - Consumer:消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求。 -- NameServer:NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以动态感知Broker的路由的信息。 +- NameServer:NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer和Consumer仍然可以动态感知Broker的路由的信息。 - BrokerServer:Broker主要负责消息的存储、投递和查询以及服务高可用保证,为了实现这些功能,Broker包含了以下几个重要子模块。 - 1. Remoting Module:整个Broker的实体,负责处理来自clients端的请求。 - 2. Client Manager:负责管理客户端(Producer/Consumer)和维护Consumer的Topic订阅信息 + 1. Remoting Module:整个Broker的实体,负责处理来自Client端的请求。 + 2. Client Manager:负责管理客户端(Producer/Consumer)和维护Consumer的Topic订阅信息。 3. Store Service:提供方便简单的API接口处理消息存储到物理硬盘和查询功能。 4. HA Service:高可用服务,提供Master Broker 和 Slave Broker之间的数据同步功能。 5. Index Service:根据特定的Message key对投递到Broker的消息进行索引服务,以提供消息的快速查询。