This is an automated email from the ASF dual-hosted git repository.

chenwenkang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new aeba1f3cbf [feat] loggingRabbitMQ plugin config based on selector 
(#6059)
aeba1f3cbf is described below

commit aeba1f3cbf102b577e3ee535596331121743a825
Author: Yu Siheng <[email protected]>
AuthorDate: Sun Sep 28 00:34:51 2025 +0800

    [feat] loggingRabbitMQ plugin config based on selector (#6059)
    
    * [feat] loggingRabbitMQ plugin config based on selector
    
    * fix
    
    * fix
    
    * fix
    
    * fix
    
    * fix
    
    * fix test file
    
    * add:test file
    
    ---------
    
    Co-authored-by: aias00 <[email protected]>
    Co-authored-by: loongs-zhang <[email protected]>
    Co-authored-by: Misaya295 <[email protected]>
---
 db/init/mysql/schema.sql                           |  14 +
 db/init/ob/schema.sql                              |  14 +
 db/init/og/create-table.sql                        |  14 +
 db/init/oracle/schema.sql                          |  38 +++
 db/init/pg/create-table.sql                        |  13 +
 db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql           |  18 +-
 db/upgrade/2.7.0-upgrade-2.7.1-ob.sql              |  17 +-
 db/upgrade/2.7.0-upgrade-2.7.1-og.sql              |  17 +-
 db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql          |  41 +++
 db/upgrade/2.7.0-upgrade-2.7.1-pg.sql              |  18 +-
 .../src/main/resources/sql-script/h2/schema.sql    |  14 +
 .../logging/common/AbstractLoggingPlugin.java      |   1 +
 .../common/collector/AbstractLogCollector.java     | 106 ++++++-
 .../logging/common/collector/LogCollector.java     |   1 +
 .../rabbitmq/cache/RabbitmqClientCache.java        | 150 ++++++++++
 .../rabbitmq/config/RabbitmqLogCollectConfig.java  | 319 +++++++++++++++++++++
 .../rabbitmq/conllector/RabbitmqLogCollector.java  |  17 ++
 .../handler/LoggingRabbitmqPluginDataHandler.java  |  62 ++++
 .../rabbitmq/cache/RabbitmqClientCacheTest.java    |  76 +++++
 .../collector/RabbitmqLogCollectorTest.java        |  35 +++
 .../config/RabbitmqLogCollectConfigTest.java       |   8 +-
 .../LoggingRabbitmqPluginDataHandlerTest.java      |  29 ++
 22 files changed, 999 insertions(+), 23 deletions(-)

diff --git a/db/init/mysql/schema.sql b/db/init/mysql/schema.sql
index c2b8cbc85d..52bbf64c28 100644
--- a/db/init/mysql/schema.sql
+++ b/db/init/mysql/schema.sql
@@ -1372,6 +1372,20 @@ INSERT INTO `plugin_handle` VALUES 
('1722804370575548416', '45', 'exclusive', 'e
 INSERT INTO `plugin_handle` VALUES ('1722804461256400896', '45', 'autoDelete', 
'autoDelete', 2, 3, 0, 
'{\"required\":\"1\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
 INSERT INTO `plugin_handle` VALUES ('1722804548510507008', '45', 'args', 
'args', 2, 3, 0, 
'{\"required\":\"0\",\"defaultValue\":"",\"placeholder\":"",\"rule\":\"\"}', 
'2023-1\1-07 11:06:00.803', '2023-11-07 13:31:41.048');
 
+INSERT INTO `plugin_handle` VALUES ('1821435546642157568', '45', 'host', 
'host', 2, 1, 0, '{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', 
'2023-11-06 15:53:11.704', '2023-11-07 13:31:41.010');
+INSERT INTO `plugin_handle` VALUES ('1821435708743618560', '45', 'port', 
'port', 1, 1, 0, '{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', 
'2023-11-06 15:53:50.352', '2023-11-07 13:31:41.016');
+INSERT INTO `plugin_handle` VALUES ('1821436368046264320', '45', 'password', 
'password', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:56:27.541', '2023-11-07 13:31:41.021');
+INSERT INTO `plugin_handle` VALUES ('1821436500343001088', '45', 'username', 
'username', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:56:59.084', '2023-11-07 13:31:41.025');
+INSERT INTO `plugin_handle` VALUES ('1821436639635836928', '45', 
'exchangeName', 'exchangeName', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:57:32.295', '2023-11-07 13:31:41.030');
+INSERT INTO `plugin_handle` VALUES ('1821436745583955968', '45', 'queueName', 
'queueName', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:57:57.553', '2023-11-07 13:31:41.035');
+INSERT INTO `plugin_handle` VALUES ('1821509996347617280', '45', 'routingKey', 
'routingKey', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
20:49:01.897', '2023-11-07 13:31:41.039');
+INSERT INTO `plugin_handle` VALUES ('1821725585461706752', '45', 
'virtualHost', 'virtualHost', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"/\",\"rule\":\"\"}', '2023-11-07 
11:05:42.350', '2023-11-07 13:31:41.044');
+INSERT INTO `plugin_handle` VALUES ('1821725662875975680', '45', 
'exchangeType', 'exchangeType', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"direct\",\"rule\":\"\"}', '2023-11-07 
11:06:00.803', '2023-11-07 13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804180904927232', '45', 'durable', 
'durable', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"true\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804370575548416', '45', 'exclusive', 
'exclusive', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804461256400896', '45', 'autoDelete', 
'autoDelete', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804548510507008', '45', 'args', 
'args', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":"",\"placeholder\":"",\"rule\":\"\"}', 
'2023-1\1-07 11:06:00.803', '2023-11-07 13:31:41.048');
+
 INSERT INTO `plugin_handle` VALUES ('1722804548510507009', '33', 'topic', 
'topic', 2, 1, 1, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"placeholder\":\"optional\"}', 
'2022-05-25 18:02:53', '2022-05-25 18:02:53');
 INSERT INTO `plugin_handle` VALUES ('1722804548510507010', '33', 'sampleRate', 
'sampleRate', 2, 1, 2, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"placeholder\":\"optional,0,0.01~1\"}',
 '2022-05-25 18:02:53', '2022-05-25 18:02:53');
 
diff --git a/db/init/ob/schema.sql b/db/init/ob/schema.sql
index 0862529506..70ad567a22 100644
--- a/db/init/ob/schema.sql
+++ b/db/init/ob/schema.sql
@@ -1340,6 +1340,20 @@ INSERT INTO `plugin_handle` VALUES 
('1722804370575548416', '45', 'exclusive', 'e
 INSERT INTO `plugin_handle` VALUES ('1722804461256400896', '45', 'autoDelete', 
'autoDelete', 2, 3, 0, 
'{\"required\":\"1\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
 INSERT INTO `plugin_handle` VALUES ('1722804548510507008', '45', 'args', 
'args', 2, 3, 0, 
'{\"required\":\"0\",\"defaultValue\":"",\"placeholder\":"",\"rule\":\"\"}', 
'2023-1\1-07 11:06:00.803', '2023-11-07 13:31:41.048');
 
+INSERT INTO `plugin_handle` VALUES ('1821435546642157568', '45', 'host', 
'host', 2, 1, 0, '{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', 
'2023-11-06 15:53:11.704', '2023-11-07 13:31:41.010');
+INSERT INTO `plugin_handle` VALUES ('1821435708743618560', '45', 'port', 
'port', 1, 1, 0, '{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', 
'2023-11-06 15:53:50.352', '2023-11-07 13:31:41.016');
+INSERT INTO `plugin_handle` VALUES ('1821436368046264320', '45', 'password', 
'password', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:56:27.541', '2023-11-07 13:31:41.021');
+INSERT INTO `plugin_handle` VALUES ('1821436500343001088', '45', 'username', 
'username', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:56:59.084', '2023-11-07 13:31:41.025');
+INSERT INTO `plugin_handle` VALUES ('1821436639635836928', '45', 
'exchangeName', 'exchangeName', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:57:32.295', '2023-11-07 13:31:41.030');
+INSERT INTO `plugin_handle` VALUES ('1821436745583955968', '45', 'queueName', 
'queueName', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:57:57.553', '2023-11-07 13:31:41.035');
+INSERT INTO `plugin_handle` VALUES ('1821509996347617280', '45', 'routingKey', 
'routingKey', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
20:49:01.897', '2023-11-07 13:31:41.039');
+INSERT INTO `plugin_handle` VALUES ('1821725585461706752', '45', 
'virtualHost', 'virtualHost', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"/\",\"rule\":\"\"}', '2023-11-07 
11:05:42.350', '2023-11-07 13:31:41.044');
+INSERT INTO `plugin_handle` VALUES ('1821725662875975680', '45', 
'exchangeType', 'exchangeType', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"direct\",\"rule\":\"\"}', '2023-11-07 
11:06:00.803', '2023-11-07 13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804180904927232', '45', 'durable', 
'durable', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"true\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804370575548416', '45', 'exclusive', 
'exclusive', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804461256400896', '45', 'autoDelete', 
'autoDelete', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804548510507008', '45', 'args', 
'args', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":"",\"placeholder\":"",\"rule\":\"\"}', 
'2023-1\1-07 11:06:00.803', '2023-11-07 13:31:41.048');
+
 INSERT INTO `plugin_handle` VALUES ('1722804548510507009', '33', 'topic', 
'topic', 2, 1, 1, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"placeholder\":\"optional\"}', 
'2022-05-25 18:02:53', '2022-05-25 18:02:53');
 INSERT INTO `plugin_handle` VALUES ('1722804548510507010', '33', 'sampleRate', 
'sampleRate', 2, 1, 2, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"placeholder\":\"optional,0,0.01~1\"}',
 '2022-05-25 18:02:53', '2022-05-25 18:02:53');
 
diff --git a/db/init/og/create-table.sql b/db/init/og/create-table.sql
index 0f35c1a36b..9802802a61 100644
--- a/db/init/og/create-table.sql
+++ b/db/init/og/create-table.sql
@@ -1368,6 +1368,20 @@ INSERT INTO "public"."plugin_handle" VALUES 
('1722804370575548416', '45', 'exclu
 INSERT INTO "public"."plugin_handle" VALUES ('1722804461256400896', '45', 
'autoDelete', 'autoDelete', 2, 3, 0, 
'{"required":"1","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
 INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507008', '45', 
'args', 'args', 2, 3, 0, '{"required":"0","defaultValue":"","placeholder":"args 
json","rule":""}', '2023-11-07 11:06:00.803', '2023-11-07 13:31:41.048');
 
+INSERT INTO "public"."plugin_handle" VALUES ('1821435546642157568', '45', 
'host', 'host', 2, 1, 0, '{"required":"0","defaultValue":"","rule":""}', 
'2023-11-06 15:53:11.704', '2023-11-07 13:31:41.010');
+INSERT INTO "public"."plugin_handle" VALUES ('1821435708743618560', '45', 
'port', 'port', 1, 1, 0, '{"required":"0","defaultValue":"","rule":""}', 
'2023-11-06 15:53:50.352', '2023-11-07 13:31:41.016');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436368046264320', '45', 
'password', 'password', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:56:27.541', 
'2023-11-07 13:31:41.021');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436500343001088', '45', 
'username', 'username', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:56:59.084', 
'2023-11-07 13:31:41.025');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436639635836928', '45', 
'exchangeName', 'exchangeName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:57:32.295', 
'2023-11-07 13:31:41.030');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436745583955968', '45', 
'queueName', 'queueName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:57:57.553', 
'2023-11-07 13:31:41.035');
+INSERT INTO "public"."plugin_handle" VALUES ('1821509996347617280', '45', 
'routingKey', 'routingKey', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 20:49:01.897', 
'2023-11-07 13:31:41.039');
+INSERT INTO "public"."plugin_handle" VALUES ('1821725585461706752', '45', 
'virtualHost', 'virtualHost', 2, 1, 0, 
'{"required":"0","defaultValue":"/","rule":""}', '2023-11-07 11:05:42.350', 
'2023-11-07 13:31:41.044');
+INSERT INTO "public"."plugin_handle" VALUES ('1821725662875975680', '45', 
'exchangeType', 'exchangeType', 2, 1, 0, 
'{"required":"0","defaultValue":"direct","rule":""}', '2023-11-07 
11:06:00.803', '2023-11-07 13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804180904927232', '45', 
'durable', 'durable', 2, 1, 0, 
'{"required":"0","defaultValue":"true","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804370575548416', '45', 
'exclusive', 'exclusive', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804461256400896', '45', 
'autoDelete', 'autoDelete', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804548510507008', '45', 
'args', 'args', 2, 1, 0, '{"required":"0","defaultValue":"","placeholder":"args 
json","rule":""}', '2023-11-07 11:06:00.803', '2023-11-07 13:31:41.048');
+
 INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507009', '45', 
'sampleRate', 'sampleRate', 2, 3, 4, 
'{"required":"0","defaultValue":"1","placeholder":"optional,0,0.01~1"}', 
'2022-07-04 22:00:00', '2022-07-04 22:00:00');
 INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507010', '45', 
'sampleRate', 'sampleRate', 2, 1, 2, 
'{"required":"0","defaultValue":"","placeholder":"optional,0,0.01~1"}', 
'2022-07-04 22:00:00', '2022-07-04 22:00:00');
 
diff --git a/db/init/oracle/schema.sql b/db/init/oracle/schema.sql
index 32fedb7a76..04c74d20ab 100644
--- a/db/init/oracle/schema.sql
+++ b/db/init/oracle/schema.sql
@@ -2176,6 +2176,44 @@ values ('1722804461256400896', '45', 'autoDelete', 
'autoDelete', 2, 3, 0, '{"req
 insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
 values ('1722804548510507008', '45', 'args', 'args', 2, 3, 0, 
'{"required":"0","defaultValue":"","placeholder":"","rule":"/^\\s*(\\{.*\\}|\\[.*\\])\\s*$/"}');
 
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821435546642157568', '45', 'host', 'host', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821435708743618560', '45', 'port', 'port', 1, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821436368046264320', '45', 'password', 'password', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821436500343001088', '45', 'username', 'username', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821436639635836928', '45', 'exchangeName', 'exchangeName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821436745583955968', '45', 'queueName', 'queueName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821509996347617280', '45', 'routingKey', 'routingKey', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821725585461706752', '45', 'virtualHost', 'virtualHost', 2, 1, 0, 
'{"required":"0","defaultValue":"/","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821725662875975680', '45', 'exchangeType', 'exchangeType', 2, 1, 0, 
'{"required":"0","defaultValue":"direct","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1822804180904927232', '45', 'durable', 'durable', 2, 1, 0, 
'{"required":"0","defaultValue":"true","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1822804370575548416', '45', 'exclusive', 'exclusive', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1822804461256400896', '45', 'autoDelete', 'autoDelete', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1822804548510507008', '45', 'args', 'args', 2, 1, 0, 
'{"required":"0","defaultValue":"","placeholder":"","rule":"/^\\s*(\\{.*\\}|\\[.*\\])\\s*$/"}');
 insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
 values ('1722804548510507009', '33', 'sampleRate', 'sampleRate', 2, 1, 2, 
'{"required":"0","defaultValue":"","placeholder":"optional,0,0.01~1"}');
 
diff --git a/db/init/pg/create-table.sql b/db/init/pg/create-table.sql
index 4ae3172cf1..5cf29cce8f 100644
--- a/db/init/pg/create-table.sql
+++ b/db/init/pg/create-table.sql
@@ -1426,6 +1426,19 @@ INSERT INTO "public"."plugin_handle" VALUES 
('1722804370575548416', '45', 'exclu
 INSERT INTO "public"."plugin_handle" VALUES ('1722804461256400896', '45', 
'autoDelete', 'autoDelete', 2, 3, 0, 
'{"required":"1","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
 INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507008', '45', 
'args', 'args', 2, 3, 0, '{"required":"0","defaultValue":"","placeholder":"args 
json","rule":""}', '2023-11-07 11:06:00.803', '2023-11-07 13:31:41.048');
 
+INSERT INTO "public"."plugin_handle" VALUES ('1821435546642157568', '45', 
'host', 'host', 2, 1, 0, '{"required":"0","defaultValue":"","rule":""}', 
'2023-11-06 15:53:11.704', '2023-11-07 13:31:41.010');
+INSERT INTO "public"."plugin_handle" VALUES ('1821435708743618560', '45', 
'port', 'port', 1, 1, 0, '{"required":"0","defaultValue":"","rule":""}', 
'2023-11-06 15:53:50.352', '2023-11-07 13:31:41.016');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436368046264320', '45', 
'password', 'password', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:56:27.541', 
'2023-11-07 13:31:41.021');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436500343001088', '45', 
'username', 'username', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:56:59.084', 
'2023-11-07 13:31:41.025');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436639635836928', '45', 
'exchangeName', 'exchangeName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:57:32.295', 
'2023-11-07 13:31:41.030');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436745583955968', '45', 
'queueName', 'queueName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:57:57.553', 
'2023-11-07 13:31:41.035');
+INSERT INTO "public"."plugin_handle" VALUES ('1821509996347617280', '45', 
'routingKey', 'routingKey', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 20:49:01.897', 
'2023-11-07 13:31:41.039');
+INSERT INTO "public"."plugin_handle" VALUES ('1821725585461706752', '45', 
'virtualHost', 'virtualHost', 2, 1, 0, 
'{"required":"0","defaultValue":"/","rule":""}', '2023-11-07 11:05:42.350', 
'2023-11-07 13:31:41.044');
+INSERT INTO "public"."plugin_handle" VALUES ('1821725662875975680', '45', 
'exchangeType', 'exchangeType', 2, 1, 0, 
'{"required":"0","defaultValue":"direct","rule":""}', '2023-11-07 
11:06:00.803', '2023-11-07 13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804180904927232', '45', 
'durable', 'durable', 2, 1, 0, 
'{"required":"0","defaultValue":"true","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804370575548416', '45', 
'exclusive', 'exclusive', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804461256400896', '45', 
'autoDelete', 'autoDelete', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804548510507008', '45', 
'args', 'args', 2, 1, 0, '{"required":"0","defaultValue":"","placeholder":"args 
json","rule":""}', '2023-11-07 11:06:00.803', '2023-11-07 13:31:41.048');
 INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507009', '45', 
'sampleRate', 'sampleRate', 2, 3, 4, 
'{"required":"0","defaultValue":"1","placeholder":"optional,0,0.01~1"}', 
'2022-07-04 22:00:00', '2022-07-04 22:00:00');
 INSERT INTO "public"."plugin_handle" VALUES ('1722804548510507010', '45', 
'sampleRate', 'sampleRate', 2, 1, 2, 
'{"required":"0","defaultValue":"","placeholder":"optional,0,0.01~1"}', 
'2022-07-04 22:00:00', '2022-07-04 22:00:00');
 
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql 
b/db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
index 3b9e2a99e1..12aca0b15a 100755
--- a/db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
@@ -170,6 +170,22 @@ INSERT INTO `plugin_handle` VALUES ('1899702411294539776', 
'51', 'timeWindowSeco
 INSERT INTO `plugin_handle` VALUES ('1899702472330051584', '51', 'keyName', 
'keyName', 2, 2, 2, '{\"required\":\"0\",\"rule\":\"\"}', '2025-03-12 
06:02:18.707', '2025-03-12 06:02:18.707');
 INSERT INTO `plugin_handle` VALUES ('1899702529972371456', '51', 'tokenLimit', 
'tokenLimit', 1, 2, 3, '{\"required\":\"0\",\"rule\":\"\"}', '2025-03-12 
06:02:32.450', '2025-03-12 06:02:32.450');
 
+DELETE FROM `plugin_handle` WHERE `plugin_id` = '8';
+
+INSERT INTO `plugin_handle` VALUES ('1821435546642157568', '45', 'host', 
'host', 2, 1, 0, '{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', 
'2023-11-06 15:53:11.704', '2023-11-07 13:31:41.010');
+INSERT INTO `plugin_handle` VALUES ('1821435708743618560', '45', 'port', 
'port', 1, 1, 0, '{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', 
'2023-11-06 15:53:50.352', '2023-11-07 13:31:41.016');
+INSERT INTO `plugin_handle` VALUES ('1821436368046264320', '45', 'password', 
'password', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:56:27.541', '2023-11-07 13:31:41.021');
+INSERT INTO `plugin_handle` VALUES ('1821436500343001088', '45', 'username', 
'username', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:56:59.084', '2023-11-07 13:31:41.025');
+INSERT INTO `plugin_handle` VALUES ('1821436639635836928', '45', 
'exchangeName', 'exchangeName', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:57:32.295', '2023-11-07 13:31:41.030');
+INSERT INTO `plugin_handle` VALUES ('1821436745583955968', '45', 'queueName', 
'queueName', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:57:57.553', '2023-11-07 13:31:41.035');
+INSERT INTO `plugin_handle` VALUES ('1821509996347617280', '45', 'routingKey', 
'routingKey', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
20:49:01.897', '2023-11-07 13:31:41.039');
+INSERT INTO `plugin_handle` VALUES ('1821725585461706752', '45', 
'virtualHost', 'virtualHost', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"/\",\"rule\":\"\"}', '2023-11-07 
11:05:42.350', '2023-11-07 13:31:41.044');
+INSERT INTO `plugin_handle` VALUES ('1821725662875975680', '45', 
'exchangeType', 'exchangeType', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"direct\",\"rule\":\"\"}', '2023-11-07 
11:06:00.803', '2023-11-07 13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804180904927232', '45', 'durable', 
'durable', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"true\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804370575548416', '45', 'exclusive', 
'exclusive', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804461256400896', '45', 'autoDelete', 
'autoDelete', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804548510507008', '45', 'args', 
'args', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":"",\"placeholder\":"",\"rule\":\"\"}', 
'2023-1\1-07 11:06:00.803', '2023-11-07 13:31:41.048');
+
 INSERT INTO `plugin_handle` VALUES ('1729402613204172859', '30', 'cacheType', 
'cacheType', 3, 1, 1, 
'{\"required\":\"1\",\"defaultValue\":\"memory\",\"rule\":\"\"}', '2022-05-25 
18:02:53', '2022-05-25 18:02:53');
 INSERT INTO `plugin_handle` VALUES ('1729402613204172860', '30', 'database', 
'database', 1, 1, 2, 
'{\"required\":\"0\",\"defaultValue\":\"0\",\"rule\":\"\"}', '2022-05-25 
18:02:53', '2022-05-25 18:02:53');
 INSERT INTO `plugin_handle` VALUES ('1729402613204172861', '30', 'master', 
'master', 2, 1, 3, '{\"required\":\"0\",\"rule\":\"\"}', '2022-05-25 18:02:53', 
'2022-05-25 18:02:53');
@@ -245,7 +261,7 @@ INSERT INTO `permission` VALUES ('1697146861569542759', 
'1346358560427216896', '
 INSERT INTO `permission` VALUES ('1697146861569542760', '1346358560427216896', 
'1844026199075534869', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
 
 INSERT INTO `plugin_handle` VALUES ('1907263843073671168', '61', 
'description', 'description', 2, 2, 0, 
'{\"required\":\"1\",\"rule\":\"\",\"placeholder\":\"tools description\"}', 
'2025-03-12 06:02:32.450', '2025-03-12 06:02:32.450');
-DELETE FROM `plugin_handle` WHERE `plugin_id` = '8';
+
 INSERT INTO `plugin_handle` VALUES ('1529402613204173925', '6', 'registry', 
'registry', 2, 1, 0, '{\"required\":\"0\",\"rule\":\"\"}', '2025-02-27 
17:20:50.233', '2025-02-27 17:20:50.233');
 UPDATE `plugin_handle` SET ext_obj = '{\"required\":\"0\",\"rule\":\"\"}' 
WHERE plugin_id = '6' AND label = 'ip:port' AND data_type = 2;
 
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-ob.sql 
b/db/upgrade/2.7.0-upgrade-2.7.1-ob.sql
index 8c96fd55c9..70257bcd8a 100755
--- a/db/upgrade/2.7.0-upgrade-2.7.1-ob.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-ob.sql
@@ -165,6 +165,22 @@ INSERT INTO `plugin_handle` VALUES ('1899702411294539776', 
'51', 'timeWindowSeco
 INSERT INTO `plugin_handle` VALUES ('1899702472330051584', '51', 'keyName', 
'keyName', 2, 2, 2, '{\"required\":\"0\",\"rule\":\"\"}', '2025-03-12 
06:02:18.707', '2025-03-12 06:02:18.707');
 INSERT INTO `plugin_handle` VALUES ('1899702529972371456', '51', 'tokenLimit', 
'tokenLimit', 1, 2, 3, '{\"required\":\"0\",\"rule\":\"\"}', '2025-03-12 
06:02:32.450', '2025-03-12 06:02:32.450');
 
+DELETE FROM `plugin_handle` WHERE `plugin_id` = '8';
+
+INSERT INTO `plugin_handle` VALUES ('1821435546642157568', '45', 'host', 
'host', 2, 1, 0, '{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', 
'2023-11-06 15:53:11.704', '2023-11-07 13:31:41.010');
+INSERT INTO `plugin_handle` VALUES ('1821435708743618560', '45', 'port', 
'port', 1, 1, 0, '{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', 
'2023-11-06 15:53:50.352', '2023-11-07 13:31:41.016');
+INSERT INTO `plugin_handle` VALUES ('1821436368046264320', '45', 'password', 
'password', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:56:27.541', '2023-11-07 13:31:41.021');
+INSERT INTO `plugin_handle` VALUES ('1821436500343001088', '45', 'username', 
'username', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:56:59.084', '2023-11-07 13:31:41.025');
+INSERT INTO `plugin_handle` VALUES ('1821436639635836928', '45', 
'exchangeName', 'exchangeName', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:57:32.295', '2023-11-07 13:31:41.030');
+INSERT INTO `plugin_handle` VALUES ('1821436745583955968', '45', 'queueName', 
'queueName', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
15:57:57.553', '2023-11-07 13:31:41.035');
+INSERT INTO `plugin_handle` VALUES ('1821509996347617280', '45', 'routingKey', 
'routingKey', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"\",\"rule\":\"\"}', '2023-11-06 
20:49:01.897', '2023-11-07 13:31:41.039');
+INSERT INTO `plugin_handle` VALUES ('1821725585461706752', '45', 
'virtualHost', 'virtualHost', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"/\",\"rule\":\"\"}', '2023-11-07 
11:05:42.350', '2023-11-07 13:31:41.044');
+INSERT INTO `plugin_handle` VALUES ('1821725662875975680', '45', 
'exchangeType', 'exchangeType', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"direct\",\"rule\":\"\"}', '2023-11-07 
11:06:00.803', '2023-11-07 13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804180904927232', '45', 'durable', 
'durable', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"true\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804370575548416', '45', 'exclusive', 
'exclusive', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804461256400896', '45', 'autoDelete', 
'autoDelete', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":\"false\",\"placeholder\":\"true / 
false\",\"rule\":\"/^(true|false)$/\"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO `plugin_handle` VALUES ('1822804548510507008', '45', 'args', 
'args', 2, 1, 0, 
'{\"required\":\"0\",\"defaultValue\":"",\"placeholder\":"",\"rule\":\"\"}', 
'2023-1\1-07 11:06:00.803', '2023-11-07 13:31:41.048');
+
 INSERT INTO `plugin_handle` VALUES ('1729402613204172859', '30', 'cacheType', 
'cacheType', 3, 1, 1, 
'{\"required\":\"1\",\"defaultValue\":\"memory\",\"rule\":\"\"}', '2022-05-25 
18:02:53', '2022-05-25 18:02:53');
 INSERT INTO `plugin_handle` VALUES ('1729402613204172860', '30', 'database', 
'database', 1, 1, 2, 
'{\"required\":\"0\",\"defaultValue\":\"0\",\"rule\":\"\"}', '2022-05-25 
18:02:53', '2022-05-25 18:02:53');
 INSERT INTO `plugin_handle` VALUES ('1729402613204172861', '30', 'master', 
'master', 2, 1, 3, '{\"required\":\"0\",\"rule\":\"\"}', '2022-05-25 18:02:53', 
'2022-05-25 18:02:53');
@@ -213,7 +229,6 @@ INSERT INTO `permission` VALUES ('1697146860569742758', 
'1346358560427216896', '
 INSERT INTO `permission` VALUES ('1697146860569742759', '1346358560427216896', 
'1844026099075564867', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
 INSERT INTO `permission` VALUES ('1697146860569742760', '1346358560427216896', 
'1844026099075564868', '2023-08-31 07:18:37', '2023-08-31 07:18:37');
 
-DELETE FROM `plugin_handle` WHERE `plugin_id` = '8';
 INSERT INTO `plugin_handle` VALUES ('1529402613204173925', '6', 'registry', 
'registry', 2, 1, 0, '{\"required\":\"0\",\"rule\":\"\"}', '2025-02-27 
17:20:50.233', '2025-02-27 17:20:50.233');
 UPDATE `plugin_handle` SET ext_obj = '{\"required\":\"0\",\"rule\":\"\"}' 
WHERE plugin_id = '6' AND label = 'ip:port' AND data_type = 2;
 
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-og.sql 
b/db/upgrade/2.7.0-upgrade-2.7.1-og.sql
index 9defc8c350..72c6391fc6 100644
--- a/db/upgrade/2.7.0-upgrade-2.7.1-og.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-og.sql
@@ -179,6 +179,22 @@ INSERT INTO "public"."plugin_handle" VALUES 
('1899702411294539776', '51', 'timeW
 INSERT INTO "public"."plugin_handle" VALUES ('1899702472330051584', '51', 
'keyName', 'keyName', 2, 2, 2, '{"required":"0","rule":""}', '2025-03-12 
06:02:18.707', '2025-03-12 06:02:18.707');
 INSERT INTO "public"."plugin_handle" VALUES ('1899702529972371456', '51', 
'tokenLimit', 'tokenLimit', 1, 2, 3, '{"required":"0","rule":""}', '2025-03-12 
06:02:32.450', '2025-03-12 06:02:32.450');
 
+DELETE FROM `plugin_handle` WHERE `plugin_id` = '8';
+
+INSERT INTO "public"."plugin_handle" VALUES ('1821435546642157568', '45', 
'host', 'host', 2, 1, 0, '{"required":"0","defaultValue":"","rule":""}', 
'2023-11-06 15:53:11.704', '2023-11-07 13:31:41.010');
+INSERT INTO "public"."plugin_handle" VALUES ('1821435708743618560', '45', 
'port', 'port', 1, 1, 0, '{"required":"0","defaultValue":"","rule":""}', 
'2023-11-06 15:53:50.352', '2023-11-07 13:31:41.016');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436368046264320', '45', 
'password', 'password', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:56:27.541', 
'2023-11-07 13:31:41.021');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436500343001088', '45', 
'username', 'username', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:56:59.084', 
'2023-11-07 13:31:41.025');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436639635836928', '45', 
'exchangeName', 'exchangeName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:57:32.295', 
'2023-11-07 13:31:41.030');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436745583955968', '45', 
'queueName', 'queueName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:57:57.553', 
'2023-11-07 13:31:41.035');
+INSERT INTO "public"."plugin_handle" VALUES ('1821509996347617280', '45', 
'routingKey', 'routingKey', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 20:49:01.897', 
'2023-11-07 13:31:41.039');
+INSERT INTO "public"."plugin_handle" VALUES ('1821725585461706752', '45', 
'virtualHost', 'virtualHost', 2, 1, 0, 
'{"required":"0","defaultValue":"/","rule":""}', '2023-11-07 11:05:42.350', 
'2023-11-07 13:31:41.044');
+INSERT INTO "public"."plugin_handle" VALUES ('1821725662875975680', '45', 
'exchangeType', 'exchangeType', 2, 1, 0, 
'{"required":"0","defaultValue":"direct","rule":""}', '2023-11-07 
11:06:00.803', '2023-11-07 13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804180904927232', '45', 
'durable', 'durable', 2, 1, 0, 
'{"required":"0","defaultValue":"true","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804370575548416', '45', 
'exclusive', 'exclusive', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804461256400896', '45', 
'autoDelete', 'autoDelete', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804548510507008', '45', 
'args', 'args', 2, 1, 0, '{"required":"0","defaultValue":"","placeholder":"args 
json","rule":""}', '2023-11-07 11:06:00.803', '2023-11-07 13:31:41.048');
+
 INSERT INTO "public"."plugin_handle" VALUES ('1529403902783524902', '30', 
'cacheType', 'cacheType', 3, 1, 1, 
'{"required":"1","defaultValue":"memory","rule":""}', '2022-05-25 18:08:01', 
'2022-05-25 18:08:01');
 INSERT INTO "public"."plugin_handle" VALUES ('1729403902783524903', '30', 
'database', 'database', 1, 1, 2, 
'{"required":"0","defaultValue":"0","rule":""}', '2022-05-25 18:08:01', 
'2022-05-25 18:08:01');
 INSERT INTO "public"."plugin_handle" VALUES ('1729403902783524904', '30', 
'master', 'master', 2, 1, 3, '{"required":"0","rule":""}', '2022-05-25 
18:08:01', '2022-05-25 18:08:01');
@@ -228,7 +244,6 @@ INSERT INTO "public"."permission" VALUES 
('1697146860569742758', '13463585604272
 INSERT INTO "public"."permission" VALUES ('1697146860569742759', 
'1346358560427216896', '1844026099075564867', '2023-08-31 07:18:37', 
'2023-08-31 07:18:37');
 INSERT INTO "public"."permission" VALUES ('1697146860569742760', 
'1346358560427216896', '1844026099075564868', '2023-08-31 07:18:37', 
'2023-08-31 07:18:37');
 
-DELETE FROM `plugin_handle` WHERE `plugin_id` = '8';
 INSERT INTO "public"."plugin_handle" VALUES ('1529402613204173925', '6', 
'registry', 'registry', 2, 1, 0, '{"required":"0","rule":""}', '2025-02-27 
17:20:50.233', '2025-02-27 17:20:50.233');
 UPDATE "public"."plugin_handle" SET ext_obj = '{"required":"0","rule":""}' 
WHERE plugin_id = '6' AND label = 'ip:port' AND data_type = 2;
 
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql 
b/db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql
index 0d59b21efd..e0762e9768 100755
--- a/db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-oracle.sql
@@ -386,6 +386,47 @@ VALUES ('1899702529972371456', '51', 'tokenLimit', 
'tokenLimit', 1, 2, 3, '{"req
 INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
 VALUES ('1529402613204173926', '6', 'registry', 'registry', 2, 1, 0, 
'{"required":"0","placeholder":"","rule":""}');
 
+delete from plugin_handle where plugin_id = '8';
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821435546642157568', '45', 'host', 'host', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821435708743618560', '45', 'port', 'port', 1, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821436368046264320', '45', 'password', 'password', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821436500343001088', '45', 'username', 'username', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821436639635836928', '45', 'exchangeName', 'exchangeName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821436745583955968', '45', 'queueName', 'queueName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821509996347617280', '45', 'routingKey', 'routingKey', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821725585461706752', '45', 'virtualHost', 'virtualHost', 2, 1, 0, 
'{"required":"0","defaultValue":"/","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1821725662875975680', '45', 'exchangeType', 'exchangeType', 2, 1, 0, 
'{"required":"0","defaultValue":"direct","rule":""}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1822804180904927232', '45', 'durable', 'durable', 2, 1, 0, 
'{"required":"0","defaultValue":"true","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1822804370575548416', '45', 'exclusive', 'exclusive', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1822804461256400896', '45', 'autoDelete', 'autoDelete', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+
+insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
+values ('1822804548510507008', '45', 'args', 'args', 2, 1, 0, 
'{"required":"0","defaultValue":"","placeholder":"","rule":"/^\\s*(\\{.*\\}|\\[.*\\])\\s*$/"}');
+
 insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(plugin_handle(plugin_id, field, type)) 
*/ into plugin_handle (ID, PLUGIN_ID, FIELD, LABEL, DATA_TYPE, TYPE, SORT, 
EXT_OBJ)
 values ('1718229897214468163', '30', 'cacheType', 'cacheType', 3, 1, 1, 
'{"required":"1","defaultValue":"memory","rule":""}');
 
diff --git a/db/upgrade/2.7.0-upgrade-2.7.1-pg.sql 
b/db/upgrade/2.7.0-upgrade-2.7.1-pg.sql
index a1949b578b..beabbef9f9 100755
--- a/db/upgrade/2.7.0-upgrade-2.7.1-pg.sql
+++ b/db/upgrade/2.7.0-upgrade-2.7.1-pg.sql
@@ -179,6 +179,22 @@ INSERT INTO "public"."plugin_handle" VALUES 
('1899702529972371456', '51', 'token
 INSERT INTO "public"."plugin_handle" VALUES ('1529402613204173925', '6', 
'registry', 'registry', 2, 1, 0, '{"required":"0","rule":""}', '2025-02-27 
17:20:50.233', '2025-02-27 17:20:50.233');
 UPDATE "public"."plugin_handle" SET ext_obj = '{"required":"0","rule":""}' 
WHERE plugin_id = '6' AND label = 'ip:port' AND data_type = 2;
 
+DELETE FROM "public"."plugin_handle" WHERE plugin_id = '8';
+
+INSERT INTO "public"."plugin_handle" VALUES ('1821435546642157568', '45', 
'host', 'host', 2, 1, 0, '{"required":"0","defaultValue":"","rule":""}', 
'2023-11-06 15:53:11.704', '2023-11-07 13:31:41.010');
+INSERT INTO "public"."plugin_handle" VALUES ('1821435708743618560', '45', 
'port', 'port', 1, 1, 0, '{"required":"0","defaultValue":"","rule":""}', 
'2023-11-06 15:53:50.352', '2023-11-07 13:31:41.016');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436368046264320', '45', 
'password', 'password', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:56:27.541', 
'2023-11-07 13:31:41.021');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436500343001088', '45', 
'username', 'username', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:56:59.084', 
'2023-11-07 13:31:41.025');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436639635836928', '45', 
'exchangeName', 'exchangeName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:57:32.295', 
'2023-11-07 13:31:41.030');
+INSERT INTO "public"."plugin_handle" VALUES ('1821436745583955968', '45', 
'queueName', 'queueName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 15:57:57.553', 
'2023-11-07 13:31:41.035');
+INSERT INTO "public"."plugin_handle" VALUES ('1821509996347617280', '45', 
'routingKey', 'routingKey', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}', '2023-11-06 20:49:01.897', 
'2023-11-07 13:31:41.039');
+INSERT INTO "public"."plugin_handle" VALUES ('1821725585461706752', '45', 
'virtualHost', 'virtualHost', 2, 1, 0, 
'{"required":"0","defaultValue":"/","rule":""}', '2023-11-07 11:05:42.350', 
'2023-11-07 13:31:41.044');
+INSERT INTO "public"."plugin_handle" VALUES ('1821725662875975680', '45', 
'exchangeType', 'exchangeType', 2, 1, 0, 
'{"required":"0","defaultValue":"direct","rule":""}', '2023-11-07 
11:06:00.803', '2023-11-07 13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804180904927232', '45', 
'durable', 'durable', 2, 1, 0, 
'{"required":"0","defaultValue":"true","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804370575548416', '45', 
'exclusive', 'exclusive', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804461256400896', '45', 
'autoDelete', 'autoDelete', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}', '2023-11-07 11:06:00.803', '2023-11-07 
13:31:41.048');
+INSERT INTO "public"."plugin_handle" VALUES ('1822804548510507008', '45', 
'args', 'args', 2, 1, 0, '{"required":"0","defaultValue":"","placeholder":"args 
json","rule":""}', '2023-11-07 11:06:00.803', '2023-11-07 13:31:41.048');
+
 INSERT INTO "public"."plugin_handle" VALUES ('1729403902783524902', '30', 
'cacheType', 'cacheType', 3, 1, 1, 
'{"required":"1","defaultValue":"memory","rule":""}', '2022-05-25 18:08:01', 
'2022-05-25 18:08:01');
 INSERT INTO "public"."plugin_handle" VALUES ('1729403902783524903', '30', 
'database', 'database', 1, 1, 2, 
'{"required":"0","defaultValue":"0","rule":""}', '2022-05-25 18:08:01', 
'2022-05-25 18:08:01');
 INSERT INTO "public"."plugin_handle" VALUES ('1729403902783524904', '30', 
'master', 'master', 2, 1, 3, '{"required":"0","rule":""}', '2022-05-25 
18:08:01', '2022-05-25 18:08:01');
@@ -227,8 +243,6 @@ INSERT INTO "public"."permission" VALUES 
('1697146860569742758', '13463585604272
 INSERT INTO "public"."permission" VALUES ('1697146860569742759', 
'1346358560427216896', '1844026099075564867', '2023-08-31 07:18:37', 
'2023-08-31 07:18:37');
 INSERT INTO "public"."permission" VALUES ('1697146860569742760', 
'1346358560427216896', '1844026099075564868', '2023-08-31 07:18:37', 
'2023-08-31 07:18:37');
 
-DELETE FROM "public"."plugin_handle" WHERE plugin_id = '8';
-
 INSERT INTO "public"."plugin_handle" VALUES ('1829403902783524879', '17', 
'registerProtocol', 'registerProtocol', 2, 1, 0, 
'{"required":"0","defaultValue":"","placeholder":"registerProtocol","rule":""}',
 '2022-05-25 18:08:01', '2022-05-25 18:08:01');
 INSERT INTO "public"."plugin_handle" VALUES ('1878997557628272641', '17', 
'registerAddress', 'registerAddress', 2, 1, 1, 
'{"required":"0","defaultValue":"","placeholder":"registerAddress","rule":""}', 
'2022-05-25 18:08:01', '2022-05-25 18:08:01');
 INSERT INTO "public"."plugin_handle" VALUES ('1829403902783524880', '17', 
'corethreads', 'corethreads', 1, 1, 2, 
'{"required":"0","defaultValue":"","placeholder":"corethreads","rule":""}', 
'2022-05-25 18:08:01', '2022-05-25 18:08:01');
diff --git a/shenyu-admin/src/main/resources/sql-script/h2/schema.sql 
b/shenyu-admin/src/main/resources/sql-script/h2/schema.sql
index 804e8ea776..96ceda58df 100644
--- a/shenyu-admin/src/main/resources/sql-script/h2/schema.sql
+++ b/shenyu-admin/src/main/resources/sql-script/h2/schema.sql
@@ -945,6 +945,20 @@ INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,
 INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1722804461256400896', '45', 'autoDelete', 'autoDelete', 2, 3, 0, 
'{"required":"1","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
 INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1722804548510507008', '45', 'args', 'args', 2, 3, 0, 
'{"required":"0","defaultValue":"","placeholder":"","rule":""}');
 
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821435546642157568', '45', 'host', 'host', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821435708743618560', '45', 'port', 'port', 1, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821436368046264320', '45', 'password', 'password', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821436500343001088', '45', 'username', 'username', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821436639635836928', '45', 'exchangeName', 'exchangeName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821436745583955968', '45', 'queueName', 'queueName', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821509996347617280', '45', 'routingKey', 'routingKey', 2, 1, 0, 
'{"required":"0","defaultValue":"","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821725585461706752', '45', 'virtualHost', 'virtualHost', 2, 1, 0, 
'{"required":"0","defaultValue":"/","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1821725662875975680', '45', 'exchangeType', 'exchangeType', 2, 1, 0, 
'{"required":"0","defaultValue":"direct","rule":""}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1822804180904927232', '45', 'durable', 'durable', 2, 1, 0, 
'{"required":"0","defaultValue":"true","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1822804370575548416', '45', 'exclusive', 'exclusive', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1822804461256400896', '45', 'autoDelete', 'autoDelete', 2, 1, 0, 
'{"required":"0","defaultValue":"false","placeholder":"true / 
false","rule":"/^(true|false)$/"}');
+INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1822804548510507008', '45', 'args', 'args', 2, 1, 0, 
'{"required":"0","defaultValue":"","placeholder":"","rule":""}');
+
 INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1722804548510507009', '33', 'sampleRate', 'sampleRate', 2, 1, 2, 
'{"required":"0","defaultValue":"","placeholder":"optional,0,0.01~1"}');
 
 INSERT IGNORE INTO plugin_handle (`id`, 
`plugin_id`,`field`,`label`,`data_type`,`type`,`sort`,`ext_obj`) VALUES 
('1722804548510507010', '45', 'sampleRate', 'sampleRate', 2, 3, 4, 
'{"required":"0","defaultValue":"1","placeholder":"optional,0,0.01~1"}');
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/AbstractLoggingPlugin.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/AbstractLoggingPlugin.java
index 0374f1af73..ae704e5cd2 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/AbstractLoggingPlugin.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/AbstractLoggingPlugin.java
@@ -47,6 +47,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 
+
 /**
  * abstract logging plugin.
  */
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/collector/AbstractLogCollector.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/collector/AbstractLogCollector.java
index 254c2738a1..78f5642f5b 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/collector/AbstractLogCollector.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/collector/AbstractLogCollector.java
@@ -17,6 +17,7 @@
 
 package org.apache.shenyu.plugin.logging.common.collector;
 
+import com.google.common.collect.Maps;
 import org.apache.shenyu.common.concurrent.MemorySafeTaskQueue;
 import org.apache.shenyu.common.concurrent.ShenyuThreadFactory;
 import org.apache.shenyu.common.concurrent.ShenyuThreadPoolExecutor;
@@ -32,8 +33,10 @@ import 
org.apache.shenyu.plugin.logging.desensitize.api.matcher.KeyWordMatch;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.BlockingQueue;
@@ -57,6 +60,10 @@ public abstract class AbstractLogCollector<T extends 
AbstractLogConsumeClient<?,
 
     private BlockingQueue<L> bufferQueue;
 
+    private final Map<String, BlockingQueue<L>> bufferQueueS = 
Maps.newConcurrentMap();
+
+    private final Map<String, Long> lastPushTimeS = Maps.newConcurrentMap();
+
     private long lastPushTime;
 
     private final AtomicBoolean started = new AtomicBoolean(true);
@@ -78,11 +85,19 @@ public abstract class AbstractLogCollector<T extends 
AbstractLogConsumeClient<?,
 
     @Override
     public void collect(final L log) {
-        if (Objects.isNull(log) || Objects.isNull(getLogConsumeClient())) {
+        if (Objects.isNull(log) || 
Objects.isNull(getLogConsumeClient(log.getSelectorId()))) {
             return;
         }
-        if (bufferQueue.size() < bufferSize) {
-            bufferQueue.add(log);
+        if (getMultiClient()) {
+            String selectorId = log.getSelectorId();
+            BlockingQueue<L> bufferQueue = 
bufferQueueS.computeIfAbsent(selectorId, bufferQueueS -> initQueue(selectorId));
+            if (bufferQueue.size() < bufferSize) {
+                bufferQueue.add(log);
+            }
+        } else {
+            if (bufferQueue.size() < bufferSize) {
+                bufferQueue.add(log);
+            }
         }
     }
 
@@ -100,19 +115,19 @@ public abstract class AbstractLogCollector<T extends 
AbstractLogConsumeClient<?,
             int diffTimeMSForPush = 100;
             try {
                 List<L> logs = new ArrayList<>();
-                int size = bufferQueue.size();
-                long time = System.currentTimeMillis();
-                long timeDiffMs = time - lastPushTime;
                 int batchSize = 100;
-                if (size >= batchSize || timeDiffMs > diffTimeMSForPush) {
-                    bufferQueue.drainTo(logs, batchSize);
-                    AbstractLogConsumeClient<?, L> logCollectClient = 
getLogConsumeClient();
-                    if (Objects.nonNull(logCollectClient)) {
-                        logCollectClient.consume(logs);
-                    }
-                    lastPushTime = time;
+                if (getMultiClient()) {
+                    bufferQueueS.forEach((selectorId, bufferQueue) -> {
+                        List<L> logsS = new ArrayList<>();
+                        Long lastPushTime = lastPushTimeS.get(selectorId);
+                        try {
+                            processBufferQueue(bufferQueue, batchSize, 
diffTimeMSForPush, logsS, lastPushTime, selectorId);
+                        } catch (Exception e) {
+                            throw new RuntimeException(e);
+                        }
+                    });
                 } else {
-                    ThreadUtils.sleep(TimeUnit.MILLISECONDS, 
diffTimeMSForPush);
+                    processBufferQueue(bufferQueue, batchSize, 
diffTimeMSForPush, logs, lastPushTime);
                 }
             } catch (Throwable t) {
                 LOG.error("DefaultLogCollector collect log error", t);
@@ -121,6 +136,51 @@ public abstract class AbstractLogCollector<T extends 
AbstractLogConsumeClient<?,
         }
     }
 
+    private BlockingQueue<L> initQueue(final String selectorId) {
+        bufferSize = getLogCollectConfig().getBufferQueueSize();
+        bufferQueue = new LinkedBlockingDeque<>(bufferSize);
+        lastPushTimeS.put(selectorId, System.currentTimeMillis());
+        return bufferQueue;
+    }
+
+    private void processBufferQueue(final BlockingQueue<L> bufferQueue, final 
int batchSize,
+                                    final int diffTimeMSForPush, final List<L> 
logs,
+                                    final Long lastPushTime, final String 
selectorId) throws Exception {
+        int size = bufferQueue.size();
+        long time = System.currentTimeMillis();
+        long timeDiffMs = time - lastPushTime;
+
+        if (size >= batchSize || timeDiffMs > diffTimeMSForPush) {
+            bufferQueue.drainTo(logs, batchSize);
+            AbstractLogConsumeClient<?, L> logCollectClient = 
getLogConsumeClient(selectorId);
+            if (Objects.nonNull(logCollectClient)) {
+                logCollectClient.consume(logs);
+            }
+            lastPushTimeS.put(selectorId, time);
+        } else {
+            ThreadUtils.sleep(TimeUnit.MILLISECONDS, diffTimeMSForPush);
+        }
+    }
+
+    private void processBufferQueue(final BlockingQueue<L> bufferQueue, final 
int batchSize,
+                                    final int diffTimeMSForPush, final List<L> 
logs,
+                                    final Long lastPushTime) throws Exception {
+        int size = bufferQueue.size();
+        long time = System.currentTimeMillis();
+        long timeDiffMs = time - lastPushTime;
+
+        if (size >= batchSize || timeDiffMs > diffTimeMSForPush) {
+            bufferQueue.drainTo(logs, batchSize);
+            AbstractLogConsumeClient<?, L> logCollectClient = 
getLogConsumeClient();
+            if (Objects.nonNull(logCollectClient)) {
+                logCollectClient.consume(logs);
+            }
+            this.lastPushTime = time;
+        } else {
+            ThreadUtils.sleep(TimeUnit.MILLISECONDS, diffTimeMSForPush);
+        }
+    }
+
     private void desensitizeShenyuRequestLog(final L logInfo, final 
KeyWordMatch keyWordMatch, final String desensitizedAlg) {
         
logInfo.setClientIp(desensitizeForSingleWord(GenericLoggingConstant.CLIENT_IP, 
logInfo.getClientIp(), keyWordMatch, desensitizedAlg));
         
logInfo.setTimeLocal(desensitizeForSingleWord(GenericLoggingConstant.TIME_LOCAL,
 logInfo.getTimeLocal(), keyWordMatch, desensitizedAlg));
@@ -158,6 +218,24 @@ public abstract class AbstractLogCollector<T extends 
AbstractLogConsumeClient<?,
      */
     protected abstract T getLogConsumeClient();
 
+    /**
+     * get log consume client by selectorId.
+     *
+     * @return log consume client
+     */
+    protected T getLogConsumeClient(final String path) {
+        return getLogConsumeClient();
+    }
+
+    /**
+     * getMultiClient.
+     *
+     * @return multiClient
+     */
+    protected boolean getMultiClient() {
+        return false;
+    }
+
     /**
      * get log collect config.
      *
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/collector/LogCollector.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/collector/LogCollector.java
index 4bd0588b2c..c1ec216534 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/collector/LogCollector.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-common/src/main/java/org/apache/shenyu/plugin/logging/common/collector/LogCollector.java
@@ -45,4 +45,5 @@ public interface LogCollector<L extends ShenyuRequestLog> 
extends AutoCloseable
      * @param log access log
      */
     void collect(L log);
+
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/cache/RabbitmqClientCache.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/cache/RabbitmqClientCache.java
new file mode 100644
index 0000000000..35cafe569d
--- /dev/null
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/cache/RabbitmqClientCache.java
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.plugin.logging.rabbitmq.cache;
+
+import com.google.common.collect.Maps;
+import org.apache.shenyu.common.utils.Singleton;
+import 
org.apache.shenyu.plugin.logging.rabbitmq.client.RabbitmqLogCollectClient;
+import 
org.apache.shenyu.plugin.logging.rabbitmq.config.RabbitmqLogCollectConfig;
+
+import java.util.Map;
+import java.util.Objects;
+
+import static org.apache.shenyu.plugin.api.ShenyuPlugin.LOG;
+
+/**
+ * rabbitmq client cache.
+ */
+public class RabbitmqClientCache {
+
+    private static final Map<String, RabbitmqLogCollectClient> CLIENT_CACHE = 
Maps.newConcurrentMap();
+
+    public RabbitmqClientCache() {
+    }
+
+    /**
+     * Gets instance.
+     *
+     * @return the instance
+     */
+    public static RabbitmqClientCache getInstance() {
+        return ApplicationConfigCacheInstance.INSTANCE;
+    }
+
+    /**
+     * Init client.
+     *
+     * @param selectorId selectorId
+     * @param rabbitmqLogUpstream rabbitmqLogUpstream
+     */
+    public void initRabbitmqClient(final String selectorId, final 
RabbitmqLogCollectConfig.LogApiConfig rabbitmqLogUpstream) {
+        RabbitmqLogCollectConfig.RabbitmqLogConfig globalLogConfig = 
Singleton.INST.get(RabbitmqLogCollectConfig.RabbitmqLogConfig.class);
+        if (Objects.nonNull(rabbitmqLogUpstream) && 
Objects.nonNull(rabbitmqLogUpstream.getHost())) {
+            globalLogConfig = copyConfig(rabbitmqLogUpstream);
+        }
+        RabbitmqLogCollectClient rabbitmqLogCollectClient = new 
RabbitmqLogCollectClient();
+        rabbitmqLogCollectClient.initClient(globalLogConfig);
+        CLIENT_CACHE.put(selectorId, rabbitmqLogCollectClient);
+    }
+
+    /**
+     * Get the client.
+     *
+     * @param path path
+     * @return Channel channel
+     */
+    public RabbitmqLogCollectClient getRabbitmqClient(final String path) {
+        return CLIENT_CACHE.get(path);
+    }
+
+    /**
+     * getClientCache.
+     *
+     * @return clientCache
+     */
+    public Map<String, RabbitmqLogCollectClient> getClientCache() {
+        return CLIENT_CACHE;
+    }
+
+    /**
+     * invalidate the client by selectorId.
+     *
+     * @param path path
+     */
+    public void invalidate(final String path) {
+        RabbitmqLogCollectClient client = CLIENT_CACHE.get(path);
+        if (Objects.nonNull(client)) {
+            client.close();
+            CLIENT_CACHE.remove(path);
+        }
+    }
+
+    /**
+     * invalidate all client.
+     */
+    public void invalidateAll() {
+        if (CLIENT_CACHE.isEmpty()) {
+            return;
+        }
+
+        CLIENT_CACHE.values().forEach(client -> {
+            try {
+                if (Objects.nonNull(client)) {
+                    client.close();
+                }
+            } catch (Exception e) {
+                LOG.error("Failed to close client {}", client, e);
+            }
+        });
+
+        CLIENT_CACHE.clear();
+    }
+
+    public static RabbitmqLogCollectConfig.RabbitmqLogConfig copyConfig(final 
RabbitmqLogCollectConfig.LogApiConfig rabbitmqLogUpstream) {
+        RabbitmqLogCollectConfig.RabbitmqLogConfig rabbitmqLogConfig = new 
RabbitmqLogCollectConfig.RabbitmqLogConfig();
+        rabbitmqLogConfig.setQueueName(rabbitmqLogUpstream.getQueueName());
+        rabbitmqLogConfig.setHost(rabbitmqLogUpstream.getHost());
+        rabbitmqLogConfig.setPort(rabbitmqLogUpstream.getPort());
+        rabbitmqLogConfig.setUsername(rabbitmqLogUpstream.getUsername());
+        rabbitmqLogConfig.setPassword(rabbitmqLogUpstream.getPassword());
+        rabbitmqLogConfig.setRoutingKey(rabbitmqLogUpstream.getRoutingKey());
+        
rabbitmqLogConfig.setExchangeName(rabbitmqLogUpstream.getExchangeName());
+        
rabbitmqLogConfig.setExchangeType(rabbitmqLogUpstream.getExchangeType());
+        rabbitmqLogConfig.setVirtualHost(rabbitmqLogUpstream.getVirtualHost());
+        rabbitmqLogConfig.setExclusive(rabbitmqLogUpstream.getExclusive());
+        rabbitmqLogConfig.setDurable(rabbitmqLogUpstream.getDurable());
+        rabbitmqLogConfig.setAutoDelete(rabbitmqLogUpstream.getAutoDelete());
+        rabbitmqLogConfig.setArgs(rabbitmqLogUpstream.getArgs());
+        return rabbitmqLogConfig;
+    }
+
+    /**
+     * The type Application config cache instance.
+     */
+    static final class ApplicationConfigCacheInstance {
+
+        /**
+         * The Instance.
+         */
+        static final RabbitmqClientCache INSTANCE = new RabbitmqClientCache();
+
+        private ApplicationConfigCacheInstance() {
+
+        }
+    }
+}
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/config/RabbitmqLogCollectConfig.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/config/RabbitmqLogCollectConfig.java
index 26a1e580f7..c53c1290f1 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/config/RabbitmqLogCollectConfig.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/config/RabbitmqLogCollectConfig.java
@@ -358,5 +358,324 @@ public class RabbitmqLogCollectConfig {
      * api log config.
      */
     public static class LogApiConfig extends GenericApiConfig {
+
+        private String queueName;
+
+        private String exchangeName;
+
+        private String host;
+
+        private Integer port;
+
+        private String username;
+
+        private String password;
+
+        private String routingKey;
+
+        private String exchangeType;
+
+        private String virtualHost;
+
+        private Boolean durable;
+
+        private Boolean exclusive;
+
+        private Boolean autoDelete;
+
+        private Map<String, Object> args;
+
+        /**
+         * get Durable.
+         *
+         * @return Durable
+         */
+        public Boolean getDurable() {
+            return durable;
+        }
+
+        /**
+         * set Durable.
+         *
+         * @param durable Durable
+         */
+        public void setDurable(final Boolean durable) {
+            this.durable = durable;
+        }
+
+        /**
+         * get Exclusive.
+         *
+         * @return Exclusive
+         */
+        public Boolean getExclusive() {
+            return exclusive;
+        }
+
+        /**
+         * set Exclusive.
+         *
+         * @param exclusive Exclusive
+         */
+        public void setExclusive(final Boolean exclusive) {
+            this.exclusive = exclusive;
+        }
+
+        /**
+         * get AutoDelete.
+         *
+         * @return AutoDelete
+         */
+        public Boolean getAutoDelete() {
+            return autoDelete;
+        }
+
+        /**
+         * set AutoDelete.
+         *
+         * @param autoDelete AutoDelete
+         */
+        public void setAutoDelete(final Boolean autoDelete) {
+            this.autoDelete = autoDelete;
+        }
+
+        /**
+         * get Rabbitmq Args.
+         *
+         * @return Rabbitmq Args
+         */
+        public Map<String, Object> getArgs() {
+            return args;
+        }
+
+        /**
+         * set Rabbitmq Args.
+         *
+         * @param args Rabbitmq Args
+         */
+        public void setArgs(@javax.annotation.Nullable final Map<String, 
Object> args) {
+            this.args = args;
+        }
+
+        /**
+         * get VirtualHost.
+         *
+         * @return VirtualHost
+         */
+        public String getVirtualHost() {
+            return virtualHost;
+        }
+
+        /**
+         * set VirtualHost.
+         *
+         * @param virtualHost VirtualHost
+         */
+        public void setVirtualHost(final String virtualHost) {
+            this.virtualHost = virtualHost;
+        }
+
+        /**
+         * get exchangeType.
+         *
+         * @return exchangeType
+         */
+        public String getExchangeType() {
+            return exchangeType;
+        }
+
+        /**
+         * set exchangeType.
+         *
+         * @param exchangeType exchangeType
+         */
+        public void setExchangeType(final String exchangeType) {
+            this.exchangeType = exchangeType;
+        }
+
+        /**
+         * Get RabbitMQ routingKey.
+         *
+         * @return RabbitMQ routingKey
+         */
+        public String getRoutingKey() {
+            return routingKey;
+        }
+
+        /**
+         * Set RabbitMQ routingKey.
+         *
+         * @param routingKey RabbitMQ routingKey
+         */
+        public void setRoutingKey(final String routingKey) {
+            this.routingKey = routingKey;
+        }
+
+        /**
+         * Get RabbitMQ queue name.
+         *
+         * @return Queue name
+         */
+        public String getQueueName() {
+            return queueName;
+        }
+
+        /**
+         * Set RabbitMQ queue name.
+         *
+         * @param queueName Queue name
+         */
+        public void setQueueName(final String queueName) {
+            this.queueName = queueName;
+        }
+
+        /**
+         * Get RabbitMQ exchange name.
+         *
+         * @return Exchange name
+         */
+        public String getExchangeName() {
+            return exchangeName;
+        }
+
+        /**
+         * Set RabbitMQ exchange name.
+         *
+         * @param exchangeName Exchange name
+         */
+        public void setExchangeName(final String exchangeName) {
+            this.exchangeName = exchangeName;
+        }
+
+        /**
+         * Get RabbitMQ host.
+         *
+         * @return Host
+         */
+        public String getHost() {
+            return host;
+        }
+
+        /**
+         * Set RabbitMQ host.
+         *
+         * @param host Host
+         */
+        public void setHost(final String host) {
+            this.host = host;
+        }
+
+        /**
+         * Get RabbitMQ port.
+         *
+         * @return Port
+         */
+        public Integer getPort() {
+            return port;
+        }
+
+        /**
+         * Set RabbitMQ port.
+         *
+         * @param port Port
+         */
+        public void setPort(final Integer port) {
+            this.port = port;
+        }
+
+        /**
+         * Get RabbitMQ username.
+         *
+         * @return Username
+         */
+        public String getUsername() {
+            return username;
+        }
+
+        /**
+         * Set RabbitMQ username.
+         *
+         * @param username Username
+         */
+        public void setUsername(final String username) {
+            this.username = username;
+        }
+
+        /**
+         * Get RabbitMQ password.
+         *
+         * @return Password
+         */
+        public String getPassword() {
+            return password;
+        }
+
+        /**
+         * Set RabbitMQ password.
+         *
+         * @param password Password
+         */
+        public void setPassword(final String password) {
+            this.password = password;
+        }
+
+        @Override
+        public boolean equals(final Object o) {
+            if (this == o) {
+                return Boolean.TRUE;
+            }
+            if (Objects.isNull(o) || getClass() != o.getClass()) {
+                return Boolean.FALSE;
+            }
+            LogApiConfig that = (LogApiConfig) o;
+
+            return Objects.equals(getRoutingKey(), that.getRoutingKey())
+                    && Objects.equals(getQueueName(), that.getQueueName())
+                    && Objects.equals(getExchangeName(), 
that.getExchangeName())
+                    && Objects.equals(getHost(), that.getHost())
+                    && Objects.equals(getPort(), that.getPort())
+                    && Objects.equals(getExchangeType(), 
that.getExchangeType())
+                    && Objects.equals(getVirtualHost(), that.getVirtualHost())
+                    && Objects.equals(getDurable(), that.getDurable())
+                    && Objects.equals(getExclusive(), that.getExclusive())
+                    && Objects.equals(getAutoDelete(), that.getAutoDelete())
+                    && Objects.equals(getArgs(), that.getArgs());
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(routingKey, queueName, exchangeName, host, 
port, exchangeType, virtualHost, durable, autoDelete, exchangeType, args);
+        }
+
+
+        @Override
+        public String toString() {
+            return "LogApiConfig{"
+                    + ", queueName="
+                    + getQueueName()
+                    + ", exchangeName="
+                    + getExchangeName()
+                    + ", host="
+                    + getHost()
+                    + ", port="
+                    + getPort()
+                    + ", username="
+                    + getUsername()
+                    + ", password="
+                    + getPassword()
+                    + ", routingKey="
+                    + getRoutingKey()
+                    + ", exchangeType="
+                    + getExchangeType()
+                    + ", virtualHost="
+                    + getVirtualHost()
+                    + ", durable="
+                    + getDurable()
+                    + ", autoDelete="
+                    + getAutoDelete()
+                    + ", args"
+                    + getArgs()
+                    + '}';
+        }
     }
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/conllector/RabbitmqLogCollector.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/conllector/RabbitmqLogCollector.java
index ca5c01dc75..c9f77a0068 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/conllector/RabbitmqLogCollector.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/conllector/RabbitmqLogCollector.java
@@ -21,10 +21,13 @@ import 
org.apache.shenyu.plugin.logging.common.collector.AbstractLogCollector;
 import org.apache.shenyu.plugin.logging.common.collector.LogCollector;
 import org.apache.shenyu.plugin.logging.common.entity.ShenyuRequestLog;
 import org.apache.shenyu.plugin.logging.desensitize.api.matcher.KeyWordMatch;
+import org.apache.shenyu.plugin.logging.rabbitmq.cache.RabbitmqClientCache;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.client.RabbitmqLogCollectClient;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.config.RabbitmqLogCollectConfig;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.handler.LoggingRabbitmqPluginDataHandler;
 
+import java.util.Objects;
+
 /**
  * rabbitmq log collector,depend a LogConsumeClient for consume logs.
  */
@@ -51,6 +54,20 @@ public class RabbitmqLogCollector extends 
AbstractLogCollector<RabbitmqLogCollec
         return LoggingRabbitmqPluginDataHandler.getRabbitmqLogCollectClient();
     }
 
+    @Override
+    public RabbitmqLogCollectClient getLogConsumeClient(final String path) {
+        RabbitmqLogCollectClient rabbitmqClient = 
RabbitmqClientCache.getInstance().getRabbitmqClient(path);
+        if (Objects.isNull(rabbitmqClient)) {
+            return getLogConsumeClient();
+        }
+        return rabbitmqClient;
+    }
+
+    @Override
+    protected boolean getMultiClient() {
+        return LoggingRabbitmqPluginDataHandler.getMultiClient();
+    }
+
     @Override
     protected RabbitmqLogCollectConfig.RabbitmqLogConfig getLogCollectConfig() 
{
         return RabbitmqLogCollectConfig.INSTANCE.getRabbitmqLogConfig();
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/handler/LoggingRabbitmqPluginDataHandler.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/handler/LoggingRabbitmqPluginDataHandler.java
index 037cd08fa0..5e6f7ed82d 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/handler/LoggingRabbitmqPluginDataHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/main/java/org/apache/shenyu/plugin/logging/rabbitmq/handler/LoggingRabbitmqPluginDataHandler.java
@@ -17,13 +17,24 @@
 
 package org.apache.shenyu.plugin.logging.rabbitmq.handler;
 
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shenyu.common.dto.PluginData;
+import org.apache.shenyu.common.dto.SelectorData;
 import org.apache.shenyu.common.enums.PluginEnum;
+import org.apache.shenyu.common.utils.GsonUtils;
 import org.apache.shenyu.plugin.logging.common.collector.LogCollector;
 import 
org.apache.shenyu.plugin.logging.common.handler.AbstractLogPluginDataHandler;
+import org.apache.shenyu.plugin.logging.common.utils.LogCollectConfigUtils;
+import org.apache.shenyu.plugin.logging.rabbitmq.cache.RabbitmqClientCache;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.client.RabbitmqLogCollectClient;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.config.RabbitmqLogCollectConfig;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.conllector.RabbitmqLogCollector;
 
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicBoolean;
+
 /**
  * The type logging rabbitmq plugin data handler.
  */
@@ -31,6 +42,8 @@ public class LoggingRabbitmqPluginDataHandler extends 
AbstractLogPluginDataHandl
 
     private static final RabbitmqLogCollectClient RABBITMQ_LOG_COLLECT_CLIENT 
= new RabbitmqLogCollectClient();
 
+    private static final AtomicBoolean MULTI_CLIENT = new AtomicBoolean(false);
+
     /**
      * get rabbitmq log collect client.
      *
@@ -40,6 +53,15 @@ public class LoggingRabbitmqPluginDataHandler extends 
AbstractLogPluginDataHandl
         return RABBITMQ_LOG_COLLECT_CLIENT;
     }
 
+    /**
+     * getMultiClient.
+     *
+     * @return multiClient
+     */
+    public static boolean getMultiClient() {
+        return MULTI_CLIENT.get();
+    }
+
     @Override
     public String pluginNamed() {
         return PluginEnum.LOGGING_RABBITMQ.getName();
@@ -65,4 +87,44 @@ public class LoggingRabbitmqPluginDataHandler extends 
AbstractLogPluginDataHandl
         
RabbitmqLogCollectConfig.INSTANCE.setRabbitmqLogConfig(globalLogConfig);
         RABBITMQ_LOG_COLLECT_CLIENT.initClient(globalLogConfig);
     }
+
+    @Override
+    public void handlerSelector(final SelectorData selectorData) {
+        Map<String, Object> rabbitmqJsonMap = 
GsonUtils.getInstance().convertToMap(selectorData.getHandle());
+        Object hostObj = rabbitmqJsonMap.get("host");
+        if (Objects.isNull(hostObj) || !(hostObj instanceof String) || 
((String) hostObj).trim().isEmpty()) {
+            RabbitmqClientCache.getInstance().invalidate(selectorData.getId());
+            
Optional.ofNullable(RabbitmqClientCache.getInstance().getClientCache())
+                    .filter(Map::isEmpty)
+                    .ifPresent(map -> MULTI_CLIENT.set(false));
+            return;
+        }
+        RabbitmqLogCollectConfig.LogApiConfig nConfig = 
GsonUtils.getInstance().fromJson(selectorData.getHandle(), 
RabbitmqLogCollectConfig.LogApiConfig.class);
+        RabbitmqLogCollectConfig.LogApiConfig oConfig = 
(RabbitmqLogCollectConfig.LogApiConfig) 
getSelectApiConfigMap().get(selectorData.getId());
+        if (Objects.equals(nConfig, oConfig)) {
+            return;
+        }
+        RabbitmqClientCache.getInstance().invalidate(selectorData.getId());
+        if (Objects.isNull(nConfig)) {
+            return;
+        }
+        
RabbitmqClientCache.getInstance().initRabbitmqClient(selectorData.getId(), 
nConfig);
+        MULTI_CLIENT.set(true);
+        if (StringUtils.isNotEmpty(nConfig.getSampleRate())) {
+            
nConfig.setSampler(LogCollectConfigUtils.setSampler(nConfig.getSampleRate()));
+        }
+        getSelectApiConfigMap().put(selectorData.getId(), nConfig);
+    }
+
+    @Override
+    public void removePlugin(final PluginData pluginData) {
+        RabbitmqClientCache.getInstance().invalidateAll();
+        super.removePlugin(pluginData);
+    }
+
+    @Override
+    public void removeSelector(final SelectorData selectorData) {
+        RabbitmqClientCache.getInstance().invalidate(selectorData.getId());
+        super.removeSelector(selectorData);
+    }
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/cache/RabbitmqClientCacheTest.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/cache/RabbitmqClientCacheTest.java
new file mode 100644
index 0000000000..f9137f06c6
--- /dev/null
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/cache/RabbitmqClientCacheTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.plugin.logging.rabbitmq.cache;
+
+import org.apache.shenyu.common.dto.SelectorData;
+import org.apache.shenyu.common.utils.GsonUtils;
+import 
org.apache.shenyu.plugin.logging.rabbitmq.client.RabbitmqLogCollectClient;
+import 
org.apache.shenyu.plugin.logging.rabbitmq.config.RabbitmqLogCollectConfig;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+/**
+ * RabbitmqClientCacheTest.
+ */
+public class RabbitmqClientCacheTest {
+
+    private RabbitmqClientCache cache;
+
+    private SelectorData selectorData;
+
+    @BeforeEach
+    void setup() {
+        cache = RabbitmqClientCache.getInstance();
+        selectorData = SelectorData.builder().id("153153464562434")
+                .handle("{\n"
+                        + "  \"queueName\": \"shenyu-logs-queue\",\n"
+                        + "  \"exchangeName\": \"shenyu-logs-exchange\",\n"
+                        + "  \"host\": \"127.0.0.1\",\n"
+                        + "  \"port\": 5672,\n"
+                        + "  \"username\": \"admin\",\n"
+                        + "  \"password\": \"123456\",\n"
+                        + "  \"routingKey\": \"shenyu.log.key\",\n"
+                        + "  \"exchangeType\": \"topic\",\n"
+                        + "  \"virtualHost\": \"/\",\n"
+                        + "  \"durable\": true,\n"
+                        + "  \"exclusive\": false,\n"
+                        + "  \"autoDelete\": false,\n"
+                        + "  \"args\": {\n"
+                        + "    \"x-message-ttl\": 60000,\n"
+                        + "    \"x-max-length\": 1000\n"
+                        + "  }\n"
+                        + "}")
+                .build();
+        cache.invalidateAll();
+    }
+
+    @Test
+    public void testInitRabbitmqClient() {
+        RabbitmqLogCollectConfig.LogApiConfig logApiConfig = 
GsonUtils.getInstance()
+                .fromJson(selectorData.getHandle(), 
RabbitmqLogCollectConfig.LogApiConfig.class);
+        cache.initRabbitmqClient(selectorData.getId(), logApiConfig);
+        Map<String, RabbitmqLogCollectClient> clientCache = 
cache.getClientCache();
+        RabbitmqLogCollectClient rabbitmqLogCollectClient = 
clientCache.get(selectorData.getId());
+        assertNotNull(rabbitmqLogCollectClient);
+    }
+
+}
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/collector/RabbitmqLogCollectorTest.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/collector/RabbitmqLogCollectorTest.java
index 20f40dd0cd..8f9081fab6 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/collector/RabbitmqLogCollectorTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/collector/RabbitmqLogCollectorTest.java
@@ -17,9 +17,13 @@
 
 package org.apache.shenyu.plugin.logging.rabbitmq.collector;
 
+import org.apache.shenyu.common.dto.SelectorData;
+import org.apache.shenyu.common.utils.GsonUtils;
 import org.apache.shenyu.plugin.logging.common.collector.AbstractLogCollector;
 import org.apache.shenyu.plugin.logging.common.entity.ShenyuRequestLog;
+import org.apache.shenyu.plugin.logging.rabbitmq.cache.RabbitmqClientCache;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.client.RabbitmqLogCollectClient;
+import 
org.apache.shenyu.plugin.logging.rabbitmq.config.RabbitmqLogCollectConfig;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.conllector.RabbitmqLogCollector;
 import org.junit.Assert;
 import org.junit.Before;
@@ -38,6 +42,7 @@ public class RabbitmqLogCollectorTest {
     public void setUp() {
         shenyuRequestLog.setClientIp("0.0.0.0");
         shenyuRequestLog.setPath("org/apache/shenyu/plugin/logging");
+        shenyuRequestLog.setSelectorId("1332017966661636096");
     }
 
     @Test
@@ -63,4 +68,34 @@ public class RabbitmqLogCollectorTest {
         Assert.assertEquals(RabbitmqLogCollectClient.class, 
logConsumeClient.getClass());
     }
 
+    @Test
+    public void testGetLogConsumeClient2() {
+        RabbitmqClientCache cache = RabbitmqClientCache.getInstance();
+        SelectorData selectorData = 
SelectorData.builder().id("1332017966661636096")
+                .handle("{\n"
+                        + "  \"queueName\": \"shenyu-logs-queue\",\n"
+                        + "  \"exchangeName\": \"shenyu-logs-exchange\",\n"
+                        + "  \"host\": \"127.0.0.1\",\n"
+                        + "  \"port\": 5672,\n"
+                        + "  \"username\": \"admin\",\n"
+                        + "  \"password\": \"123456\",\n"
+                        + "  \"routingKey\": \"shenyu.log.key\",\n"
+                        + "  \"exchangeType\": \"topic\",\n"
+                        + "  \"virtualHost\": \"/\",\n"
+                        + "  \"durable\": true,\n"
+                        + "  \"exclusive\": false,\n"
+                        + "  \"autoDelete\": false,\n"
+                        + "  \"args\": {\n"
+                        + "    \"x-message-ttl\": 60000,\n"
+                        + "    \"x-max-length\": 1000\n"
+                        + "  }\n"
+                        + "}")
+                .build();
+        RabbitmqLogCollectConfig.LogApiConfig logApiConfig = 
GsonUtils.getInstance()
+                .fromJson(selectorData.getHandle(), 
RabbitmqLogCollectConfig.LogApiConfig.class);
+        cache.initRabbitmqClient("1332017966661636096", logApiConfig);
+        RabbitmqLogCollectClient logConsumeClient = new 
RabbitmqLogCollector().getLogConsumeClient("1332017966661636096");
+        Assert.assertEquals(RabbitmqLogCollectClient.class, 
logConsumeClient.getClass());
+    }
+
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/config/RabbitmqLogCollectConfigTest.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/config/RabbitmqLogCollectConfigTest.java
index 266c9e448b..64934e1158 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/config/RabbitmqLogCollectConfigTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/config/RabbitmqLogCollectConfigTest.java
@@ -50,13 +50,13 @@ public class RabbitmqLogCollectConfigTest {
     private final String exchangeType = "direct";
 
     private final String virtualHost = "/";
-    
+
     private final Boolean durable = Boolean.TRUE;
-    
+
     private final Boolean exclusive = Boolean.FALSE;
-    
+
     private final Boolean autoDelete = Boolean.FALSE;
-    
+
     private final Map<String, Object> args = new HashMap<>();
 
     @Test
diff --git 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/handler/LoggingRabbitmqPluginDataHandlerTest.java
 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/handler/LoggingRabbitmqPluginDataHandlerTest.java
index ed15d0d141..9739a767d4 100644
--- 
a/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/handler/LoggingRabbitmqPluginDataHandlerTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-logging/shenyu-plugin-logging-rabbitmq/src/test/java/org/apache/shenyu/plugin/logging/rabbitmq/handler/LoggingRabbitmqPluginDataHandlerTest.java
@@ -25,6 +25,7 @@ import org.apache.shenyu.common.enums.PluginEnum;
 import org.apache.shenyu.common.enums.SelectorTypeEnum;
 import org.apache.shenyu.common.utils.GsonUtils;
 import org.apache.shenyu.common.utils.Singleton;
+import org.apache.shenyu.plugin.logging.rabbitmq.cache.RabbitmqClientCache;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.client.RabbitmqLogCollectClient;
 import 
org.apache.shenyu.plugin.logging.rabbitmq.config.RabbitmqLogCollectConfig;
 import org.junit.jupiter.api.Assertions;
@@ -42,6 +43,7 @@ import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 
+import static org.junit.Assert.assertNotNull;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.never;
@@ -142,6 +144,33 @@ public final class LoggingRabbitmqPluginDataHandlerTest {
         verify(loggingRabbitmqPluginDataHandler, 
times(1)).doRefreshConfig(any());
     }
 
+    @Test
+    public void testHandlerSelector() {
+        SelectorData selectorData = 
SelectorData.builder().id("1332017966661636096")
+                .handle("{\n"
+                        + "  \"queueName\": \"shenyu-logs-queue\",\n"
+                        + "  \"exchangeName\": \"shenyu-logs-exchange\",\n"
+                        + "  \"host\": \"127.0.0.1\",\n"
+                        + "  \"port\": 5672,\n"
+                        + "  \"username\": \"admin\",\n"
+                        + "  \"password\": \"123456\",\n"
+                        + "  \"routingKey\": \"shenyu.log.key\",\n"
+                        + "  \"exchangeType\": \"topic\",\n"
+                        + "  \"virtualHost\": \"/\",\n"
+                        + "  \"durable\": true,\n"
+                        + "  \"exclusive\": false,\n"
+                        + "  \"autoDelete\": false,\n"
+                        + "  \"args\": {\n"
+                        + "    \"x-message-ttl\": 60000,\n"
+                        + "    \"x-max-length\": 1000\n"
+                        + "  }\n"
+                        + "}")
+                .build();
+        loggingRabbitmqPluginDataHandler.handlerSelector(selectorData);
+        RabbitmqClientCache cache = RabbitmqClientCache.getInstance();
+        assertNotNull(cache.getClientCache().get("1332017966661636096"));
+    }
+
     private PluginData createPluginData() {
         PluginData pluginData = new PluginData();
         pluginData.setEnabled(true);


Reply via email to