From 02986754bd865bc896ae21d0523a1c67b25a896b Mon Sep 17 00:00:00 2001 From: bert82503 Date: Thu, 24 Aug 2023 16:15:33 +0800 Subject: [PATCH 01/42] Add TABLE `api` index --- db/init/mysql/schema.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql index 57a9c85dc570..001cfdc74e4c 100644 --- a/db/init/mysql/schema.sql +++ b/db/init/mysql/schema.sql @@ -61,7 +61,10 @@ CREATE TABLE `api` ( `document_md5` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'document_md5', `date_created` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'create time', `date_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'update time', - PRIMARY KEY (`id`) USING BTREE + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_context_path` (`context_path`), + INDEX `idx_api_path_http_method_rpc_type` (`api_path`,`http_method`,`rpc_type`) +# INDEX `idx_state` (`state`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- From 1207c662e847b5d616bee7b3fc83a9bb924303cb Mon Sep 17 00:00:00 2001 From: bert82503 Date: Thu, 24 Aug 2023 16:17:07 +0800 Subject: [PATCH 02/42] Add TABLE `app_auth` key or index --- db/init/mysql/schema.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql index 001cfdc74e4c..4e7c0c7bf16e 100644 --- a/db/init/mysql/schema.sql +++ b/db/init/mysql/schema.sql @@ -103,7 +103,9 @@ CREATE TABLE `app_auth` ( `enabled` tinyint(0) NOT NULL COMMENT 'delete or not (0 close, 1 open) ', `date_created` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'create time', `date_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'update time', - PRIMARY KEY (`id`) USING BTREE + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_app_key` (`app_key`), + INDEX `idx_phone` (`phone`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- From f9d3bbecf163aa1680dd3308cca4968dccc8f26a Mon Sep 17 00:00:00 2001 From: bert82503 Date: Thu, 24 Aug 2023 16:22:40 +0800 Subject: [PATCH 03/42] Add TABLE `auth_param` index --- db/init/mysql/schema.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql index 4e7c0c7bf16e..93b24a3ad54f 100644 --- a/db/init/mysql/schema.sql +++ b/db/init/mysql/schema.sql @@ -64,7 +64,6 @@ CREATE TABLE `api` ( PRIMARY KEY (`id`) USING BTREE, INDEX `idx_context_path` (`context_path`), INDEX `idx_api_path_http_method_rpc_type` (`api_path`,`http_method`,`rpc_type`) -# INDEX `idx_state` (`state`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- @@ -123,7 +122,8 @@ CREATE TABLE `auth_param` ( `app_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'service module parameters (parameters that need to be passed by the gateway) json type', `date_created` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'create time', `date_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'update time', - PRIMARY KEY (`id`) USING BTREE + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_auth_id_app_name` (`auth_id`,`app_name`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- From fd5e0cde508f67a68c7d7b7d34fa235bc67eb764 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Thu, 24 Aug 2023 16:27:16 +0800 Subject: [PATCH 04/42] Add TABLE `auth_path` index --- db/init/mysql/schema.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql index 93b24a3ad54f..143c87bbfea4 100644 --- a/db/init/mysql/schema.sql +++ b/db/init/mysql/schema.sql @@ -142,7 +142,8 @@ CREATE TABLE `auth_path` ( `enabled` tinyint(0) NOT NULL COMMENT 'whether pass 1 is (0 close, 1 open) ', `date_created` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'create time', `date_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'update time', - PRIMARY KEY (`id`) USING BTREE + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_auth_id_app_name` (`auth_id`,`app_name`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- From 4bf822cc0da5d1b406f4dd36ca489f58d9f5620d Mon Sep 17 00:00:00 2001 From: bert82503 Date: Thu, 24 Aug 2023 16:39:13 +0800 Subject: [PATCH 05/42] Add TABLE `data_permission` key or index --- db/init/mysql/schema.sql | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql index 143c87bbfea4..6ce8d7cef008 100644 --- a/db/init/mysql/schema.sql +++ b/db/init/mysql/schema.sql @@ -103,7 +103,7 @@ CREATE TABLE `app_auth` ( `date_created` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'create time', `date_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'update time', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_app_key` (`app_key`), + UNIQUE KEY `uk_app_key` (`app_key`) USING BTREE, INDEX `idx_phone` (`phone`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; @@ -182,7 +182,9 @@ CREATE TABLE `data_permission` ( `data_type` int(0) NOT NULL COMMENT '0 selector type , 1 rule type', `date_created` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'create time', `date_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'update time', - PRIMARY KEY (`id`) USING BTREE + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_data_id` (`data_id`,`user_id`,`data_type`) USING BTREE, + INDEX `idx_user_id` (`user_id`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'data permission table' ROW_FORMAT = Dynamic; -- ---------------------------- From f4ab1d22f9112da39bcafb87f523b30c8ff376e4 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Thu, 24 Aug 2023 16:41:31 +0800 Subject: [PATCH 06/42] Improve "selectDataIds" sql in data-permission-sqlmap.xml --- .../src/main/resources/mappers/data-permission-sqlmap.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shenyu-admin/src/main/resources/mappers/data-permission-sqlmap.xml b/shenyu-admin/src/main/resources/mappers/data-permission-sqlmap.xml index e2fd69ffc400..7430dade7f07 100644 --- a/shenyu-admin/src/main/resources/mappers/data-permission-sqlmap.xml +++ b/shenyu-admin/src/main/resources/mappers/data-permission-sqlmap.xml @@ -92,12 +92,12 @@ @@ -159,8 +160,10 @@ @@ -201,6 +204,8 @@ - DELETE FROM discovery_upstream WHERE discovery_handler_id = #{discoveryHandlerId} and url = #{url} + DELETE FROM discovery_upstream + WHERE discovery_handler_id = #{discoveryHandlerId} + AND url = #{url} From c6e2d213ce5498d26018de84f10401967e5d1db6 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Sun, 27 Aug 2023 01:29:28 +0800 Subject: [PATCH 27/42] Add TABLE `proxy_selector`,`discovery_rel` index --- db/init/mysql/schema.sql | 4 +++- .../apache/shenyu/admin/mapper/ProxySelectorMapper.java | 8 ++++++-- .../src/main/resources/mappers/proxy-selector-sqlmap.xml | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql index b816c27c390d..12fd068f56d2 100644 --- a/db/init/mysql/schema.sql +++ b/db/init/mysql/schema.sql @@ -1989,7 +1989,8 @@ CREATE TABLE `proxy_selector` `props` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'the other field (json)', `date_created` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'create time', `date_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'update time', - PRIMARY KEY (`id`) USING BTREE + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_name` (`name`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- @@ -2006,6 +2007,7 @@ CREATE TABLE `discovery_rel` `date_created` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'create time', `date_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'update time', PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_discovery_handler_id` (`discovery_handler_id`), INDEX `idx_proxy_selector_id` (`proxy_selector_id`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/ProxySelectorMapper.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/ProxySelectorMapper.java index 71e30cae8226..fe8a873acd25 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/ProxySelectorMapper.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/ProxySelectorMapper.java @@ -101,7 +101,9 @@ public interface ProxySelectorMapper extends ExistProvider { * @param discoveryHandlerId discoveryHandlerId. * @return ProxySelectorDO */ - ProxySelectorDO selectByHandlerId(@Param("discoveryHandlerId") String discoveryHandlerId); + ProxySelectorDO selectByHandlerId( + @Param("discoveryHandlerId") String discoveryHandlerId + ); /** @@ -110,7 +112,9 @@ public interface ProxySelectorMapper extends ExistProvider { * @param discoveryId discoveryId * @return proxySelectorDOList */ - List selectByDiscoveryId(@Param("discoveryId") String discoveryId); + List selectByDiscoveryId( + @Param("discoveryId") String discoveryId + ); /** * selectAll. diff --git a/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml b/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml index d27f1b7008c0..cac23fb914d2 100644 --- a/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml +++ b/shenyu-admin/src/main/resources/mappers/proxy-selector-sqlmap.xml @@ -119,7 +119,7 @@ select - from discovery_rel where discovery_handler_id = #{discoveryHandlerId} + FROM discovery_rel + WHERE discovery_handler_id = #{discoveryHandlerId} From 44405fa9064a279bfd1c6654adf89391ab158f9f Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:04:54 +0800 Subject: [PATCH 29/42] =?UTF-8?q?DataChangedListener-=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/apache/shenyu/admin/listener/DataChangedListener.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java index c394425de704..8069e5da7f8c 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java @@ -31,6 +31,7 @@ /** * Event listener, used to send notification of event changes, * used to support HTTP, websocket, zookeeper and other event notifications. + * 数据变更事件监听器 */ public interface DataChangedListener { @@ -45,6 +46,7 @@ default void onAppAuthChanged(List changed, DataEventTypeEnum event /** * invoke this method when Plugin was received. + * 插件变更 * * @param changed the changed * @param eventType the event type @@ -54,6 +56,7 @@ default void onPluginChanged(List changed, DataEventTypeEnum eventTy /** * invoke this method when Selector was received. + * 选择器变更 * * @param changed the changed * @param eventType the event type @@ -73,6 +76,7 @@ default void onMetaDataChanged(List changed, DataEventTypeEnum eventTy /** * invoke this method when Rule was received. + * 规则变更 * * @param changed the changed * @param eventType the event type From 1e7ed62a5a002d4d7fa8143be0c850f2fa11475d Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:19:21 +0800 Subject: [PATCH 30/42] =?UTF-8?q?DataEventTypeEnum-=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/apache/shenyu/common/enums/DataEventTypeEnum.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/DataEventTypeEnum.java b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/DataEventTypeEnum.java index 6c54a5c71be6..8edcb96e89c3 100644 --- a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/DataEventTypeEnum.java +++ b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/DataEventTypeEnum.java @@ -24,21 +24,25 @@ /** * The enum Data event type. + * 数据事件类型 */ public enum DataEventTypeEnum { /** * delete event. + * 删除事件 */ DELETE, /** * insert event. + * 插入事件 */ CREATE, /** * update event. + * 更新事件 */ UPDATE, From 6239388fab118ec38c64f496f8c1ba53835edde6 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:20:36 +0800 Subject: [PATCH 31/42] =?UTF-8?q?ConfigGroupEnum-=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/apache/shenyu/common/enums/ConfigGroupEnum.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/ConfigGroupEnum.java b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/ConfigGroupEnum.java index 10964251a079..fe5d40eac32f 100644 --- a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/ConfigGroupEnum.java +++ b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/ConfigGroupEnum.java @@ -24,6 +24,7 @@ /** * configuration group. + * 配置分组 */ public enum ConfigGroupEnum { @@ -34,21 +35,25 @@ public enum ConfigGroupEnum { /** * Plugin config group enum. + * 插件配置分组 */ PLUGIN, /** * Rule config group enum. + * 规则配置分组 */ RULE, /** * Selector config group enum. + * 选择器配置分组 */ SELECTOR, /** * Meta data config group enum. + * 元数据配置分组 */ META_DATA, From 8b2c8ee3480602ac13ab843d27d35d1d7e5b1294 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:25:26 +0800 Subject: [PATCH 32/42] =?UTF-8?q?SyncDataServiceImpl.syncPluginData()-?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=8F=92=E4=BB=B6=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shenyu/admin/controller/PluginController.java | 14 +++++++++++--- .../shenyu/admin/service/SyncDataService.java | 2 ++ .../admin/service/impl/SyncDataServiceImpl.java | 13 +++++++++++++ .../shenyu/common/enums/DataEventTypeEnum.java | 1 + 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java index f768ba4b3db6..fa953432fd4b 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java @@ -59,9 +59,15 @@ @RestController @RequestMapping("/plugin") public class PluginController implements PagedController { - + + /** + * 插件服务 + */ private final PluginService pluginService; - + + /** + * 同步数据服务 + */ private final SyncDataService syncDataService; public PluginController(final PluginService pluginService, final SyncDataService syncDataService) { @@ -208,6 +214,7 @@ public ShenyuAdminResult syncPluginAll() { /** * Sync plugin data. + * 同步插件数据 * * @param id the id * @return the mono @@ -216,7 +223,8 @@ public ShenyuAdminResult syncPluginAll() { public ShenyuAdminResult syncPluginData(@PathVariable("id") @Existed(message = "plugin is not existed", provider = PluginMapper.class) final String id) { - return ShenyuAdminResult.success(syncDataService.syncPluginData(id) ? ShenyuResultMessage.SYNC_SUCCESS : ShenyuResultMessage.SYNC_FAIL); + boolean syncResult = syncDataService.syncPluginData(id); + return ShenyuAdminResult.success(syncResult ? ShenyuResultMessage.SYNC_SUCCESS : ShenyuResultMessage.SYNC_FAIL); } /** diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/SyncDataService.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/SyncDataService.java index 17637f317e56..b26812cd8de5 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/SyncDataService.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/SyncDataService.java @@ -21,6 +21,7 @@ /** * The interface Sync data service. + * 同步数据服务 */ public interface SyncDataService { @@ -34,6 +35,7 @@ public interface SyncDataService { /** * Sync plugin data boolean. + * 同步插件数据 * * @param pluginId the plugin id * @return the boolean diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java index 30a485e5001d..f243ded240f0 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SyncDataServiceImpl.java @@ -50,19 +50,25 @@ public class SyncDataServiceImpl implements SyncDataService { /** * The Plugin service. + * 插件服务 */ private final PluginService pluginService; /** * The Selector service. + * 选择器服务 */ private final SelectorService selectorService; /** * The Rule service. + * 规则服务 */ private final RuleService ruleService; + /** + * 事件发布者 + */ private final ApplicationEventPublisher eventPublisher; private final MetaDataService metaDataService; @@ -105,19 +111,26 @@ public boolean syncAll(final DataEventTypeEnum type) { @Override public boolean syncPluginData(final String pluginId) { + // 通过插件ID查找插件视图数据 PluginVO pluginVO = pluginService.findById(pluginId); + // 发布插件数据更新事件 eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.PLUGIN, DataEventTypeEnum.UPDATE, Collections.singletonList(PluginTransfer.INSTANCE.mapDataTOVO(pluginVO)))); + // 通过插件ID查找选择器数据列表 List selectorDataList = selectorService.findByPluginId(pluginId); if (!CollectionUtils.isEmpty(selectorDataList)) { + // 发布选择器数据列表的刷新事件 eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.SELECTOR, DataEventTypeEnum.REFRESH, selectorDataList)); + // 选择器ID列表 List selectorIdList = selectorDataList.stream().map(SelectorData::getId) .collect(Collectors.toList()); + // 获取所有规则数据列表 List allRuleDataList = ruleService.findBySelectorIdList(selectorIdList); + // 发布规则数据列表的刷新事件 eventPublisher.publishEvent(new DataChangedEvent(ConfigGroupEnum.RULE, DataEventTypeEnum.REFRESH, allRuleDataList)); } return true; diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/DataEventTypeEnum.java b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/DataEventTypeEnum.java index 8edcb96e89c3..efdcca3bc713 100644 --- a/shenyu-common/src/main/java/org/apache/shenyu/common/enums/DataEventTypeEnum.java +++ b/shenyu-common/src/main/java/org/apache/shenyu/common/enums/DataEventTypeEnum.java @@ -48,6 +48,7 @@ public enum DataEventTypeEnum { /** * REFRESH data event type enum. + * 刷新数据事件 */ REFRESH, From ad759cf8fe454a4988a6479ab2b9164885745f96 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:27:11 +0800 Subject: [PATCH 33/42] =?UTF-8?q?DataChangedEvent-=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/apache/shenyu/admin/listener/DataChangedEvent.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEvent.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEvent.java index 728668992cce..33b715c2ca5a 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEvent.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEvent.java @@ -27,6 +27,7 @@ /** * Data change event. + * 数据变更事件 * * @see DataChangedEventDispatcher * @since 2.0.0 @@ -35,8 +36,14 @@ public class DataChangedEvent extends ApplicationEvent { private static final long serialVersionUID = 8397163004365988739L; + /** + * 数据事件类型 + */ private final DataEventTypeEnum eventType; + /** + * 配置分组 + */ private final ConfigGroupEnum groupKey; /** From fa7f64c585e86c350616d25c9f87c564e6f6be34 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:30:31 +0800 Subject: [PATCH 34/42] =?UTF-8?q?DataChangedEventDispatcher-=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=8F=98=E6=9B=B4=E4=BA=8B=E4=BB=B6=E7=9A=84=E5=88=86?= =?UTF-8?q?=E5=8F=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/listener/DataChangedEventDispatcher.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEventDispatcher.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEventDispatcher.java index 0d27560cfd2d..051fcecd53d3 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEventDispatcher.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEventDispatcher.java @@ -37,12 +37,19 @@ /** * Event forwarders, which forward the changed events to each ConfigEventListener. + * 数据变更事件的分发器 */ @Component public class DataChangedEventDispatcher implements ApplicationListener, InitializingBean { + /** + * 应用上下文 + */ private final ApplicationContext applicationContext; + /** + * 数据变更事件的监听器列表 + */ private List listeners; public DataChangedEventDispatcher(final ApplicationContext applicationContext) { @@ -52,18 +59,22 @@ public DataChangedEventDispatcher(final ApplicationContext applicationContext) { @Override @SuppressWarnings("unchecked") public void onApplicationEvent(final DataChangedEvent event) { + // 数据变更事件的监听器 for (DataChangedListener listener : listeners) { switch (event.getGroupKey()) { case APP_AUTH: listener.onAppAuthChanged((List) event.getSource(), event.getEventType()); break; case PLUGIN: + // 插件数据变更 listener.onPluginChanged((List) event.getSource(), event.getEventType()); break; case RULE: + // 规则数据变更 listener.onRuleChanged((List) event.getSource(), event.getEventType()); break; case SELECTOR: + // 选择器数据变更 listener.onSelectorChanged((List) event.getSource(), event.getEventType()); applicationContext.getBean(LoadServiceDocEntry.class).loadDocOnSelectorChanged((List) event.getSource(), event.getEventType()); break; @@ -84,6 +95,7 @@ public void onApplicationEvent(final DataChangedEvent event) { @Override public void afterPropertiesSet() { + // 数据变更事件的监听器列表 Collection listenerBeans = applicationContext.getBeansOfType(DataChangedListener.class).values(); this.listeners = Collections.unmodifiableList(new ArrayList<>(listenerBeans)); } From 276eab692b9f4aa733361d6e9a69f9aab48473ca Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:33:07 +0800 Subject: [PATCH 35/42] =?UTF-8?q?DataChangedListener-=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E4=BA=8B=E4=BB=B6=E7=9A=84=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/listener/DataChangedEventDispatcher.java | 2 ++ .../shenyu/admin/listener/DataChangedListener.java | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEventDispatcher.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEventDispatcher.java index 051fcecd53d3..ebc3f502a432 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEventDispatcher.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedEventDispatcher.java @@ -63,6 +63,7 @@ public void onApplicationEvent(final DataChangedEvent event) { for (DataChangedListener listener : listeners) { switch (event.getGroupKey()) { case APP_AUTH: + // 应用认证数据 listener.onAppAuthChanged((List) event.getSource(), event.getEventType()); break; case PLUGIN: @@ -79,6 +80,7 @@ public void onApplicationEvent(final DataChangedEvent event) { applicationContext.getBean(LoadServiceDocEntry.class).loadDocOnSelectorChanged((List) event.getSource(), event.getEventType()); break; case META_DATA: + // 元数据变更 listener.onMetaDataChanged((List) event.getSource(), event.getEventType()); break; case PROXY_SELECTOR: diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java index 8069e5da7f8c..b17088ae4f07 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/DataChangedListener.java @@ -31,12 +31,13 @@ /** * Event listener, used to send notification of event changes, * used to support HTTP, websocket, zookeeper and other event notifications. - * 数据变更事件监听器 + * 数据变更事件的监听器 */ public interface DataChangedListener { /** * invoke this method when AppAuth was received. + * 应用认证数据变更 * * @param changed the changed * @param eventType the event type @@ -46,7 +47,7 @@ default void onAppAuthChanged(List changed, DataEventTypeEnum event /** * invoke this method when Plugin was received. - * 插件变更 + * 插件数据变更 * * @param changed the changed * @param eventType the event type @@ -56,7 +57,7 @@ default void onPluginChanged(List changed, DataEventTypeEnum eventTy /** * invoke this method when Selector was received. - * 选择器变更 + * 选择器数据变更 * * @param changed the changed * @param eventType the event type @@ -66,6 +67,7 @@ default void onSelectorChanged(List changed, DataEventTypeEnum eve /** * On meta data changed. + * 元数据变更 * * @param changed the changed * @param eventType the event type @@ -76,7 +78,7 @@ default void onMetaDataChanged(List changed, DataEventTypeEnum eventTy /** * invoke this method when Rule was received. - * 规则变更 + * 规则数据变更 * * @param changed the changed * @param eventType the event type From 452ef361d32e92032968b8e83bc666fbdca773f2 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:36:44 +0800 Subject: [PATCH 36/42] =?UTF-8?q?RecordLogDataChangedAdapterListener-?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E8=AE=B0=E5=BD=95=E6=97=A5=E5=BF=97=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=8F=98=E6=9B=B4=E7=9A=84=E9=80=82=E9=85=8D=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/listener/RecordLogDataChangedAdapterListener.java | 6 +++++- .../admin/model/event/AdminDataModelChangedEvent.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/RecordLogDataChangedAdapterListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/RecordLogDataChangedAdapterListener.java index 5c41967952b1..e08717a4bb86 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/RecordLogDataChangedAdapterListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/RecordLogDataChangedAdapterListener.java @@ -25,10 +25,14 @@ /** * RecordLogDataChangedAdapterListener. + * 操作记录日志数据变更的适配监听器 */ @Component public class RecordLogDataChangedAdapterListener implements DataChangedListener, ApplicationListener { - + + /** + * 操作日志记录的数据访问对象 + */ private final OperationRecordLogMapper logMapper; public RecordLogDataChangedAdapterListener(final OperationRecordLogMapper logMapper) { diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/event/AdminDataModelChangedEvent.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/event/AdminDataModelChangedEvent.java index f0286acd2d91..d79ae176053b 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/event/AdminDataModelChangedEvent.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/event/AdminDataModelChangedEvent.java @@ -25,6 +25,7 @@ /** * AdminDataModelChangedEvent. + * 管理员数据模型变更事件 */ public class AdminDataModelChangedEvent extends ApplicationEvent { From cf021c136d0033768bf7bb36239d46a964ab4eda Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 14:47:46 +0800 Subject: [PATCH 37/42] =?UTF-8?q?PluginData-=E6=8F=92=E4=BB=B6=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=EF=BC=8CSelectorData-=E9=80=89=E6=8B=A9=E5=99=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8CRuleData-=E8=A7=84=E5=88=99=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apache/shenyu/common/dto/ConditionData.java | 5 +++++ .../org/apache/shenyu/common/dto/PluginData.java | 16 ++++++++++++++++ .../org/apache/shenyu/common/dto/RuleData.java | 16 ++++++++++++++++ .../apache/shenyu/common/dto/SelectorData.java | 14 ++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/ConditionData.java b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/ConditionData.java index 6a897c139abe..c39ab6886ccd 100644 --- a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/ConditionData.java +++ b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/ConditionData.java @@ -21,6 +21,7 @@ /** * ConditionDTO. + * 匹配条件数据 * * @since 2.0.0 */ @@ -28,21 +29,25 @@ public class ConditionData { /** * {@linkplain org.apache.shenyu.common.enums.ParamTypeEnum}. + * 参数类型 */ private String paramType; /** * {@linkplain org.apache.shenyu.common.enums.OperatorEnum}. + * 操作符 */ private String operator; /** * param name. + * 参数名称 */ private String paramName; /** * param value. + * 参数值 */ private String paramValue; diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/PluginData.java b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/PluginData.java index 827150322d1b..4ccacbe9067b 100644 --- a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/PluginData.java +++ b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/PluginData.java @@ -21,19 +21,35 @@ /** * PluginData. + * 插件数据 * * @since 2.0.0 */ public class PluginData { + /** + * 插件ID + */ private String id; + /** + * 插件名称 + */ private String name; + /** + * 配置 + */ private String config; + /** + * 角色 + */ private String role; + /** + * 开关 + */ private Boolean enabled; private Integer sort; diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/RuleData.java b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/RuleData.java index 62b01c384cfa..d25b29aea826 100644 --- a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/RuleData.java +++ b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/RuleData.java @@ -22,17 +22,30 @@ /** * RuleData. + * 规则数据 * * @since 2.0.0 */ public class RuleData { + /** + * 规则ID + */ private String id; + /** + * 规则名称 + */ private String name; + /** + * 插件名称 + */ private String pluginName; + /** + * 选择器ID + */ private String selectorId; /** @@ -51,6 +64,9 @@ public class RuleData { */ private String handle; + /** + * 匹配条件列表 + */ private List conditionDataList; private List beforeConditionDataList; diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/SelectorData.java b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/SelectorData.java index f4b7555be76f..aae9b72e6269 100644 --- a/shenyu-common/src/main/java/org/apache/shenyu/common/dto/SelectorData.java +++ b/shenyu-common/src/main/java/org/apache/shenyu/common/dto/SelectorData.java @@ -22,20 +22,31 @@ /** * SelectorData. + * 选择器数据 * * @since 2.0.0 */ public class SelectorData { + /** + * 选择器ID + */ private String id; + /** + * 插件ID + */ private String pluginId; /** * plugin name. + * 插件名称 */ private String pluginName; + /** + * 选择器名称 + */ private String name; /** @@ -58,6 +69,9 @@ public class SelectorData { private String handle; + /** + * 匹配条件列表 + */ private List conditionList; private List beforeConditionList; From 9fdb26b7c17b2819a68cbca768b5603faa245909 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 15:09:20 +0800 Subject: [PATCH 38/42] =?UTF-8?q?AbstractPathDataChangedListener-=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E6=95=B0=E6=8D=AE=E5=8F=98=E6=9B=B4=E7=9A=84=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E5=99=A8=E7=9A=84=E6=8A=BD=E8=B1=A1=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractPathDataChangedListener.java | 34 ++++++++++++++++--- .../common/constant/DefaultPathConstants.java | 5 +++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java index 2530a0f735aa..52f762982f3e 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java @@ -36,13 +36,20 @@ /** * AbstractPathDataChangedListener. + * 路径数据变更的监听器的抽象框架实现 */ public abstract class AbstractPathDataChangedListener implements DataChangedListener { private static final Logger LOG = LoggerFactory.getLogger(AbstractPathDataChangedListener.class); + /** + * 规则同步对象锁 + */ private final Object ruleSyncObject = new Object(); + /** + * 选择器同步对象锁 + */ private final Object selectorSyncObject = new Object(); @Override @@ -116,28 +123,37 @@ public void onDiscoveryUpstreamChanged(final List changed, fi @Override public void onSelectorChanged(final List changed, final DataEventTypeEnum eventType) { + // 选择器数据的刷新事件 if (eventType == DataEventTypeEnum.REFRESH && !changed.isEmpty()) { + // 构建选择器的父路径("/shenyu/selector/${pluginName}") String selectorParentPath = DefaultPathConstants.buildSelectorParentPath(changed.get(0).getPluginName()); + // 递归地删除节点路径 deletePathRecursive(selectorParentPath); } + // 变更的选择器数据遍历 for (SelectorData data : changed) { + // 选择器的真实路径("/shenyu/selector/${pluginName}/${selectorId}") String selectorRealPath = DefaultPathConstants.buildSelectorRealPath(data.getPluginName(), data.getId()); + // delete if (eventType == DataEventTypeEnum.DELETE) { deleteNode(selectorRealPath); LOG.debug("[DataChangedListener] delete appKey {}", selectorRealPath); continue; } - //create or update + // create or update synchronized (selectorSyncObject) { createOrUpdate(selectorRealPath, data); } + // 操作日志 LOG.debug("[DataChangedListener] change path {} with data {}", selectorRealPath, data); } } @Override public void onPluginChanged(final List changed, final DataEventTypeEnum eventType) { + // 变更的插件数据遍历 for (PluginData data : changed) { + // 构建插件路径("/shenyu/plugin/${pluginName}") String pluginPath = DefaultPathConstants.buildPluginPath(data.getName()); // delete if (eventType == DataEventTypeEnum.DELETE) { @@ -149,28 +165,36 @@ public void onPluginChanged(final List changed, final DataEventTypeE LOG.debug("[DataChangedListener] delete pluginPath {}", pluginPath); continue; } - //create or update + // create or update createOrUpdate(pluginPath, data); + // 操作日志 LOG.debug("[DataChangedListener] change path {} with data {}", pluginPath, data); } } @Override public void onRuleChanged(final List changed, final DataEventTypeEnum eventType) { + // 规则数据的刷新事件 if (eventType == DataEventTypeEnum.REFRESH && !changed.isEmpty()) { - String selectorParentPath = DefaultPathConstants.buildRuleParentPath(changed.get(0).getPluginName()); - deletePathRecursive(selectorParentPath); + // 构建规则的父路径("/shenyu/rule/${pluginName}") + String ruleParentPath = DefaultPathConstants.buildRuleParentPath(changed.get(0).getPluginName()); + // 递归地删除节点路径 + deletePathRecursive(ruleParentPath); } + // 变更的规则数据遍历 for (RuleData data : changed) { + // 规则的真实路径("/shenyu/rule/${pluginName}/${selectorId-ruleId}") String ruleRealPath = DefaultPathConstants.buildRulePath(data.getPluginName(), data.getSelectorId(), data.getId()); + // delete if (eventType == DataEventTypeEnum.DELETE) { deleteNode(ruleRealPath); continue; } - //create or update + // create or update synchronized (ruleSyncObject) { createOrUpdate(ruleRealPath, data); } + // 操作日志 LOG.debug("[DataChangedListener] change path {} with data {}", ruleRealPath, data); } } diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/constant/DefaultPathConstants.java b/shenyu-common/src/main/java/org/apache/shenyu/common/constant/DefaultPathConstants.java index 22dc43692171..c814d00985c4 100644 --- a/shenyu-common/src/main/java/org/apache/shenyu/common/constant/DefaultPathConstants.java +++ b/shenyu-common/src/main/java/org/apache/shenyu/common/constant/DefaultPathConstants.java @@ -97,6 +97,7 @@ public static String buildPluginParentPath() { * @return zk path for plugin */ public static String buildPluginPath(final String pluginName) { + // "/shenyu/plugin/${pluginName}" return String.join(PATH_SEPARATOR, PLUGIN_PARENT, pluginName); } @@ -107,6 +108,7 @@ public static String buildPluginPath(final String pluginName) { * @return zk path for selector */ public static String buildSelectorParentPath(final String pluginName) { + // "/shenyu/selector/${pluginName}" return String.join(PATH_SEPARATOR, SELECTOR_PARENT, pluginName); } @@ -118,6 +120,7 @@ public static String buildSelectorParentPath(final String pluginName) { * @return zk full path for selector */ public static String buildSelectorRealPath(final String pluginName, final String selectorId) { + // "/shenyu/selector/${pluginName}/${selectorId}" return String.join(PATH_SEPARATOR, SELECTOR_PARENT, pluginName, selectorId); } @@ -128,6 +131,7 @@ public static String buildSelectorRealPath(final String pluginName, final String * @return zk rule parent path. */ public static String buildRuleParentPath(final String pluginName) { + // "/shenyu/rule/${pluginName}" return String.join(PATH_SEPARATOR, RULE_PARENT, pluginName); } @@ -140,6 +144,7 @@ public static String buildRuleParentPath(final String pluginName) { * @return /shenyu/rule/pluginName/selectorId-ruleId */ public static String buildRulePath(final String pluginName, final String selectorId, final String ruleId) { + // "/shenyu/rule/${pluginName}/${selectorId-ruleId}" return String.join(PATH_SEPARATOR, buildRuleParentPath(pluginName), String.join(SELECTOR_JOIN_RULE, selectorId, ruleId)); } From b036104f40ad3c6a8c4f66abe66898ae067ba06b Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 15:13:29 +0800 Subject: [PATCH 39/42] =?UTF-8?q?ZookeeperDataChangedListener-=E4=BD=BF?= =?UTF-8?q?=E7=94=A8ZooKeeper=E5=8F=91=E5=B8=83=E6=95=B0=E6=8D=AE=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zookeeper/ZookeeperDataChangedListener.java | 7 +++++++ .../client/server/zookeeper/ZookeeperClient.java | 11 +++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java index 47778089463f..9f8252152f83 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java @@ -23,9 +23,13 @@ /** * Use zookeeper to push data changes. + * 使用ZooKeeper发布数据变更 */ public class ZookeeperDataChangedListener extends AbstractPathDataChangedListener { + /** + * ZooKeeper客户端 + */ private final ZookeeperClient zkClient; public ZookeeperDataChangedListener(final ZookeeperClient zkClient) { @@ -34,12 +38,14 @@ public ZookeeperDataChangedListener(final ZookeeperClient zkClient) { @Override public void createOrUpdate(final String path, final Object data) { + // 创建持久化路径节点 zkClient.createOrUpdate(path, data, CreateMode.PERSISTENT); } @Override public void deleteNode(final String path) { if (zkClient.isExist(path)) { + // 删除路径节点 zkClient.delete(path); } } @@ -47,6 +53,7 @@ public void deleteNode(final String path) { @Override public void deletePathRecursive(final String path) { if (zkClient.isExist(path)) { + // 删除路径节点 zkClient.delete(path); } } diff --git a/shenyu-register-center/shenyu-register-client-server/shenyu-register-client-server-zookeeper/src/main/java/org/apache/shenyu/register/client/server/zookeeper/ZookeeperClient.java b/shenyu-register-center/shenyu-register-client-server/shenyu-register-client-server-zookeeper/src/main/java/org/apache/shenyu/register/client/server/zookeeper/ZookeeperClient.java index 257242018b6a..c19feb1df7cd 100644 --- a/shenyu-register-center/shenyu-register-client-server/shenyu-register-client-server-zookeeper/src/main/java/org/apache/shenyu/register/client/server/zookeeper/ZookeeperClient.java +++ b/shenyu-register-center/shenyu-register-client-server/shenyu-register-client-server-zookeeper/src/main/java/org/apache/shenyu/register/client/server/zookeeper/ZookeeperClient.java @@ -157,7 +157,11 @@ public String get(final String key) { public void createOrUpdate(final String key, final String value, final CreateMode mode) { String val = StringUtils.isEmpty(value) ? "" : value; try { - client.create().orSetData().creatingParentsIfNeeded().withMode(mode).forPath(key, val.getBytes(StandardCharsets.UTF_8)); + client.create() + .orSetData() + .creatingParentsIfNeeded() + .withMode(mode) + .forPath(key, val.getBytes(StandardCharsets.UTF_8)); } catch (Exception e) { throw new ShenyuException(e); } @@ -186,7 +190,10 @@ public void createOrUpdate(final String key, final Object value, final CreateMod */ public void delete(final String key) { try { - client.delete().guaranteed().deletingChildrenIfNeeded().forPath(key); + client.delete() + .guaranteed() + .deletingChildrenIfNeeded() + .forPath(key); } catch (Exception e) { throw new ShenyuException(e); } From e8bb4f70cad91abe6a9bb0031daae596af2457ce Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 15:17:09 +0800 Subject: [PATCH 40/42] =?UTF-8?q?EtcdDataDataChangedListener-=E4=BD=BF?= =?UTF-8?q?=E7=94=A8etcd=E5=8F=91=E5=B8=83=E6=95=B0=E6=8D=AE=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/apache/shenyu/admin/listener/etcd/EtcdClient.java | 7 +++++-- .../admin/listener/etcd/EtcdDataDataChangedListener.java | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdClient.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdClient.java index dbeb358a7450..c6392019345e 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdClient.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdClient.java @@ -75,7 +75,9 @@ public Boolean exists(final String key) { */ public void put(final String key, final String value) { try { - client.getKVClient().put(ByteSequence.from(key, StandardCharsets.UTF_8), ByteSequence.from(value, StandardCharsets.UTF_8)).get(); + client.getKVClient() + .put(ByteSequence.from(key, StandardCharsets.UTF_8), ByteSequence.from(value, StandardCharsets.UTF_8)) + .get(); } catch (Exception e) { LOG.error("update value of node error.", e); throw new ShenyuException(e.getMessage()); @@ -87,7 +89,8 @@ public void put(final String key, final String value) { * @param key node name */ public void delete(final String key) { - client.getKVClient().delete(ByteSequence.from(key, StandardCharsets.UTF_8)); + client.getKVClient() + .delete(ByteSequence.from(key, StandardCharsets.UTF_8)); } /** diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java index 99baa10581e1..5d72f2dde216 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java @@ -22,9 +22,13 @@ /** * EtcdDataDataChangedListener. + * 使用etcd发布数据变更 */ public class EtcdDataDataChangedListener extends AbstractPathDataChangedListener { + /** + * etcd客户端 + */ private final EtcdClient etcdClient; public EtcdDataDataChangedListener(final EtcdClient client) { From f9cd5412df6dd3f1e17b4af7e472cee86ed65455 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 10 May 2024 16:33:06 +0800 Subject: [PATCH 41/42] =?UTF-8?q?NacosDataChangedListener-=E4=BD=BF?= =?UTF-8?q?=E7=94=A8nacos=E6=B3=A8=E5=86=8C=E4=B8=AD=E5=BF=83=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=95=B0=E6=8D=AE=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/listener/etcd/EtcdDataDataChangedListener.java | 2 +- .../shenyu/admin/listener/nacos/NacosDataChangedListener.java | 4 ++++ .../listener/zookeeper/ZookeeperDataChangedListener.java | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java index 5d72f2dde216..a8a4d7286619 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/etcd/EtcdDataDataChangedListener.java @@ -22,7 +22,7 @@ /** * EtcdDataDataChangedListener. - * 使用etcd发布数据变更 + * 使用etcd注册中心发布数据变更 */ public class EtcdDataDataChangedListener extends AbstractPathDataChangedListener { diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/nacos/NacosDataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/nacos/NacosDataChangedListener.java index 6a6bf152c89d..6e1748338a65 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/nacos/NacosDataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/nacos/NacosDataChangedListener.java @@ -29,11 +29,15 @@ /** * Use nacos to push data changes. + * 使用nacos注册中心发布数据变更 */ public class NacosDataChangedListener extends AbstractNodeDataChangedListener { private static final Logger LOG = LoggerFactory.getLogger(NacosDataChangedListener.class); + /** + * 配置服务 + */ private final ConfigService configService; public NacosDataChangedListener(final ConfigService configService) { diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java index 9f8252152f83..78fa930843a1 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/zookeeper/ZookeeperDataChangedListener.java @@ -23,7 +23,7 @@ /** * Use zookeeper to push data changes. - * 使用ZooKeeper发布数据变更 + * 使用ZooKeeper注册中心发布数据变更 */ public class ZookeeperDataChangedListener extends AbstractPathDataChangedListener { From f0708308553ba1cb2c8e35c3ed78922613cbd806 Mon Sep 17 00:00:00 2001 From: bert82503 Date: Fri, 2 Aug 2024 14:31:47 +0800 Subject: [PATCH 42/42] =?UTF-8?q?AbstractNodeDataChangedListener-=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=95=B0=E6=8D=AE=E5=8F=98=E6=9B=B4=E7=9B=91=E8=A7=86?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractNodeDataChangedListener.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractNodeDataChangedListener.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractNodeDataChangedListener.java index 8e6e34a94ca3..f393e594379c 100644 --- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractNodeDataChangedListener.java +++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/AbstractNodeDataChangedListener.java @@ -41,13 +41,20 @@ /** * AbstractNodeDataChangedListener. + * 节点数据变更的监听器的抽象框架实现 */ public abstract class AbstractNodeDataChangedListener implements DataChangedListener { private static final Logger LOG = LoggerFactory.getLogger(AbstractNodeDataChangedListener.class); + /** + * 变更数据 + */ private final ChangeData changeData; + /** + * 列表保存可重入锁映射 + */ private final Map listSaveLockMap = new ConcurrentHashMap<>(); /** @@ -68,8 +75,11 @@ public void onAppAuthChanged(final List changed, final DataEventTyp @Override public void onPluginChanged(final List changed, final DataEventTypeEnum eventType) { + // 配置键的前缀("${pluginDataId}.") final String configKeyPrefix = changeData.getPluginDataId() + DefaultNodeConstants.JOIN_POINT; + // 数据变更 this.onCommonChanged(configKeyPrefix, changed, eventType, PluginData::getName, PluginData.class); + // 操作日志 LOG.debug("[DataChangedListener] PluginChanged {}", configKeyPrefix); } @@ -99,19 +109,22 @@ private void onCommonChanged(final String configKeyPrefix, final List cha final DataEventTypeEnum eventType, final Function mapperToKey, final Class tClass) { // Avoiding concurrent operations on list nodes + // 避免并发操作 final ReentrantLock reentrantLock = listSaveLockMap.computeIfAbsent(configKeyPrefix, key -> new ReentrantLock()); try { reentrantLock.lock(); + // 配置键列表 final List changeNames = changedList.stream().map(mapperToKey).collect(Collectors.toList()); switch (eventType) { case DELETE: - changedList.stream().map(mapperToKey).forEach(removeKey -> { + changeNames.forEach(removeKey -> { delConfig(configKeyPrefix + removeKey); }); delChangedData(configKeyPrefix, changeNames); break; case REFRESH: case MYSELF: + // 配置数据名称的列表 final List configDataNames = this.getConfigDataNames(configKeyPrefix); changedList.forEach(changedData -> { publishConfig(configKeyPrefix + mapperToKey.apply(changedData), changedData); @@ -125,6 +138,7 @@ private void onCommonChanged(final String configKeyPrefix, final List cha publishConfig(configKeyPrefix + DefaultNodeConstants.LIST_STR, changeNames); break; default: + // 更新 changedList.forEach(changedData -> { publishConfig(configKeyPrefix + mapperToKey.apply(changedData), changedData); }); @@ -160,6 +174,7 @@ private void delChangedData(final String configKeyPrefix, final List cha public void onSelectorChanged(final List changed, final DataEventTypeEnum eventType) { final String configKeyPrefix = changeData.getSelectorDataId() + DefaultNodeConstants.JOIN_POINT; this.onCommonMultiChanged(changed, eventType, configKeyPrefix, SelectorData::getPluginName, SelectorData::getId); + // 操作日志 LOG.debug("[DataChangedListener] SelectorChanged {}", configKeyPrefix); } @@ -169,6 +184,7 @@ public void onRuleChanged(final List changed, final DataEventTypeEnum this.onCommonMultiChanged(changed, eventType, configKeyPrefix, ruleData -> String.join(DefaultNodeConstants.JOIN_POINT, ruleData.getPluginName(), ruleData.getSelectorId()), RuleData::getId); + // 操作日志 LOG.debug("[DataChangedListener] RuleChanged {}", changeData.getRuleDataId()); } @@ -280,6 +296,7 @@ private void publishConfig(final String dataId, final Object data) { private void delConfig(final String dataId) { LOG.debug("[DataChangedListener] delConfig {}", dataId); + // 删除配置 this.doDelConfig(dataId); } @@ -312,16 +329,19 @@ public static class ChangeData { /** * plugin data id. + * 插件数据ID */ private final String pluginDataId; /** * selector data id. + * 选择器数据ID */ private final String selectorDataId; /** * rule data id. + * 规则数据ID */ private final String ruleDataId;