You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by ji...@apache.org on 2023/02/16 07:42:43 UTC

[rocketmq-e2e] branch master updated: Optimized logs and update readme.md (#9)

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

jinrongtong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-e2e.git


The following commit(s) were added to refs/heads/master by this push:
     new 8fefdbd  Optimized logs and update readme.md (#9)
8fefdbd is described below

commit 8fefdbd8ad53e16d552d6f88c71abe10256b407e
Author: yueya <10...@users.noreply.github.com>
AuthorDate: Thu Feb 16 15:42:38 2023 +0800

    Optimized logs and update readme.md (#9)
    
    * add rocketmq e2e test cases
    
    * Optimizes the logic for initializing test scripts
    
    * Modify the method of reading a local property file
    
    * Modify README.md
    
    * remove some useless annotations
    
    * Modify the method of reading a local property file
    
    (cherry picked from commit 66c85b5482124d6e6b446fa03996619a219eb57e)
    
    * Modify README.md
    
    (cherry picked from commit 0c77d6a9087381f068b3c49d9ec80da1d86a2347)
    
    * remove some useless annotations
    
    (cherry picked from commit ae501bb4432fe13bcb2755a4cb86d5dba6b08570)
    
    * Modify the project directory structure, add php/c/c#/go/rust catalog
    
    * Modify README.md
    
    (cherry picked from commit 0c77d6a9087381f068b3c49d9ec80da1d86a2347)
    
    * add e2e cases of rocketmq4.x with new module
    
    * fix case's bug
    
    * Modify README.md
    
    (cherry picked from commit 0c77d6a9087381f068b3c49d9ec80da1d86a2347)
    
    * add e2e cases of rocketmq4.x with new module
    
    * fix case's bug
    
    * Add junit config and update cases tag
    
    * fix bug
    
    * fix bug
    
    * fix bug
    
    * Update README.md
    
    * Optimized logs
    
    * Optimized logs and bugfix
    
    * delete duplicate code
    
    * Update README.md
    
    ---------
    
    Co-authored-by: 月伢 <yu...@alibaba-inc.com>
---
 .gitignore                                         |    1 +
 README.md                                          |    5 +-
 .../rocketmq/client/rmq/RMQNormalProducer.java     |   68 +-
 .../java/org/apache/rocketmq/account/Account.java  |  170 ----
 .../rocketmq/client/SimpleConsumerThread.java      |   96 --
 .../rocketmq/client/rmq/RMQNormalConsumer.java     |  323 ------
 .../rocketmq/client/rmq/RMQNormalProducer.java     |  178 ----
 .../client/trans/LocalTransactionCheckerImpl.java  |   43 -
 .../apache/rocketmq/common/AbstractMQConsumer.java |   24 -
 .../apache/rocketmq/common/AbstractMQProducer.java |   31 -
 .../org/apache/rocketmq/common/MQCollector.java    |  122 ---
 .../org/apache/rocketmq/common/MQConsumer.java     |   23 -
 .../org/apache/rocketmq/common/MQProducer.java     |   22 -
 .../java/org/apache/rocketmq/enums/TESTSET.java    |   57 --
 .../org/apache/rocketmq/factory/AclClient.java     |   28 -
 .../org/apache/rocketmq/factory/BaseFactory.java   |   25 -
 .../factory/ClientConfigurationFactory.java        |   36 -
 .../apache/rocketmq/factory/ConsumerFactory.java   |  118 ---
 .../apache/rocketmq/factory/MQMessageFactory.java  |  128 ---
 .../apache/rocketmq/factory/MessageFactory.java    |  378 -------
 .../apache/rocketmq/factory/ProducerFactory.java   |   69 --
 .../org/apache/rocketmq/frame/BaseOperate.java     |  113 ---
 .../org/apache/rocketmq/frame/ResourceInit.java    |  207 ----
 .../rocketmq/listener/rmq/RMQNormalListener.java   |   88 --
 .../java/org/apache/rocketmq/util/AssertUtils.java |  107 --
 .../java/org/apache/rocketmq/util/DateUtils.java   |  115 ---
 .../java/org/apache/rocketmq/util/FileUtil.java    |  109 --
 .../java/org/apache/rocketmq/util/MQAdmin.java     |  239 -----
 src/main/java/org/apache/rocketmq/util/MQWait.java |   94 --
 .../java/org/apache/rocketmq/util/NameUtils.java   |  140 ---
 .../java/org/apache/rocketmq/util/RandomUtils.java |   91 --
 .../java/org/apache/rocketmq/util/TestUtils.java   |  136 ---
 .../java/org/apache/rocketmq/util/VerifyUtils.java | 1067 --------------------
 .../rocketmq/util/data/collect/DataCollector.java  |   97 --
 .../util/data/collect/DataCollectorManager.java    |  112 --
 .../rocketmq/util/data/collect/DataFilter.java     |   22 -
 .../data/collect/impl/ListDataCollectorImpl.java   |  100 --
 .../data/collect/impl/MapDataCollectorImpl.java    |  116 ---
 .../broker/client/consumer/ConsumerGroupTest.java  |   77 --
 .../client/consumer/PushConsumerInitTest.java      |  253 -----
 .../client/consumer/SimpleConsumerInitTest.java    |  259 -----
 .../broker/client/message/MessageAbnormalTest.java |  136 ---
 .../client/message/MessageBodyContentTest.java     |  144 ---
 .../broker/client/message/MessageKeyTest.java      |  188 ----
 .../broker/client/message/MessageTagTest.java      |  166 ---
 .../client/message/MessageUserPropertyTest.java    |  205 ----
 .../client/message/NormalMessageSizeTest.java      |  218 ----
 .../broker/client/producer/ProducerInitTest.java   |  265 -----
 .../rocketmq/broker/cluster/ClusterTest.java       |  128 ---
 .../rocketmq/broker/example/ProducerExample.java   |   56 -
 .../rocketmq/broker/filter/push/SqlFilterTest.java |  182 ----
 .../filter/push/SqlFilterWithOrderMsgTest.java     |  164 ---
 .../rocketmq/broker/filter/push/TagFilterTest.java |  346 -------
 .../rocketmq/broker/server/DelayMessageTest.java   |  145 ---
 .../rocketmq/broker/server/NormalMessageTest.java  |  124 ---
 .../rocketmq/broker/server/OrderMessageTest.java   |   96 --
 .../broker/server/TransactionMessageTest.java      |  220 ----
 .../abnormal/DynamicChangeConsumeGroupTest.java    |  212 ----
 .../server/abnormal/PushConsumerRetryTest.java     |  256 -----
 .../rocketmq/broker/simple/SimpleAckTest.java      |  159 ---
 .../broker/simple/SimpleOrderParamTest.java        |  338 -------
 .../rocketmq/broker/simple/SimpleOrderTest.java    |   79 --
 .../rocketmq/broker/simple/SimpleParamTest.java    |  372 -------
 .../broker/simple/SimpleTopicTypeTest.java         |  108 --
 src/test/resources/env/daily/daily.conf            |    6 -
 src/test/resources/junit-platform.properties       |   18 -
 src/test/resources/log4j.properties                |   25 -
 src/test/resources/logback-test.xml                |   35 -
 68 files changed, 36 insertions(+), 9842 deletions(-)

diff --git a/.gitignore b/.gitignore
index 1d85b25..8912d5b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ bazel-bin
 bazel-rocketmq
 bazel-testlogs
 .vscode
+*.py
\ No newline at end of file
diff --git a/README.md b/README.md
index c1081e8..5f166dd 100644
--- a/README.md
+++ b/README.md
@@ -17,8 +17,11 @@ RocketMQ E2E Test
   * Order/Delay/Transaction/Normal
   * Sync receive/Async receive
   * Sync ack/Async ack
-* Client init
+* Client init (Producer/PushConsumer/SimpleConsumer)
   * Parameter settings
+* Mode
+  * Cluster
+  * Broadcast
 * Message
   * Tag 
   * Body 
diff --git a/java/e2e/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalProducer.java b/java/e2e/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalProducer.java
index 23c2871..3da6cd0 100644
--- a/java/e2e/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalProducer.java
+++ b/java/e2e/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalProducer.java
@@ -49,7 +49,7 @@ public class RMQNormalProducer extends AbstractMQProducer {
     public void send(org.apache.rocketmq.client.apis.message.Message message) {
         try {
             SendReceipt sendReceipt = this.producer.send(message);
-            log.info("{}, Body: {}, MessageGroup: {}, Topic: {}", sendReceipt.getMessageId(), StandardCharsets.UTF_8.decode(message.getBody()), message.getMessageGroup().isPresent() ? message.getMessageGroup().get() : "", message.getTopic());
+            log.info("{}, MessageGroup: {}, Topic: {}", sendReceipt.getMessageId(), message.getMessageGroup().isPresent() ? message.getMessageGroup().get() : "", message.getTopic());
             this.enqueueMessages.addData(sendReceipt.getMessageId().toString());
         } catch (Exception e) {
             e.printStackTrace();
@@ -114,24 +114,21 @@ public class RMQNormalProducer extends AbstractMQProducer {
             org.apache.rocketmq.client.apis.message.Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
             try {
                 CompletableFuture<SendReceipt> future = producer.sendAsync(message);
-                future.thenAccept(
-                        new Consumer<SendReceipt>() {
-                            @Override
-                            public void accept(SendReceipt receipt) {
-                                log.info("callback msg success: {}", receipt.getMessageId());
-                                enqueueMessages.addData(receipt.getMessageId().toString());
-                            }
-                        }
-                );
-                future.exceptionally(
-                        new Function<Throwable, SendReceipt>() {
-                            @Override
-                            public SendReceipt apply(Throwable throwable) {
-                                log.warn("{} callback message failed", message.getTopic());
-                                enqueueFailedMessages.addData(message);
-                                return null;
-                            }
-                        });
+                future.thenAccept(new Consumer<SendReceipt>() {
+                    @Override
+                    public void accept(SendReceipt receipt) {
+                        log.info("callback msg success: {}", receipt.getMessageId());
+                        enqueueMessages.addData(receipt.getMessageId().toString());
+                    }
+                });
+                future.exceptionally(new Function<Throwable, SendReceipt>() {
+                    @Override
+                    public SendReceipt apply(Throwable throwable) {
+                        log.warn("{} callback message failed", message.getTopic());
+                        enqueueFailedMessages.addData(message);
+                        return null;
+                    }
+                });
                 log.info("{}, index: {}", future, i);
                 future.get();
             } catch (Exception e) {
@@ -144,24 +141,21 @@ public class RMQNormalProducer extends AbstractMQProducer {
     public void sendAsync(Message message) {
         try {
             CompletableFuture<SendReceipt> future = producer.sendAsync(message);
-            future.thenAccept(
-                    new Consumer<SendReceipt>() {
-                        @Override
-                        public void accept(SendReceipt receipt) {
-                            log.info("Async send success: {}, topic:{}, tag:{}, body:{}", receipt.getMessageId(), message.getTopic(), message.getTag(), StandardCharsets.UTF_8.decode(message.getBody()));
-                            enqueueMessages.addData(receipt.getMessageId().toString());
-                        }
-                    }
-            );
-            future.exceptionally(
-                    new Function<Throwable, SendReceipt>() {
-                        @Override
-                        public SendReceipt apply(Throwable throwable) {
-                            log.warn("send {} callback message failed", message.getTopic());
-                            enqueueFailedMessages.addData(message);
-                            return null;
-                        }
-                    });
+            future.thenAccept(new Consumer<SendReceipt>() {
+                @Override
+                public void accept(SendReceipt receipt) {
+                    log.info("Async send success: {}, topic:{}, tag:{}, body:{}", receipt.getMessageId(), message.getTopic(), message.getTag(), StandardCharsets.UTF_8.decode(message.getBody()));
+                    enqueueMessages.addData(receipt.getMessageId().toString());
+                }
+            });
+            future.exceptionally(new Function<Throwable, SendReceipt>() {
+                @Override
+                public SendReceipt apply(Throwable throwable) {
+                    log.warn("send {} callback message failed", message.getTopic());
+                    enqueueFailedMessages.addData(message);
+                    return null;
+                }
+            });
             future.get();
         } catch (Exception e) {
             log.error("Producer async send message failed, {}", e.getMessage());
diff --git a/src/main/java/org/apache/rocketmq/account/Account.java b/src/main/java/org/apache/rocketmq/account/Account.java
deleted file mode 100644
index 5f0866d..0000000
--- a/src/main/java/org/apache/rocketmq/account/Account.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.rocketmq.account;
-
-public class Account {
-    /**
-     * aliyun AccessKey
-     */
-    protected String accessKey;
-    /**
-     * aliyun SecretKey
-     */
-    protected String secretKey;
-    /**
-     * instanceUserName
-     */
-    protected String instanceUserName;
-    /**
-     * instancePassword
-     */
-    protected String instancePassword;
-    /**
-     * endpoint
-     */
-    protected String endpoint;
-    /**
-     * instanceId
-     */
-    protected String instanceId;
-    /**
-     * consoleEndpoint
-     */
-    protected String consoleEndpoint;
-    /**
-     * region
-     */
-    protected String regionId;
-    /**
-     * Account User ID
-     */
-    protected String userId;
-    /**
-     * Account User Name
-     */
-    protected String accountName;
-
-    public Account() {
-    }
-
-    public Account(String endpoint) {
-        this.endpoint = endpoint;
-    }
-
-    public Account(String instanceUserName, String instancePassword) {
-        this.instanceUserName = instanceUserName;
-        this.instancePassword = instancePassword;
-    }
-
-    public Account(String accessKey, String secretKey, String endpoint) {
-        this.accessKey = accessKey;
-        this.secretKey = secretKey;
-        this.endpoint = endpoint;
-    }
-
-    public Account(String accessKey, String secretKey, String endpoint, String instanceId, String consoleEndpoint,
-        String regionId, String userId) {
-        this.accessKey = accessKey;
-        this.secretKey = secretKey;
-        this.endpoint = endpoint;
-        this.instanceId = instanceId;
-        this.consoleEndpoint = consoleEndpoint;
-        this.regionId = regionId;
-        this.userId = userId;
-    }
-
-    public String getAccessKey() {
-        return accessKey;
-    }
-
-    public void setAccessKey(String accessKey) {
-        this.accessKey = accessKey;
-    }
-
-    public String getSecretKey() {
-        return secretKey;
-    }
-
-    public void setSecretKey(String secretKey) {
-        this.secretKey = secretKey;
-    }
-
-    public String getInstanceUserName() {
-        return instanceUserName;
-    }
-
-    public void setInstanceUserName(String instanceUserName) {
-        this.instanceUserName = instanceUserName;
-    }
-
-    public String getInstancePassword() {
-        return instancePassword;
-    }
-
-    public void setInstancePassword(String instancePassword) {
-        this.instancePassword = instancePassword;
-    }
-
-    public String getEndpoint() {
-        return endpoint;
-    }
-
-    public void setEndpoint(String endpoint) {
-        this.endpoint = endpoint;
-    }
-
-    public String getInstanceId() {
-        return instanceId;
-    }
-
-    public void setInstanceId(String instanceId) {
-        this.instanceId = instanceId;
-    }
-
-    public String getConsoleEndpoint() {
-        return consoleEndpoint;
-    }
-
-    public void setConsoleEndpoint(String consoleEndpoint) {
-        this.consoleEndpoint = consoleEndpoint;
-    }
-
-    public String getRegionId() {
-        return regionId;
-    }
-
-    public void setRegionId(String regionId) {
-        this.regionId = regionId;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    public String getAccountName() {
-        return accountName;
-    }
-
-    public void setAccountName(String accountName) {
-        this.accountName = accountName;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/client/SimpleConsumerThread.java b/src/main/java/org/apache/rocketmq/client/SimpleConsumerThread.java
deleted file mode 100644
index d37e8fe..0000000
--- a/src/main/java/org/apache/rocketmq/client/SimpleConsumerThread.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.rocketmq.client;
-
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.common.MQCollector;
-
-@Slf4j
-public class SimpleConsumerThread extends MQCollector implements Runnable {
-
-    private CountDownLatch latch;
-    private SimpleConsumer simpleConsumer;
-    private int maxMessageNum;
-    private Duration invisibleDuration;
-    private List<MessageView> viewList;
-    private Boolean needRun = true;
-    private AtomicInteger receivedIndex = new AtomicInteger(0);
-
-    public SimpleConsumerThread(CountDownLatch latch, SimpleConsumer simpleConsumer, int maxMessageNum,
-        Duration invisibleDuration) {
-        this.latch = latch;
-        this.simpleConsumer = simpleConsumer;
-        this.maxMessageNum = maxMessageNum;
-        this.invisibleDuration = invisibleDuration;
-    }
-
-    @Override
-    public void run() {
-        while (needRun) {
-            final CompletableFuture<List<MessageView>> future = simpleConsumer.receiveAsync(maxMessageNum, invisibleDuration);
-            future.thenAccept(new Consumer<List<MessageView>>() {
-                @Override
-                public void accept(List<MessageView> messageViews) {
-                    log.info("received async success");
-                    for (MessageView messageView : messageViews) {
-                        dequeueMessages.addData(messageView);
-                        log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                            StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                        CompletableFuture<Void> ackFuture = simpleConsumer.ackAsync(messageView);
-                        ackFuture.thenAccept(new Consumer<Void>() {
-                            @Override
-                            public void accept(Void unused) {
-                                log.info("ack async success");
-                            }
-                        });
-                        ackFuture.exceptionally(new Function<Throwable, Void>() {
-                            @Override
-                            public Void apply(Throwable throwable) {
-                                log.info("ack async failed");
-                                return null;
-                            }
-                        });
-                    }
-                }
-            });
-            future.exceptionally(new Function<Throwable, List<MessageView>>() {
-                @Override
-                public List<MessageView> apply(Throwable throwable) {
-                    log.info("received async failed");
-                    return null;
-                }
-            });
-            try {
-                future.get();
-                latch.countDown();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalConsumer.java b/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalConsumer.java
deleted file mode 100644
index d1eb9b6..0000000
--- a/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalConsumer.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * 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.rocketmq.client.rmq;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import org.apache.rocketmq.client.SimpleConsumerThread;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.consumer.PushConsumer;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
-import org.apache.rocketmq.common.MQCollector;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.junit.jupiter.api.Assertions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RMQNormalConsumer extends MQCollector {
-    private static final Logger log = LoggerFactory.getLogger(RMQNormalConsumer.class);
-    private PushConsumer pushConsumer;
-    private SimpleConsumer simpleConsumer;
-    private DefaultMQPushConsumer consumer;
-    private ExecutorService executorService = Executors.newFixedThreadPool(20);
-    private final static int WAIT_RESPONSE_MILLS = 15 * 1000;
-    private RMQNormalListener listener = null;
-    private Duration invisibleDuration = null;
-    private int waitTimeoutSec = 60;
-    private Boolean needRun = true;
-    private boolean bSuccessResponse = false;
-    private boolean bFailResponse = false;
-    private boolean ackSuccessResponse = false;
-    private boolean ackFailResponse = false;
-    private int consumerThreadNum = 20;
-    private static volatile AtomicInteger receivedIndex = new AtomicInteger(0);
-
-    public RMQNormalConsumer(PushConsumer consumer, RMQNormalListener listener) {
-        this.listener = listener;
-        this.pushConsumer = consumer;
-    }
-
-    public RMQNormalConsumer(SimpleConsumer consumer) {
-        this.simpleConsumer = consumer;
-    }
-
-    public void receive(int maxMessageNum, int expectedNum, Duration invisibleDuration, long timeout) {
-        int recvNum = 0;
-        long start = System.currentTimeMillis();
-        try {
-            while (System.currentTimeMillis() - start < timeout) {
-                final List<MessageView> messageViews = simpleConsumer.receive(maxMessageNum, invisibleDuration);
-                log.info("simple receive message: {}", messageViews.size());
-                for (MessageView messageView : messageViews) {
-                    receivedIndex.getAndIncrement();
-                    recvNum++;
-                    dequeueMessages.addData(messageView);
-                    log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}", messageView.getMessageId(),
-                        StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get());
-                    simpleConsumer.ack(messageView);
-                }
-                if (recvNum == expectedNum) {
-                    break;
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            Assertions.fail(e.getMessage());
-        }
-    }
-
-    public void receiveThenAck(int maxMessageNum, int expectedNum, Duration invisibleDuration, long timeout) {
-        new Thread(() -> {
-            int recvNum = 0;
-            long start = System.currentTimeMillis();
-            try {
-                while (System.currentTimeMillis() - start < timeout) {
-                    final List<MessageView> messageViews = simpleConsumer.receive(maxMessageNum, invisibleDuration);
-                    log.info("simple receive message: {}", messageViews.size());
-                    for (MessageView messageView : messageViews) {
-                        receivedIndex.getAndIncrement();
-                        recvNum++;
-                        dequeueMessages.addData(messageView);
-                        log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}", messageView.getMessageId(),
-                            StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get());
-                        simpleConsumer.ack(messageView);
-                    }
-                    if (recvNum == expectedNum) {
-                        break;
-                    }
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-                Assertions.fail(e.getMessage());
-            }
-        }).start();
-    }
-
-    public void receiveThenAck(int maxMessageNum, Duration invisibleDuration) {
-        for (int i = 0; i < consumerThreadNum; i++) {
-            executorService.submit(() -> {
-                try {
-                    log.info("needRun:{}", needRun);
-                    while (needRun) {
-                        final List<MessageView> messageViews = simpleConsumer.receive(maxMessageNum, invisibleDuration);
-                        log.info("simple receive message: {}", messageViews.size());
-                        for (MessageView messageView : messageViews) {
-                            receivedIndex.getAndIncrement();
-                            dequeueMessages.addData(messageView);
-                            log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                            simpleConsumer.ack(messageView);
-                            log.info("ack success");
-                        }
-                    }
-                } catch (ClientException e) {
-                    e.printStackTrace();
-                    Assertions.fail(e.getMessage());
-                }
-            });
-        }
-    }
-
-    public void receiveAsyncThenAck(int maxMessageNum, Duration invisibleDuration) {
-        for (int i = 0; i < consumerThreadNum; i++) {
-            final CompletableFuture<List<MessageView>> future = simpleConsumer.receiveAsync(maxMessageNum, invisibleDuration);
-
-            future.thenAccept(new Consumer<List<MessageView>>() {
-                @Override
-                public void accept(List<MessageView> messageViews) {
-                    log.info("receive {} messages :{}", messageViews.size(), Arrays.toString(messageViews.toArray()));
-                    for (MessageView messageView : messageViews) {
-                        dequeueMessages.addData(messageView);
-                        receivedIndex.getAndIncrement();
-                        log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                            StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                        try {
-                            simpleConsumer.ack(messageView);
-                            log.info("ack message: {} success", messageView.getMessageId());
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                }
-            });
-            future.exceptionally(new Function<Throwable, List<MessageView>>() {
-                @Override
-                public List<MessageView> apply(Throwable throwable) {
-                    throwable.printStackTrace();
-                    log.info("received async failed: {}", throwable.getMessage());
-                    return null;
-                }
-            });
-        }
-    }
-
-    public void receiveThenAckAsync(int maxMessageNum, Duration invisibleDuration) {
-        for (int i = 0; i < consumerThreadNum; i++) {
-            executorService.submit(() -> {
-                try {
-                    while (needRun) {
-                        final List<MessageView> messageViews = simpleConsumer.receive(maxMessageNum, invisibleDuration);
-                        for (MessageView messageView : messageViews) {
-                            this.dequeueMessages.addData(messageView);
-                            receivedIndex.getAndIncrement();
-                            log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                            CompletableFuture<Void> future = simpleConsumer.ackAsync(messageView);
-                            future.thenAccept(new Consumer<Void>() {
-                                @Override
-                                public void accept(Void unused) {
-                                    ackSuccessResponse = true;
-                                    log.info("ack async success");
-                                }
-                            });
-                            future.exceptionally(new Function<Throwable, Void>() {
-                                @Override
-                                public Void apply(Throwable throwable) {
-                                    ackFailResponse = true;
-                                    Assertions.fail("ackAsync failed! " + throwable.getMessage());
-                                    return null;
-                                }
-                            });
-                            try {
-                                future.get();
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-                } catch (ClientException e) {
-                    Assertions.fail(e.getMessage());
-                }
-            });
-        }
-    }
-
-    public void receiveAsyncThenAckAsync(int maxMessageNum, Duration invisibleDuration) {
-        CountDownLatch latch = new CountDownLatch(consumerThreadNum);
-        for (int i = 0; i < consumerThreadNum; i++) {
-            log.info("=======================");
-            SimpleConsumerThread consumerThread = new SimpleConsumerThread(latch, simpleConsumer, 10, Duration.ofSeconds(60));
-            executorService.submit(consumerThread);
-            this.dequeueMessages.addData(consumerThread.getDequeueMessages());
-        }
-        try {
-            latch.await();
-            log.info("The execution of all child threads is complete");
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * No ack operation after a message is received
-     *
-     * @param maxMessageNum
-     * @param invisibleDuration
-     */
-    public void receiveThenNack(int maxMessageNum, Duration invisibleDuration) {
-        receiveThenNack(maxMessageNum, invisibleDuration, null);
-    }
-
-    public void receiveThenNack(int maxMessageNum, Duration receiveInvisibleDuration,
-        Duration changeInvisibleDuration) {
-        for (int i = 0; i < consumerThreadNum; i++) {
-            executorService.submit(() -> {
-                try {
-                    while (needRun) {
-                        final List<MessageView> messageViews = simpleConsumer.receive(maxMessageNum, receiveInvisibleDuration);
-                        for (MessageView messageView : messageViews) {
-                            this.dequeueMessages.addData(messageView);
-                            log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                            if (changeInvisibleDuration != null) {
-                                simpleConsumer.changeInvisibleDuration(messageView, changeInvisibleDuration);
-                            }
-                        }
-                    }
-                } catch (ClientException e) {
-                    e.printStackTrace();
-                    Assertions.fail(e.getMessage());
-                }
-            });
-        }
-    }
-
-    public void close() {
-        if (pushConsumer != null) {
-            try {
-//                log.info("DefaultMQPushConsumer shutdown start!!!");
-                pushConsumer.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            log.info("DefaultMQPushConsumer shutdown !!!");
-        }
-        if (simpleConsumer != null) {
-            try {
-                simpleConsumer.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            log.info("SimpleConsumer shutdown !!!");
-        }
-    }
-
-    public PushConsumer getPushConsumer() {
-        return pushConsumer;
-    }
-
-    public void setPushConsumer(PushConsumer pushConsumer) {
-        this.pushConsumer = pushConsumer;
-    }
-
-    public SimpleConsumer getSimpleConsumer() {
-        return simpleConsumer;
-    }
-
-    public void setSimpleConsumer(SimpleConsumer simpleConsumer) {
-        this.simpleConsumer = simpleConsumer;
-    }
-
-    public DefaultMQPushConsumer getConsumer() {
-        return consumer;
-    }
-
-    public void setConsumer(DefaultMQPushConsumer consumer) {
-        this.consumer = consumer;
-    }
-
-    public RMQNormalListener getListener() {
-        return listener;
-    }
-
-    public void setListener(RMQNormalListener listener) {
-        this.listener = listener;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalProducer.java b/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalProducer.java
deleted file mode 100644
index bfcb041..0000000
--- a/src/main/java/org/apache/rocketmq/client/rmq/RMQNormalProducer.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * 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.rocketmq.client.rmq;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.concurrent.CompletableFuture;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.producer.Producer;
-import org.apache.rocketmq.client.apis.producer.SendReceipt;
-import org.apache.rocketmq.client.apis.producer.Transaction;
-import org.apache.rocketmq.common.AbstractMQProducer;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.util.RandomUtils;
-import org.junit.jupiter.api.Assertions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RMQNormalProducer extends AbstractMQProducer {
-    private static Logger log = LoggerFactory.getLogger(RMQNormalProducer.class);
-    private Producer producer;
-
-    public RMQNormalProducer(Producer producer) {
-        this.producer = producer;
-    }
-
-    public Producer getProducer() {
-        return producer;
-    }
-
-    public void send(org.apache.rocketmq.client.apis.message.Message message) {
-        try {
-            SendReceipt sendReceipt = this.producer.send(message);
-            log.info("{}, Body: {}, MessageGroup: {}, Topic: {}", sendReceipt.getMessageId(), StandardCharsets.UTF_8.decode(message.getBody()), message.getMessageGroup().isPresent() ? message.getMessageGroup().get() : "", message.getTopic());
-            this.enqueueMessages.addData(sendReceipt.getMessageId().toString());
-        } catch (Exception e) {
-            e.printStackTrace();
-            Assertions.fail("Producer send message failed, " + e.getMessage());
-        }
-    }
-
-    public void sendTrans(org.apache.rocketmq.client.apis.message.Message message, Boolean commit) {
-        log.info("Producer start to send messages");
-        try {
-            Transaction transaction = producer.beginTransaction();
-            SendReceipt sendReceipt = producer.send(message, transaction);
-            if (commit != null) {
-                if (commit) {
-                    transaction.commit();
-                    log.info("exec commit()");
-                } else {
-                    transaction.rollback();
-                    log.info("exec rollback()");
-                }
-            }
-            log.info("{}", sendReceipt);
-            this.enqueueMessages.addData(sendReceipt.getMessageId().toString());
-        } catch (Exception e) {
-            log.error("Producer send message failed, {}", e.getMessage());
-        }
-        log.info("Producer send messages finished");
-    }
-
-    public void send(String topic, String tag, int messageNum) {
-        log.info("Producer start to send messages");
-        for (int i = 0; i < messageNum; i++) {
-            org.apache.rocketmq.client.apis.message.Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-            try {
-                SendReceipt sendReceipt = producer.send(message);
-                log.info("{}, Body: {}, Tag: {}, MessageGroup: {}", sendReceipt.getMessageId(), StandardCharsets.UTF_8.decode(message.getBody()), tag, message.getMessageGroup().isPresent() ? message.getMessageGroup().get() : "");
-                this.enqueueMessages.addData(sendReceipt.getMessageId().toString());
-            } catch (Exception e) {
-                log.error("Producer send message failed, {}", e.getMessage());
-            }
-        }
-        log.info("Producer send messages finished");
-    }
-
-    public void send(String topic, String tag, long delaySecondTime, int messageNum) {
-        log.info("Producer start to send messages");
-        for (int i = 0; i < messageNum; i++) {
-            org.apache.rocketmq.client.apis.message.Message message = MessageFactory.buildDelayMessage(topic, tag, RandomUtils.getStringByUUID(), System.currentTimeMillis() + delaySecondTime * 1000);
-            try {
-                SendReceipt sendReceipt = producer.send(message);
-                log.info("{}, index: {}", sendReceipt, i);
-                this.enqueueMessages.addData(sendReceipt.getMessageId().toString());
-            } catch (Exception e) {
-                log.error("Producer send message failed, {}", e.getMessage());
-            }
-        }
-        log.info("Producer send messages finished");
-    }
-
-    public void sendAsync(String topic, String tag, int messageNum) {
-        log.info("Producer start to send messages");
-        for (int i = 0; i < messageNum; i++) {
-            org.apache.rocketmq.client.apis.message.Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-            try {
-                CompletableFuture<SendReceipt> future = producer.sendAsync(message);
-                future.thenAccept(
-                    new Consumer<SendReceipt>() {
-                        @Override public void accept(SendReceipt receipt) {
-                            log.info("callback msg success: {}", receipt.getMessageId());
-                            enqueueMessages.addData(receipt.getMessageId().toString());
-                        }
-                    }
-                );
-                future.exceptionally(
-                    new Function<Throwable, SendReceipt>() {
-                        @Override public SendReceipt apply(Throwable throwable) {
-                            log.warn("{} callback message failed", message.getTopic());
-                            enqueueFailedMessages.addData(message);
-                            return null;
-                        }
-                    });
-                log.info("{}, index: {}", future, i);
-                future.get();
-            } catch (Exception e) {
-                log.error("Producer async send message failed, {}", e.getMessage());
-            }
-        }
-        log.info("Producer async send messages finished");
-    }
-
-    public void sendAsync(Message message) {
-        try {
-            CompletableFuture<SendReceipt> future = producer.sendAsync(message);
-            future.thenAccept(
-                new Consumer<SendReceipt>() {
-                    @Override public void accept(SendReceipt receipt) {
-                        log.info("Async send success: {}, topic:{}, tag:{}, body:{}", receipt.getMessageId(), message.getTopic(), message.getTag(), StandardCharsets.UTF_8.decode(message.getBody()));
-                        enqueueMessages.addData(receipt.getMessageId().toString());
-                    }
-                }
-            );
-            future.exceptionally(
-                new Function<Throwable, SendReceipt>() {
-                    @Override public SendReceipt apply(Throwable throwable) {
-                        log.warn("send {} callback message failed", message.getTopic());
-                        enqueueFailedMessages.addData(message);
-                        return null;
-                    }
-                });
-            future.get();
-        } catch (Exception e) {
-            log.error("Producer async send message failed, {}", e.getMessage());
-        }
-    }
-
-    public void close() {
-        if (producer != null) {
-            try {
-                producer.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            log.info("Producer shutdown !!!");
-        }
-    }
-
-}
diff --git a/src/main/java/org/apache/rocketmq/client/trans/LocalTransactionCheckerImpl.java b/src/main/java/org/apache/rocketmq/client/trans/LocalTransactionCheckerImpl.java
deleted file mode 100644
index f5edc6e..0000000
--- a/src/main/java/org/apache/rocketmq/client/trans/LocalTransactionCheckerImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.rocketmq.client.trans;
-
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.client.apis.producer.TransactionChecker;
-import org.apache.rocketmq.client.apis.producer.TransactionResolution;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class LocalTransactionCheckerImpl implements TransactionChecker {
-    private static Logger logger = LoggerFactory.getLogger(LocalTransactionCheckerImpl.class);
-
-    private TransactionResolution status;
-
-    public LocalTransactionCheckerImpl() {
-    }
-
-    public LocalTransactionCheckerImpl(TransactionResolution status) {
-        this.status = status;
-    }
-
-    @Override
-    public TransactionResolution check(MessageView messageView) {
-        logger.info("TransactionChecker  callback for msg: {}", messageView);
-        return status == null ? TransactionResolution.COMMIT : status;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/common/AbstractMQConsumer.java b/src/main/java/org/apache/rocketmq/common/AbstractMQConsumer.java
deleted file mode 100644
index 0d3b5f9..0000000
--- a/src/main/java/org/apache/rocketmq/common/AbstractMQConsumer.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.rocketmq.common;
-
-public abstract class AbstractMQConsumer implements MQConsumer {
-    public AbstractMQConsumer() {
-    }
-
-}
diff --git a/src/main/java/org/apache/rocketmq/common/AbstractMQProducer.java b/src/main/java/org/apache/rocketmq/common/AbstractMQProducer.java
deleted file mode 100644
index 5a4d810..0000000
--- a/src/main/java/org/apache/rocketmq/common/AbstractMQProducer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.rocketmq.common;
-
-public abstract class AbstractMQProducer extends MQCollector implements MQProducer {
-
-    protected boolean startSuccess = false;
-    protected String producerGroupName = null;
-    protected String producerInstanceName = null;
-    protected boolean isDebug = false;
-
-    public AbstractMQProducer() {
-        super();
-    }
-
-}
diff --git a/src/main/java/org/apache/rocketmq/common/MQCollector.java b/src/main/java/org/apache/rocketmq/common/MQCollector.java
deleted file mode 100644
index d9e3c27..0000000
--- a/src/main/java/org/apache/rocketmq/common/MQCollector.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * 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.rocketmq.common;
-
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.data.collect.DataCollector;
-import org.apache.rocketmq.util.data.collect.DataCollectorManager;
-
-public abstract class MQCollector {
-    /**
-     * messages of enqueue successfully(sent successfully)
-     */
-    protected DataCollector<Object> enqueueMessages = null;
-    protected DataCollector<Object> enqueueFailedMessages = null;
-    /**
-     * messages of dequeue successfully(Consumption return success)
-     */
-    protected volatile DataCollector<Object> dequeueMessages = null;
-    /**
-     * all messages of dequeue successfully(Contains retry message)
-     */
-    protected DataCollector<Object> dequeueAllMessages = null;
-    /**
-     * the message body of dequeue successfully(No repetition)
-     */
-    protected DataCollector<String> dequeueUndupMessageBody = null;
-    //Message sending response time collector
-    protected DataCollector msgRTs = null;
-
-    public MQCollector() {
-        enqueueMessages = DataCollectorManager.getInstance().fetchListDataCollector(RandomUtils.getStringByUUID());
-        enqueueFailedMessages = DataCollectorManager.getInstance().fetchListDataCollector(RandomUtils.getStringByUUID());
-        dequeueMessages = DataCollectorManager.getInstance().fetchListDataCollector(RandomUtils.getStringByUUID());
-        dequeueAllMessages = DataCollectorManager.getInstance().fetchListDataCollector(RandomUtils.getStringByUUID());
-        dequeueUndupMessageBody = DataCollectorManager.getInstance().fetchListDataCollector(RandomUtils.getStringByUUID());
-
-        msgRTs = DataCollectorManager.getInstance().fetchListDataCollector(RandomUtils.getStringByUUID());
-    }
-
-    public void clearMsg() {
-        enqueueMessages.resetData();
-        enqueueFailedMessages.resetData();
-        dequeueMessages.resetData();
-        dequeueAllMessages.resetData();
-        dequeueUndupMessageBody.resetData();
-        msgRTs.resetData();
-    }
-
-    public void lockCollectors() {
-        enqueueMessages.lockIncrement();
-        enqueueFailedMessages.lockIncrement();
-        dequeueMessages.lockIncrement();
-        dequeueAllMessages.lockIncrement();
-        dequeueUndupMessageBody.lockIncrement();
-        msgRTs.lockIncrement();
-    }
-
-    public DataCollector<Object> getEnqueueMessages() {
-        return enqueueMessages;
-    }
-
-    public void setEnqueueMessages(DataCollector<Object> enqueueMessages) {
-        this.enqueueMessages = enqueueMessages;
-    }
-
-    public DataCollector<Object> getEnqueueFailedMessages() {
-        return enqueueFailedMessages;
-    }
-
-    public void setEnqueueFailedMessages(
-        DataCollector<Object> enqueueFailedMessages) {
-        this.enqueueFailedMessages = enqueueFailedMessages;
-    }
-
-    public DataCollector<Object> getDequeueMessages() {
-        return dequeueMessages;
-    }
-
-    public void setDequeueMessages(DataCollector<Object> dequeueMessages) {
-        this.dequeueMessages = dequeueMessages;
-    }
-
-    public DataCollector<Object> getDequeueAllMessages() {
-        return dequeueAllMessages;
-    }
-
-    public void setDequeueAllMessages(DataCollector<Object> dequeueAllMessages) {
-        this.dequeueAllMessages = dequeueAllMessages;
-    }
-
-    public DataCollector<String> getDequeueUndupMessageBody() {
-        return dequeueUndupMessageBody;
-    }
-
-    public void setDequeueUndupMessageBody(
-        DataCollector<String> dequeueUndupMessageBody) {
-        this.dequeueUndupMessageBody = dequeueUndupMessageBody;
-    }
-
-    public DataCollector getMsgRTs() {
-        return msgRTs;
-    }
-
-    public void setMsgRTs(DataCollector msgRTs) {
-        this.msgRTs = msgRTs;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/common/MQConsumer.java b/src/main/java/org/apache/rocketmq/common/MQConsumer.java
deleted file mode 100644
index 492100f..0000000
--- a/src/main/java/org/apache/rocketmq/common/MQConsumer.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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.rocketmq.common;
-
-public interface MQConsumer {
-
-    void shutdown();
-}
diff --git a/src/main/java/org/apache/rocketmq/common/MQProducer.java b/src/main/java/org/apache/rocketmq/common/MQProducer.java
deleted file mode 100644
index e17351f..0000000
--- a/src/main/java/org/apache/rocketmq/common/MQProducer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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.rocketmq.common;
-
-public interface MQProducer {
-
-}
diff --git a/src/main/java/org/apache/rocketmq/enums/TESTSET.java b/src/main/java/org/apache/rocketmq/enums/TESTSET.java
deleted file mode 100644
index cab93f1..0000000
--- a/src/main/java/org/apache/rocketmq/enums/TESTSET.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.rocketmq.enums;
-
-/**
- * Test case tag
- */
-public class TESTSET {
-    public static final String SMOKE = "smoke";
-
-    /**
-     * delay message
-     */
-    public static final String DELAY = "delay";
-    /**
-     * normal message
-     */
-    public static final String NORMAL = "normal";
-    /**
-     * order message
-     */
-    public static final String ORDER = "order";
-    /**
-     * transaction message
-     */
-    public static final String TRANSACTION = "transaction";
-
-    public static final String PULL = "pull";
-    public static final String BATCH_CONSUME = "batchConsume";
-    public static final String DEADLETTER = "deadletter";
-    public static final String REBALANCE = "rebalance";
-    public static final String CLIENT = "client";
-    public static final String RETRY = "retry";
-    public static final String ASNYC = "async";
-    public static final String TAG = "tag";
-    public static final String SQL = "sql";
-    public static final String CLUSTER = "cluster";
-    public static final String BROADCAST = "broadcast";
-    public static final String ACL = "acl";
-    public static final String SIMPLE = "Simple";
-
-}
diff --git a/src/main/java/org/apache/rocketmq/factory/AclClient.java b/src/main/java/org/apache/rocketmq/factory/AclClient.java
deleted file mode 100644
index 6d25f2d..0000000
--- a/src/main/java/org/apache/rocketmq/factory/AclClient.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.rocketmq.factory;
-
-import org.apache.rocketmq.acl.common.AclClientRPCHook;
-import org.apache.rocketmq.acl.common.SessionCredentials;
-import org.apache.rocketmq.remoting.RPCHook;
-
-public class AclClient {
-    public static RPCHook getAclRPCHook(String ak, String sk) {
-        return new AclClientRPCHook(new SessionCredentials(ak, sk));
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/factory/BaseFactory.java b/src/main/java/org/apache/rocketmq/factory/BaseFactory.java
deleted file mode 100644
index 8db17f3..0000000
--- a/src/main/java/org/apache/rocketmq/factory/BaseFactory.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.rocketmq.factory;
-
-import org.apache.rocketmq.client.apis.ClientServiceProvider;
-
-public class BaseFactory {
-
-    protected static ClientServiceProvider provider = ClientServiceProvider.loadService();
-}
diff --git a/src/main/java/org/apache/rocketmq/factory/ClientConfigurationFactory.java b/src/main/java/org/apache/rocketmq/factory/ClientConfigurationFactory.java
deleted file mode 100644
index 45f43d1..0000000
--- a/src/main/java/org/apache/rocketmq/factory/ClientConfigurationFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.rocketmq.factory;
-
-import java.time.Duration;
-import org.apache.rocketmq.account.Account;
-import org.apache.rocketmq.client.apis.ClientConfiguration;
-
-public class ClientConfigurationFactory {
-
-    public static ClientConfiguration build(Account account) {
-//        StaticSessionCredentialsProvider staticSessionCredentialsProvider = new StaticSessionCredentialsProvider(account.getInstanceUserName(), account.getInstancePassword());
-        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-            .setEndpoints(account.getEndpoint())
-            .setRequestTimeout(Duration.ofSeconds(10))
-//                .setCredentialProvider(staticSessionCredentialsProvider)
-            .build();
-        return clientConfiguration;
-    }
-
-}
diff --git a/src/main/java/org/apache/rocketmq/factory/ConsumerFactory.java b/src/main/java/org/apache/rocketmq/factory/ConsumerFactory.java
deleted file mode 100644
index 9c45261..0000000
--- a/src/main/java/org/apache/rocketmq/factory/ConsumerFactory.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * 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.rocketmq.factory;
-
-import java.time.Duration;
-import java.util.Collections;
-import java.util.Map;
-import org.apache.rocketmq.account.Account;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.PushConsumer;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.TestUtils;
-import org.junit.jupiter.api.Assertions;
-
-public class ConsumerFactory extends BaseFactory {
-
-    public static RMQNormalConsumer getRMQPushConsumer(Account account, String topic, String consumerGroup,
-        FilterExpression filterExpression, RMQNormalListener messageListener) {
-        PushConsumer pushConsumer = null;
-        try {
-            pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(consumerGroup)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
-                .setMessageListener(messageListener)
-                .build();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return new RMQNormalConsumer(pushConsumer, messageListener);
-    }
-
-    public static PushConsumer getPushConsumer(Account account, String topic, String consumerGroup,
-        FilterExpression filterExpression, RMQNormalListener messageListener) {
-        PushConsumer pushConsumer = null;
-        try {
-            pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(consumerGroup)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
-                .setMessageListener(messageListener)
-                .build();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return pushConsumer;
-    }
-
-    public static PushConsumer getPushConsumer(Account account, String consumerGroup,
-        Map<String, FilterExpression> subscriptionExpressions,
-        RMQNormalListener messageListener) {
-        PushConsumer pushConsumer = null;
-        try {
-            pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(consumerGroup)
-                .setSubscriptionExpressions(subscriptionExpressions)
-                .setMessageListener(messageListener)
-                .build();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return pushConsumer;
-    }
-
-    public static RMQNormalConsumer getRMQSimpleConsumer(Account account, String topic, String consumerGroup,
-        FilterExpression filterExpression, Duration awaitDuration) {
-        SimpleConsumer simpleConsumer = null;
-        try {
-            simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(consumerGroup)
-                .setAwaitDuration(awaitDuration)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
-                .build();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return new RMQNormalConsumer(simpleConsumer);
-    }
-
-    public static SimpleConsumer getSimpleConsumer(Account account, String topic, String consumerGroup,
-        FilterExpression filterExpression, Duration awaitDuration) {
-        SimpleConsumer simpleConsumer = null;
-        try {
-            simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(consumerGroup)
-                .setAwaitDuration(awaitDuration)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
-                .build();
-            TestUtils.waitForSeconds(1);
-        } catch (Exception e) {
-            e.printStackTrace();
-            Assertions.fail("start [SimpleConsumer] failed, message: " + e.getMessage());
-        }
-
-        return simpleConsumer;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/factory/MQMessageFactory.java b/src/main/java/org/apache/rocketmq/factory/MQMessageFactory.java
deleted file mode 100644
index 3fbfe19..0000000
--- a/src/main/java/org/apache/rocketmq/factory/MQMessageFactory.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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.rocketmq.factory;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.rocketmq.common.message.Message;
-import org.apache.rocketmq.common.message.MessageQueue;
-import org.apache.rocketmq.util.RandomUtils;
-
-public class MQMessageFactory {
-    private static Integer index = 0;
-
-    public static List<Object> getRMQMessage(String tag, String topic, int msgSize) {
-        List<Object> msgs = new ArrayList<Object>();
-        for (int i = 0; i < msgSize; i++) {
-            msgs.add(new Message(topic, tag, RandomUtils.getStringByUUID().getBytes()));
-        }
-
-        return msgs;
-    }
-
-    public static List<Object> getRMQMessage(List<String> tags, String topic, int msgSize) {
-        List<Object> msgs = new ArrayList<Object>();
-        for (int i = 0; i < msgSize; i++) {
-            for (String tag : tags) {
-                msgs.add(new Message(topic, tag, RandomUtils.getStringByUUID().getBytes()));
-            }
-        }
-        return msgs;
-    }
-
-    public static List<Object> getMessageBody(List<Object> msgs) {
-        List<Object> msgBodys = new ArrayList<Object>();
-        for (Object msg : msgs) {
-            msgBodys.add(new String(((Message) msg).getBody()));
-        }
-
-        return msgBodys;
-    }
-
-    public static Collection<Object> getMessage(Collection<Object>... msgs) {
-        Collection<Object> allMsgs = new ArrayList<Object>();
-        for (Collection<Object> msg : msgs) {
-            allMsgs.addAll(msg);
-        }
-        return allMsgs;
-    }
-
-    public static List<Object> getDelayMsg(String topic, int delayLevel, int msgSize) {
-        List<Object> msgs = new ArrayList<Object>();
-        for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, RandomUtils.getStringByUUID().getBytes());
-            msg.setDelayTimeLevel(delayLevel);
-            msgs.add(msg);
-        }
-        return msgs;
-    }
-
-    public static List<Object> getKeyMsg(String topic, String key, int msgSize) {
-        List<Object> msgs = new ArrayList<Object>();
-        for (int i = 0; i < msgSize; i++) {
-            Message msg = new Message(topic, null, key, RandomUtils.getStringByUUID().getBytes());
-            msgs.add(msg);
-        }
-        return msgs;
-    }
-
-    public static Map<MessageQueue, List<Object>> getMsgByMQ(MessageQueue mq, int msgSize) {
-        List<MessageQueue> mqs = new ArrayList<MessageQueue>();
-        mqs.add(mq);
-        return getMsgByMQ(mqs, msgSize);
-    }
-
-    public static Map<MessageQueue, List<Object>> getMsgByMQ(List<MessageQueue> mqs, int msgSize) {
-        return getMsgByMQ(mqs, msgSize, null);
-    }
-
-    public static Map<MessageQueue, List<Object>> getMsgByMQ(List<MessageQueue> mqs, int msgSize,
-        String tag) {
-        Map<MessageQueue, List<Object>> msgs = new HashMap<MessageQueue, List<Object>>();
-        for (MessageQueue mq : mqs) {
-            msgs.put(mq, getMsg(mq.getTopic(), msgSize, tag));
-        }
-        return msgs;
-    }
-
-    public static List<Object> getMsg(String topic, int msgSize) {
-        return getMsg(topic, msgSize, null);
-    }
-
-    public static List<Object> getMsg(String topic, int msgSize, String tag) {
-        List<Object> msgs = new ArrayList<Object>();
-        while (msgSize > 0) {
-            Message msg = new Message(topic, (index++).toString().getBytes());
-            if (tag != null) {
-                msg.setTags(tag);
-            }
-            msgs.add(msg);
-            msgSize--;
-        }
-
-        return msgs;
-    }
-
-    public static List<MessageQueue> getMessageQueues(MessageQueue... mq) {
-        return Arrays.asList(mq);
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/factory/MessageFactory.java b/src/main/java/org/apache/rocketmq/factory/MessageFactory.java
deleted file mode 100644
index a27ba06..0000000
--- a/src/main/java/org/apache/rocketmq/factory/MessageFactory.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * 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.rocketmq.factory;
-
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.rocketmq.client.apis.message.MessageBuilder;
-import org.apache.rocketmq.common.message.Message;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-
-public class MessageFactory extends BaseFactory {
-
-    public static Message getRandomMessage(String topic) {
-        return getStringMessage(topic, RandomUtils.getStringByUUID());
-    }
-
-    public static Message getStringMessage(String topic, String body) {
-        Message msg = new Message(topic, body.getBytes());
-        return msg;
-    }
-
-    public static Message getStringMessageByTag(String topic, String tags, String body) {
-        Message msg = new Message(topic, tags, body.getBytes());
-        return msg;
-    }
-
-    public static Message getRandomMessageByTag(String topic, String tags) {
-        return getStringMessageByTag(topic, tags, RandomUtils.getStringByUUID());
-    }
-
-    public static Collection<Message> getRandomMessageList(String topic, int size) {
-        List<Message> msgList = new ArrayList<Message>();
-        for (int i = 0; i < size; i++) {
-            msgList.add(getRandomMessage(topic));
-        }
-        return msgList;
-    }
-
-    public static Collection<Message> getRandomMessageListByTag(String topic, String tags, int size) {
-        List<Message> msgList = new ArrayList<Message>();
-        for (int i = 0; i < size; i++) {
-            msgList.add(getRandomMessageByTag(topic, tags));
-        }
-        return msgList;
-    }
-
-    /**
-     * Generate a message with no tag and a random string for the body
-     *
-     * @param topic topic
-     * @return message
-     */
-    public static Message buildOneMessage(String topic) {
-        return new Message(topic, "", RandomUtils.getStringByUUID().getBytes());
-    }
-
-    /**
-     * Generate a message with tag and a random string for the body
-     *
-     * @param topic topic
-     * @param tag   tag
-     * @return message
-     */
-    public static Message buildOneMessageWithTag(String topic, String tag) {
-        return new Message(topic, tag, RandomUtils.getStringByUUID().getBytes());
-    }
-
-    /**
-     * Generate a message with messageBody and no tag
-     *
-     * @param topic       topic
-     * @param messageBody messageBody
-     * @return message
-     */
-    public static Message buildOneMessageWithBody(String topic, String messageBody) {
-        return new Message(topic, null, messageBody.getBytes());
-    }
-
-    /**
-     * Generate a message with specify messageBody and message
-     *
-     * @param topic topic
-     * @param tag   tag
-     * @param body  messageBody
-     * @return Message
-     */
-    public static Message buildOneMessageWithTagAndBody(String topic, String tag, String body) {
-        return new Message(topic, tag, body.getBytes());
-    }
-
-    ///**
-    // * Generate a message with specify messageBody and properties
-    // *
-    // * @param topic      topic
-    // * @param properties user-defined attribute
-    // * @return Message
-    // */
-    //public static Message buildMessageWithUserProperties(String topic, HashMap<String, String> properties) {
-    //    Message msg = new Message(topic, null, RandomUtils.getStringByUUID().getBytes());
-    //    for (Map.Entry<String, String> entry : properties.entrySet()) {
-    //        msg.putUserProperties(entry.getKey(), entry.getValue());
-    //    }
-    //    return msg;
-    //}
-    //
-
-    /**
-     * Delay message, in milliseconds (ms), delivered after the specified delay time (after the current time), for example, message delivered after 3 seconds
-     * Timed messages, in milliseconds (ms), delivered at a specified timestamp (after the current time), such as 2016-03-07 16:21:00. If set to a time before the current timestamp, the message will be delivered to the consumer immediately.
-     * @param topic
-     * @param tag
-     * @param level
-     * @return
-     */
-    public static Message buildOneMessageWithDelayTimeLevel(String topic, String tag, int level) {
-        Message msg = new Message(topic, tag, RandomUtils.getStringByUUID().getBytes());
-        msg.setDelayTimeLevel(level);
-        return msg;
-    }
-
-    public static List<Message> buildMessages(String topic, int nums) {
-        List<Message> messageList = new ArrayList<>();
-        for (int i = 0; i < nums; i++) {
-            messageList.add(new Message(topic, RandomUtils.getStringByUUID().getBytes()));
-        }
-        return messageList;
-    }
-
-    public static List<Message> buildMessages(String topic, String tag, int nums) {
-        List<Message> messageList = new ArrayList<>();
-        for (int i = 0; i < nums; i++) {
-            messageList.add(new Message(topic, tag, RandomUtils.getStringByUUID().getBytes()));
-        }
-        return messageList;
-    }
-
-    //
-    //public static Message buildOneMessageWithTagAndStartDeliverTime(String topic, String tag, long time) {
-    //    Message msg = new Message(topic, tag, RandomUtils.getStringByUUID().getBytes());
-    //    //sendTime
-    //    msg.putUserProperties("sendTime", String.valueOf(System.currentTimeMillis()));
-    //    //deliverTime
-    //    msg.putUserProperties("deliverTime", String.valueOf(time));
-    //    msg.setStartDeliverTime(time);
-    //    return msg;
-    //}
-    //
-    ///**
-    // * Timed messages, in milliseconds (ms), delivered at a specified timestamp (after the current time), such as 2016-03-07 16:21:00. If set to a time before the current timestamp, the message will be delivered to the consumer immediately.
-    // *
-    // * @param topic
-    // * @param tag
-    // * @param msgBody
-    // * @param time
-    // * @return
-    // */
-    //public static Message buildOneTimingMessageWithTag(String topic, String tag, String msgBody, String time) {
-    //    long timeStamp = 0;
-    //    try {
-    //        timeStamp = sdf.parse(time).getTime();
-    //    } catch (ParseException e) {
-    //        e.printStackTrace();
-    //    }
-    //    Message msg = new Message(topic, tag, msgBody.getBytes());
-    //    msg.putUserProperties("sendTime", String.valueOf(System.currentTimeMillis()));
-    //    msg.putUserProperties("deliverTime", String.valueOf(time));
-    //    msg.setStartDeliverTime(timeStamp);
-    //    return msg;
-    //}
-    //
-    ///**
-    // * @param topic
-    // * @param tag
-    // * @param messageBody
-    // * @param userProps
-    // * @return
-    // */
-    //public static Message buildOneMessageWithTagAndUserProps(String topic, String tag, String messageBody, HashMap<String, String> userProps) {
-    //    Message msg = new Message(topic, tag, messageBody.getBytes());
-    //    for (Map.Entry<String, String> entry : userProps.entrySet()) {
-    //        msg.putUserProperties(entry.getKey(), entry.getValue());
-    //    }
-    //    return msg;
-    //}
-    //
-    ///**
-    // * @param topic
-    // * @param tag
-    // * @param delaySeconds
-    // * @param messageBody
-    // * @param userProps
-    // * @return
-    // */
-    //public static Message buildOneDelayMessageWithTagAndUserProps(String topic, String tag, long delaySeconds, String messageBody,
-    //                                                              HashMap<String, String> userProps) {
-    //    Message msg = new Message(topic, tag, messageBody.getBytes());
-    //    //sendTime
-    //    msg.putUserProperties("sendTime", String.valueOf(System.currentTimeMillis()));
-    //    //deliverTime
-    //    msg.putUserProperties("deliverTime", String.valueOf(delaySeconds));
-    //    msg.setStartDeliverTime(delaySeconds);
-    //    for (Map.Entry<String, String> entry : userProps.entrySet()) {
-    //        msg.putUserProperties(entry.getKey(), entry.getValue());
-    //    }
-    //    return msg;
-    //}
-    public static org.apache.rocketmq.client.apis.message.Message buildMessage(String topic) {
-        org.apache.rocketmq.client.apis.message.Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setBody(RandomUtils.getStringByUUID().getBytes(StandardCharsets.UTF_8))
-            .setTag(NameUtils.getRandomTagName())
-            .build();
-        return message;
-    }
-
-    public static org.apache.rocketmq.client.apis.message.Message buildMessage(String topic, String tags) {
-        org.apache.rocketmq.client.apis.message.Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setBody(RandomUtils.getStringByUUID().getBytes(StandardCharsets.UTF_8))
-            .setKeys(RandomUtils.getStringByUUID())
-            .setTag(tags)
-            .build();
-        return message;
-    }
-
-    /**
-     * build normal message
-     *
-     * @param topic
-     * @param tags
-     * @param body
-     * @return
-     */
-    public static org.apache.rocketmq.client.apis.message.Message buildMessage(String topic, String tags, String body) {
-        org.apache.rocketmq.client.apis.message.Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setBody(body.getBytes(StandardCharsets.UTF_8))
-            .setTag(tags)
-            .setKeys(RandomUtils.getStringByUUID())
-            .build();
-        return message;
-    }
-
-    /**
-     * build normal message
-     *
-     * @param topic
-     * @param tags
-     * @param body
-     * @return
-     */
-    public static org.apache.rocketmq.client.apis.message.Message buildMessageOnlyTag(String topic, String tags,
-        String body) {
-        org.apache.rocketmq.client.apis.message.Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setBody(body.getBytes(StandardCharsets.UTF_8))
-            .setTag(tags)
-            .build();
-        return message;
-    }
-
-    /**
-     * build delay message
-     *
-     * @param topic
-     * @param tags
-     * @param body
-     * @param deliveryTimestamp
-     * @return
-     */
-    public static org.apache.rocketmq.client.apis.message.Message buildDelayMessage(String topic, String tags,
-        String body, long deliveryTimestamp) {
-        org.apache.rocketmq.client.apis.message.Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setBody(body.getBytes(StandardCharsets.UTF_8))
-            .setTag(tags)
-            .setKeys(RandomUtils.getStringByUUID())
-            .setDeliveryTimestamp(deliveryTimestamp)
-            .build();
-        return message;
-    }
-
-    /**
-     * build order message
-     *
-     * @param topic
-     * @param tags
-     * @param body
-     * @param messageGroup
-     * @return
-     */
-    public static org.apache.rocketmq.client.apis.message.Message buildOrderMessage(String topic, String tags,
-        String body, String messageGroup) {
-        org.apache.rocketmq.client.apis.message.Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setBody(body.getBytes(StandardCharsets.UTF_8))
-            .setTag(tags)
-            .setMessageGroup(messageGroup)
-            .build();
-        return message;
-    }
-
-    /**
-     * build messages with property
-     * body: random string
-     * tag: not set
-     *
-     * @param topic
-     * @param property
-     * @return Message
-     */
-    public static org.apache.rocketmq.client.apis.message.Message buildMessageWithProperty(String topic,
-        HashMap<String, String> property) {
-        MessageBuilder messageBuilder = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setBody(RandomUtils.getStringByUUID().getBytes(StandardCharsets.UTF_8));
-        for (Map.Entry<String, String> entry : property.entrySet()) {
-            messageBuilder.addProperty(entry.getKey(), entry.getValue());
-        }
-        return messageBuilder.build();
-    }
-
-    public static org.apache.rocketmq.client.apis.message.Message buildMessageWithProperty(String topic,
-        String messageBody, HashMap<String, String> property) {
-        MessageBuilder messageBuilder = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setBody(messageBody.getBytes(StandardCharsets.UTF_8));
-        for (Map.Entry<String, String> entry : property.entrySet()) {
-            messageBuilder.addProperty(entry.getKey(), entry.getValue());
-        }
-        return messageBuilder.build();
-    }
-
-    public static org.apache.rocketmq.client.apis.message.Message buildOrderMessageWithProperty(String topic,
-        String messageBody, String messageGroup, HashMap<String, String> property) {
-        MessageBuilder messageBuilder = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setMessageGroup(messageGroup)
-            .setBody(messageBody.getBytes(StandardCharsets.UTF_8));
-        for (Map.Entry<String, String> entry : property.entrySet()) {
-            messageBuilder.addProperty(entry.getKey(), entry.getValue());
-        }
-        return messageBuilder.build();
-    }
-
-    public static org.apache.rocketmq.client.apis.message.Message buildMessageWithProperty(String topic, String tag,
-        HashMap<String, String> property, String body, String... key) {
-        MessageBuilder messageBuilder = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setTag(tag)
-            .setKeys(key)
-            .setBody(body.getBytes(StandardCharsets.UTF_8));
-        for (Map.Entry<String, String> entry : property.entrySet()) {
-            messageBuilder.addProperty(entry.getKey(), entry.getValue());
-        }
-        return messageBuilder.build();
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/factory/ProducerFactory.java b/src/main/java/org/apache/rocketmq/factory/ProducerFactory.java
deleted file mode 100644
index af0c81d..0000000
--- a/src/main/java/org/apache/rocketmq/factory/ProducerFactory.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.rocketmq.factory;
-
-import org.apache.rocketmq.account.Account;
-import org.apache.rocketmq.client.apis.producer.Producer;
-import org.apache.rocketmq.client.apis.producer.TransactionChecker;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ProducerFactory extends BaseFactory {
-    private static Logger log = LoggerFactory.getLogger(ProducerFactory.class);
-
-    public static RMQNormalProducer getRMQProducer(Account account, String topic) {
-        try {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(topic)
-                .build();
-            return new RMQNormalProducer(producer);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    public static RMQNormalProducer getRMQTransProducer(Account account, String topic, TransactionChecker checker) {
-        try {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(topic)
-                .setTransactionChecker(checker)
-                .build();
-            return new RMQNormalProducer(producer);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    public static Producer getProducer(Account account, String topic) {
-        try {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(topic)
-                .build();
-            return producer;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/frame/BaseOperate.java b/src/main/java/org/apache/rocketmq/frame/BaseOperate.java
deleted file mode 100644
index 6b65615..0000000
--- a/src/main/java/org/apache/rocketmq/frame/BaseOperate.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.rocketmq.frame;
-
-import org.apache.rocketmq.client.apis.ClientServiceProvider;
-import org.apache.rocketmq.remoting.RPCHook;
-import org.apache.rocketmq.util.MQAdmin;
-import org.apache.rocketmq.util.RandomUtils;
-import org.junit.jupiter.api.Assertions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BaseOperate extends ResourceInit {
-
-    private static final Logger log = LoggerFactory.getLogger(BaseOperate.class);
-    protected static ClientServiceProvider provider = ClientServiceProvider.loadService();
-
-    protected static RPCHook rpcHook;
-
-    static {
-        if (aclEnable) {
-            log.info("acl enable");
-//            rpcHook = AclClient.getAclRPCHook(ak, sk);
-        }
-        Runtime.getRuntime().addShutdownHook(new Thread() {
-            public void run() {
-                MQAdmin.mqAdminExt.shutdown();
-                log.info("Shutdown Hook is running !");
-            }
-        });
-    }
-
-    //    //
-//    protected static Boolean fetchTopic(String instanceId, String messageType, String topic, Boolean needClean) {
-//        log.info("[Topic] instanceId:{}, messageType:{}, topicName:{}", instanceId, messageType, topic);
-//
-//        boolean useExist = true;
-//        if (topicDTO != null && topicDTO.getData() == null) {
-//            log.info(String.format("start create topic: %s ", topic));
-//            if (needClean) {
-//                topicWrapper.createTopic(primaryAccount1, account1InstanceId, topic, messageType, "auto-test", true);
-//            } else {
-//                topicWrapper.createTopicEx(primaryAccount1, account1InstanceId, topic, messageType, "auto-test", true);
-//            }
-//            topicWrapper.waitTopicExist(primaryAccount1, account1InstanceId, topic);
-//            TestUtils.waitForSeconds(42);
-//            useExist = false;
-//        } else {
-//            log.info(String.format("topic %s has already been created", topic));
-//        }
-//        return useExist;
-//    }
-//
-    protected static String getTopic(String messageType, String methodName) {
-        String topic = String.format("topic_%s_%s_%s", messageType, methodName, RandomUtils.getStringWithCharacter(6));
-        log.info("[Topic] topic:{}, messageType:{}, methodName:{}", topic, messageType, methodName);
-        boolean result = MQAdmin.createTopic(cluster, topic, 8, messageType);
-        Assertions.assertTrue(result, String.format("create topic:%s failed", topic));
-        return topic;
-    }
-
-    //    /**
-//     * will delete topic
-//     *
-//     * @param instanceId
-//     * @param messageType
-//     * @param topic
-//     * @return
-//     */
-//    protected static void getTopicRandom(String instanceId, String messageType, String topic) {
-//        log.info("[Topic] instanceId:{}, messageType:{}, topic:{}", instanceId, messageType, topic);
-//        GetTopicResponseBody topicDTO = topicWrapper.getTopic(primaryAccount1, instanceId, topic, true);
-//        if (topicDTO.getData() == null) {
-//            log.info(String.format("start create topic: %s ", topic));
-//            topicWrapper.createTopic(primaryAccount1, account1InstanceId, topic, messageType, "auto-test", true);
-//            topicWrapper.waitTopicExist(primaryAccount1, account1InstanceId, topic);
-//        } else {
-//            log.info(String.format("topic %s has already been created", topic));
-//        }
-//    }
-//
-    //The synchronization consumption retry policy is DefaultRetryPolicy
-    protected static String getGroupId(String methodName) {
-        String groupId = String.format("GID_%s_%s", methodName, RandomUtils.getStringWithCharacter(6));
-        log.info("[ConsumerGroupId] groupId:{}, methodName:{}", groupId, methodName);
-        return groupId;
-    }
-
-    //
-//    //The sequential consumption retry policy is FixedRetryPolicy
-    protected static String getOrderlyGroupId(String methodName) {
-        String groupId = String.format("GID_%s_%s", methodName, RandomUtils.getStringWithCharacter(6));
-        log.info("[ConsumerGroupId] groupId:{} methodName:{}", groupId, methodName);
-        MQAdmin.createConsumerGroup(cluster, groupId, 30);
-        return groupId;
-    }
-
-}
diff --git a/src/main/java/org/apache/rocketmq/frame/ResourceInit.java b/src/main/java/org/apache/rocketmq/frame/ResourceInit.java
deleted file mode 100644
index 2a8b237..0000000
--- a/src/main/java/org/apache/rocketmq/frame/ResourceInit.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * 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.rocketmq.frame;
-
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.apache.rocketmq.account.Account;
-import org.apache.rocketmq.util.MQAdmin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ResourceInit {
-    private static final Logger log = LoggerFactory.getLogger(ResourceInit.class);
-
-    /**
-     * Read the configuration file to use
-     */
-    public static SystemConfigFileHelper configFileHelper = new SystemConfigFileHelper();
-    public static Account account = null;
-    /**
-     * Access point Information
-     */
-    protected static String endPoint = null;
-    protected static String namesrvAddr = null;
-    protected static Boolean aclEnable = null;
-    protected static String ALL_IP;
-    protected static String cluster;
-    protected static List<String> nameserverIpList = new ArrayList<>();
-    protected static List<String> brokerIpList = new ArrayList<>();
-    protected static List<String> proxyIpList = new ArrayList<>();
-    protected static String nameserverPort = "9876";
-    protected static String endPointPort = "8081";
-    private static Properties properties = null;
-
-    static {
-        initResource();
-        MQAdmin.initMQAdminExtInstance(namesrvAddr);
-        log.info("Init process success");
-    }
-
-    private static void initResource() {
-        try {
-            String env = System.getProperty("env", "daily");
-            String region = System.getProperty("region", "daily");
-            InputStream inputStream = new FileInputStream(String.format("src/test/resources/env/%s/%s.conf", env, region));
-            log.info("INIT - use config env:{}, config:{}", env, region);
-            properties = configFileHelper.loadConfig(inputStream);
-        } catch (Exception e) {
-            log.error(ExceptionUtils.getStackTrace(e));
-            log.info("INIT - execute error,exit the process");
-            System.exit(0);
-        }
-        // init endpoint and nameserver
-        initConnectionInfo();
-        initAcl();
-
-        String endPointIp = endPoint.substring(0, endPoint.indexOf(":"));
-        String endPointPort = endPoint.substring(endPoint.lastIndexOf(":") + 1);
-        checkConnection(endPointIp, endPointPort);
-
-        String namesrvAddrIp = namesrvAddr.substring(0, namesrvAddr.indexOf(":"));
-        String namesrvAddrPort = namesrvAddr.substring(namesrvAddr.lastIndexOf(":") + 1);
-        checkConnection(namesrvAddrIp, namesrvAddrPort);
-
-    }
-
-    private static void initAcl() {
-        aclEnable = Boolean.parseBoolean(System.getProperty("aclEnable", properties.getProperty("aclEnable", "false")));
-        if (aclEnable) {
-            String instanceUsername = System.getProperty("INSTANCE_USERNAME", properties.getProperty("INSTANCE_USERNAME"));
-            String instancePassword = System.getProperty("INSTANCE_PASSWORD", properties.getProperty("INSTANCE_PASSWORD"));
-            account = new Account(instanceUsername, instancePassword);
-            log.info("INIT - acl is enabled, [instanceUsername:{}, instancePassword:{}]", instanceUsername, instancePassword);
-        } else {
-            log.info("INIT - acl is disabled");
-            account = new Account(endPoint);
-        }
-    }
-
-    private static void initConnectionInfo() {
-        ALL_IP = System.getProperty("ALL_IP", properties.getProperty("ALL_IP"));
-        if (ALL_IP != null) {
-            String[] allPodInfos = ALL_IP.split(",");
-            for (String podInfo : allPodInfos) {
-                if (podInfo.contains("nameserver")) {
-                    nameserverIpList.add(podInfo.substring(podInfo.indexOf(":") + 1));
-                } else if (podInfo.contains("broker")) {
-                    brokerIpList.add(podInfo.substring(podInfo.indexOf(":") + 1));
-                } else if (podInfo.contains("proxy")) {
-                    proxyIpList.add(podInfo.substring(podInfo.indexOf(":") + 1));
-                }
-            }
-            if (proxyIpList.isEmpty()) {
-                if (brokerIpList.isEmpty()) {
-                    log.warn("INIT- Get broker from external is empty");
-                    endPoint = System.getProperty("endPoint", properties.getProperty("endPoint"));
-                } else {
-                    endPoint = brokerIpList.get(0) + ":" + endPointPort;
-                }
-            } else {
-                log.info("INIT- Use enable-proxy model or 4.x model");
-                endPoint = proxyIpList.get(0) + ":" + endPointPort;
-            }
-            if (nameserverIpList.isEmpty()) {
-                log.warn("INIT- Get nameserver from external is empty");
-                namesrvAddr = System.getProperty("namesrvAddr", properties.getProperty("namesrvAddr"));
-            } else {
-                namesrvAddr = nameserverIpList.get(0) + ":" + nameserverPort;
-            }
-        } else {
-            log.info("INIT- Get ALL_IP is null, use local info");
-            endPoint = System.getProperty("endPoint", properties.getProperty("endPoint"));
-            namesrvAddr = System.getProperty("namesrvAddr", properties.getProperty("namesrvAddr"));
-        }
-        cluster = System.getProperty("cluster", properties.getProperty("cluster"));
-        if (cluster == null) {
-            log.error("INIT- cluster is null, system exit");
-            System.exit(-1);
-        }
-        log.info("INIT- endPoint:{}, namesrvAddr:{}, cluster:{}", endPoint, namesrvAddr, cluster);
-    }
-
-    private static void checkConnection(String ip, String port) {
-        boolean isConnected = telnet(ip, Integer.parseInt(port), 5000);
-        if (!isConnected) {
-            log.error("INIT - check: telnet {} {} ==> timeout: {}, isConnected: false", ip, port, 5000);
-            log.error("INIT - Warning, exit!!!");
-            System.exit(0);
-        } else {
-            log.info("INIT - check: telnet {} {} ==> isConnected: true", ip, port);
-        }
-    }
-
-    public static class SystemConfigFileHelper {
-        private String file;
-
-        public SystemConfigFileHelper() {
-        }
-
-        public Properties loadConfig() throws Exception {
-            InputStream in = new BufferedInputStream(new FileInputStream(file));
-            Properties properties = new Properties();
-            properties.load(in);
-            in.close();
-            return properties;
-        }
-
-        public Properties loadConfig(InputStream inputStream) throws Exception {
-            InputStream in = new BufferedInputStream(inputStream);
-            Properties properties = new Properties();
-            properties.load(in);
-            in.close();
-            return properties;
-        }
-
-        public void update(Properties properties) throws Exception {
-            log.error("[SystemConfigFileHelper] update no thing.");
-        }
-
-        public void setFile(String file) {
-            this.file = file;
-        }
-
-        public String getFile() {
-            return file;
-        }
-    }
-
-    public static boolean telnet(String hostname, int port, int timeout) {
-        Socket socket = new Socket();
-        boolean isConnected = false;
-        try {
-            socket.connect(new InetSocketAddress(hostname, port), timeout);
-            isConnected = socket.isConnected();
-        } catch (IOException e) {
-        } finally {
-            try {
-                socket.close();
-            } catch (IOException e) {
-            }
-        }
-        return isConnected;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/listener/rmq/RMQNormalListener.java b/src/main/java/org/apache/rocketmq/listener/rmq/RMQNormalListener.java
deleted file mode 100644
index 530aaec..0000000
--- a/src/main/java/org/apache/rocketmq/listener/rmq/RMQNormalListener.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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.rocketmq.listener.rmq;
-
-import java.nio.charset.StandardCharsets;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
-import org.apache.rocketmq.client.apis.consumer.MessageListener;
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.common.MQCollector;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.TestUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RMQNormalListener extends MQCollector implements MessageListener {
-    private static Logger logger = LoggerFactory.getLogger(RMQNormalListener.class);
-    private ConsumeResult consumeStatus = ConsumeResult.SUCCESS;
-    private AtomicInteger msgIndex = new AtomicInteger(0);
-    private String listenerName;
-    private int reconsumeTimes = 0;
-    private boolean isEvenNumber = false;
-    private int workTime = 0;
-
-    public RMQNormalListener() {
-        this.listenerName = RandomUtils.getStringByUUID();
-        logger.info("start listener:{}", listenerName);
-    }
-
-    public RMQNormalListener(int reconsumeTimes, ConsumeResult consumeStatus) {
-        this.listenerName = RandomUtils.getStringByUUID();
-        this.consumeStatus = consumeStatus;
-        this.reconsumeTimes = reconsumeTimes;
-        logger.info("start listener:{}", listenerName);
-    }
-
-    public RMQNormalListener(int reconsumeTimes, int workTime) {
-        this.listenerName = RandomUtils.getStringByUUID();
-        this.workTime = workTime;
-        this.reconsumeTimes = reconsumeTimes;
-        logger.info("start listener:{}", listenerName);
-    }
-
-    public RMQNormalListener(String listenerName) {
-        this.listenerName = listenerName;
-        logger.info("start listener:{}", listenerName);
-    }
-
-    public RMQNormalListener(ConsumeResult consumeStatus) {
-        this.consumeStatus = consumeStatus;
-        this.listenerName = RandomUtils.getStringByUUID();
-        logger.info("start listener:{}", listenerName);
-    }
-
-    @Override
-    public ConsumeResult consume(MessageView view) {
-        ConsumeResult result = consumeStatus;
-        if (reconsumeTimes == 0 || reconsumeTimes == view.getDeliveryAttempt() - 1) {
-            this.dequeueMessages.addData(view);
-            result = consumeStatus;
-        } else {
-            if (isEvenNumber) {
-                if (Integer.parseInt(view.getBody().toString()) % 2 != 0) {
-                    this.dequeueMessages.addData(view);
-                    result = ConsumeResult.SUCCESS;
-                }
-            }
-            TestUtils.waitForSeconds(workTime);
-        }
-
-        logger.info("{} - MessageId:{}, body:{}, tag:{},  key:{}, recvIndex:{}, property:{}, action:{}", listenerName, view.getMessageId(), StandardCharsets.UTF_8.decode(view.getBody()), view.getTag().isPresent() ? view.getTag().get() : "", view.getKeys(), msgIndex.getAndIncrement() + 1, view.getProperties(), consumeStatus);
-        return result;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/util/AssertUtils.java b/src/main/java/org/apache/rocketmq/util/AssertUtils.java
deleted file mode 100644
index 11d38c4..0000000
--- a/src/main/java/org/apache/rocketmq/util/AssertUtils.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.rocketmq.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-import org.junit.jupiter.api.Assertions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AssertUtils {
-    private static final Logger log = LoggerFactory.getLogger(AssertUtils.class);
-//    final ExecutorService threadPool = Executors.newFixedThreadPool(numThreads);
-
-    public static void assertConcurrent(final String message, final List<? extends Runnable> runnables,
-        final int maxTimeoutSeconds) throws InterruptedException {
-        final int numThreads = runnables.size();
-        final List<Throwable> exceptions = Collections.synchronizedList(new ArrayList<Throwable>());
-        final ExecutorService threadPool = Executors.newFixedThreadPool(numThreads);
-        try {
-            final CountDownLatch allExecutorThreadsReady = new CountDownLatch(numThreads);
-            final CountDownLatch afterInitBlocker = new CountDownLatch(1);
-            final CountDownLatch allDone = new CountDownLatch(numThreads);
-            for (final Runnable submittedTestRunnable : runnables) {
-                threadPool.submit(new Runnable() {
-                    public void run() {
-                        allExecutorThreadsReady.countDown();
-                        try {
-                            afterInitBlocker.await();
-                            submittedTestRunnable.run();
-                        } catch (final Throwable e) {
-                            exceptions.add(e);
-                        } finally {
-                            allDone.countDown();
-                        }
-                    }
-                });
-            }
-            // wait until all threads are ready
-            Assertions.assertTrue(allExecutorThreadsReady.await(runnables.size() * 10, TimeUnit.MILLISECONDS), "Timeout initializing threads! Perform long lasting initializations before passing runnables to assertConcurrent");
-            // start all test runners
-            afterInitBlocker.countDown();
-            Assertions.assertTrue(allDone.await(maxTimeoutSeconds, TimeUnit.SECONDS), message + " timeout! More than " + maxTimeoutSeconds + " seconds");
-        } finally {
-            log.info("exit sub thread");
-            threadPool.shutdown();
-        }
-        Assertions.assertTrue(exceptions.isEmpty(), message + " failed with exception(s)" + exceptions);
-    }
-
-    public static void assertConcurrentAtMost(final String message, final List<? extends Runnable> runnables,
-        final int maxTimeoutSeconds) throws InterruptedException {
-        final int numThreads = runnables.size();
-        final List<Throwable> exceptions = Collections.synchronizedList(new ArrayList<Throwable>());
-        final ExecutorService threadPool = Executors.newFixedThreadPool(numThreads);
-        try {
-            final CountDownLatch allExecutorThreadsReady = new CountDownLatch(numThreads);
-            final CountDownLatch afterInitBlocker = new CountDownLatch(1);
-            final CountDownLatch allDone = new CountDownLatch(numThreads);
-            for (final Runnable submittedTestRunnable : runnables) {
-                threadPool.submit(new Runnable() {
-                    public void run() {
-                        allExecutorThreadsReady.countDown();
-                        try {
-                            afterInitBlocker.await();
-                            submittedTestRunnable.run();
-                        } catch (final Throwable e) {
-                            exceptions.add(e);
-                        } finally {
-                            allDone.countDown();
-                        }
-                    }
-                });
-            }
-            // wait until all threads are ready
-            Assertions.assertTrue(allExecutorThreadsReady.await(runnables.size() * 10, TimeUnit.MILLISECONDS), "Timeout initializing threads! Perform long lasting initializations before passing runnables to assertConcurrent");
-            // start all test runners
-            afterInitBlocker.countDown();
-            allDone.await(maxTimeoutSeconds, TimeUnit.SECONDS);
-//            Assertions.assertTrue(allDone.await(maxTimeoutSeconds, TimeUnit.SECONDS), message + " timeout! More than " + maxTimeoutSeconds + " seconds");
-        } finally {
-            log.info("exit sub thread");
-            threadPool.shutdown();
-        }
-        Assertions.assertTrue(exceptions.isEmpty(), message + " failed with exception(s)" + exceptions);
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/util/DateUtils.java b/src/main/java/org/apache/rocketmq/util/DateUtils.java
deleted file mode 100644
index d37ee0d..0000000
--- a/src/main/java/org/apache/rocketmq/util/DateUtils.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.rocketmq.util;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-
-public class DateUtils {
-    private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-    /**
-     * Gets the second-level offset time of the current time
-     * offset=10 In 10 seconds  offset=-10 10 seconds ago
-     *
-     * @param offset Time of deviation
-     * @return
-     */
-    public static long getCurrentTimeOffsetBySecond(int offset) {
-
-        Calendar calendar = Calendar.getInstance();
-        calendar.add(Calendar.SECOND, offset);
-        Date beforeD = calendar.getTime();
-        long time = 0;
-        try {
-            time = SDF.parse(SDF.format(beforeD)).getTime();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return time;
-    }
-
-    /**
-     * Gets the minute-level offset time of the current time
-     *
-     * @param offset Time of deviation
-     * @return
-     */
-    public static long getCurrentTimeOffsetByMin(int offset) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.add(Calendar.MINUTE, offset);
-        Date beforeD = calendar.getTime();
-        long time = 0;
-        try {
-            time = SDF.parse(SDF.format(beforeD)).getTime();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return time;
-    }
-
-    /**
-     * Gets the hour-level offset time of the current time
-     *
-     * @param offset Time of deviation
-     * @return
-     */
-    public static long getCurrentTimeOffsetByHour(int offset) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.add(Calendar.HOUR, offset);
-        Date beforeD = calendar.getTime();
-        long time = 0;
-        try {
-            time = SDF.parse(SDF.format(beforeD)).getTime();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return time;
-    }
-
-    /**
-     * Gets the day offset time of the current time
-     *
-     * @param offset Time of deviation
-     * @return
-     */
-    public static long getCurrentTimeOffsetByDay(int offset) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.add(Calendar.DAY_OF_YEAR, offset);
-        Date beforeD = calendar.getTime();
-        long time = 0;
-        try {
-            time = SDF.parse(SDF.format(beforeD)).getTime();
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return time;
-    }
-
-    /**
-     * Formatting time stamp
-     *
-     * @param time Time of deviation
-     * @return
-     */
-    public static String format(long time) {
-        return SDF.format(time);
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/util/FileUtil.java b/src/main/java/org/apache/rocketmq/util/FileUtil.java
deleted file mode 100644
index 3c9fb93..0000000
--- a/src/main/java/org/apache/rocketmq/util/FileUtil.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * 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.rocketmq.util;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Map.Entry;
-import java.util.Properties;
-
-public class FileUtil {
-    private static String lineSeperator = System.getProperty("line.separator");
-
-    private String filePath = "";
-    private String fileName = "";
-
-    public FileUtil(String filePath, String fileName) {
-        this.filePath = filePath;
-        this.fileName = fileName;
-    }
-
-    public static void main(String[] args) {
-        String filePath = FileUtil.class.getResource("/").getPath();
-        String fileName = "test.txt";
-        FileUtil fileUtil = new FileUtil(filePath, fileName);
-        Properties properties = new Properties();
-        properties.put("xx", "yy");
-        properties.put("yy", "xx");
-        fileUtil.writeProperties(properties);
-    }
-
-    public void deleteFile() {
-        File file = new File(filePath + File.separator + fileName);
-        if (file.exists()) {
-            file.delete();
-        }
-    }
-
-    public void appendFile(String content) {
-        File file = openFile();
-        String newContent = lineSeperator + content;
-        writeFile(file, newContent, true);
-    }
-
-    public void coverFile(String content) {
-        File file = openFile();
-        writeFile(file, content, false);
-    }
-
-    public void writeProperties(Properties properties) {
-        String content = getPropertiesAsString(properties);
-        this.coverFile(content);
-    }
-
-    private String getPropertiesAsString(Properties properties) {
-        StringBuilder sb = new StringBuilder();
-        for (Entry<Object, Object> keyEnty : properties.entrySet()) {
-            sb.append(keyEnty.getKey()).append("=").append((String) keyEnty.getValue())
-                .append(lineSeperator);
-        }
-        return sb.toString();
-    }
-
-    private void writeFile(File file, String content, boolean append) {
-        FileWriter writer = null;
-        try {
-            writer = new FileWriter(file.getAbsoluteFile(), append);
-            writer.write(content);
-            writer.flush();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } finally {
-            if (writer != null) {
-                try {
-                    writer.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
-    private File openFile() {
-        File file = new File(filePath + File.separator + fileName);
-        if (!file.exists()) {
-            try {
-                file.createNewFile();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        return file;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/util/MQAdmin.java b/src/main/java/org/apache/rocketmq/util/MQAdmin.java
deleted file mode 100644
index 85d1692..0000000
--- a/src/main/java/org/apache/rocketmq/util/MQAdmin.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * 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.rocketmq.util;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.UUID;
-import org.apache.rocketmq.client.exception.MQClientException;
-import org.apache.rocketmq.common.TopicAttributes;
-import org.apache.rocketmq.common.admin.ConsumeStats;
-import org.apache.rocketmq.common.admin.TopicStatsTable;
-import org.apache.rocketmq.common.protocol.body.ClusterInfo;
-import org.apache.rocketmq.common.protocol.route.BrokerData;
-import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
-import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
-import org.apache.rocketmq.tools.command.CommandUtil;
-import org.junit.jupiter.api.Assertions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class MQAdmin {
-    private static final Logger log = LoggerFactory.getLogger(MQAdmin.class);
-    public static DefaultMQAdminExt mqAdminExt;
-
-    public static DefaultMQAdminExt initMQAdminExtInstance(String namesrvAddr) {
-        mqAdminExt = new DefaultMQAdminExt();
-        mqAdminExt.setInstanceName(UUID.randomUUID().toString());
-        mqAdminExt.setNamesrvAddr(namesrvAddr);
-        try {
-            mqAdminExt.start();
-        } catch (MQClientException e) {
-            e.printStackTrace();
-            System.exit(-1);
-        }
-        return mqAdminExt;
-    }
-
-    public static boolean createTopic(String clusterName, String topic, int queueNum) {
-        int defaultWaitTime = 30;
-        Map<String, String> attributes = new HashMap<>();
-        return createTopic(clusterName, topic, queueNum, attributes, defaultWaitTime);
-    }
-
-    public static boolean createTopic(String clusterName, String topic, int queueNum, String type) {
-        int defaultWaitTime = 30;
-        Map<String, String> attributes = new HashMap<>();
-        attributes.put("+" + TopicAttributes.TOPIC_MESSAGE_TYPE_ATTRIBUTE.getName(), type);
-        return createTopic(clusterName, topic, queueNum, attributes, defaultWaitTime);
-    }
-
-    public static boolean createTopic(String clusterName, String topic, int queueNum, Map<String, String> attributes,
-        int waitTimeSec) {
-        boolean createResult = false;
-        try {
-            mqAdminExt.createTopic(clusterName, topic, queueNum, attributes);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        long startTime = System.currentTimeMillis();
-        while (!createResult) {
-            createResult = checkTopicExist(mqAdminExt, topic);
-            if (System.currentTimeMillis() - startTime < waitTimeSec * 1000) {
-                TestUtils.waitForMoment(100);
-            } else {
-                log.error(String.format("timeout,but create topic[%s] failed!", topic));
-                break;
-            }
-        }
-        if (createResult) {
-            log.info("create topic:{} success", topic);
-        }
-        return createResult;
-    }
-
-    public static boolean createConsumerGroup(String clusterName, String groupId, int waitTimeSec) {
-        boolean createResult = false;
-        try {
-            SubscriptionGroupConfig subscriptionGroupConfig = new SubscriptionGroupConfig();
-            subscriptionGroupConfig.setConsumeBroadcastEnable(false);
-            subscriptionGroupConfig.setConsumeFromMinEnable(false);
-            subscriptionGroupConfig.setGroupName(groupId);
-            subscriptionGroupConfig.setConsumeMessageOrderly(true);
-
-            Set<String> masterSet = CommandUtil.fetchMasterAddrByClusterName(mqAdminExt, clusterName);
-            for (String addr : masterSet) {
-                mqAdminExt.createAndUpdateSubscriptionGroupConfig(addr, subscriptionGroupConfig);
-                log.info(String.format("create subscription group %s to %s success.\n", groupId, addr));
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            Assertions.fail(String.format("create groupId:%s failed", groupId));
-        }
-//        long startTime = System.currentTimeMillis();
-//        while (!createResult) {
-//            createResult = checkConsumerGroupExist(mqAdminExt, groupId);
-//            if (System.currentTimeMillis() - startTime < waitTimeSec * 1000) {
-//                TestUtils.waitForMoment(100);
-//            } else {
-//                log.error(String.format("timeout,but create consumeGroup[%s] failed!", groupId));
-//                break;
-//            }
-//        }
-//        if (createResult) {
-//            log.info("create consumeGroup:{} success", groupId);
-//        }
-        return createResult;
-    }
-
-    private static boolean checkTopicExist(DefaultMQAdminExt mqAdminExt, String topic) {
-        boolean createResult = false;
-        try {
-            TopicStatsTable topicInfo = mqAdminExt.examineTopicStats(topic);
-            createResult = !topicInfo.getOffsetTable().isEmpty();
-        } catch (Exception e) {
-        }
-        return createResult;
-    }
-
-    private static boolean checkConsumerGroupExist(DefaultMQAdminExt mqAdminExt, String consumerGroup) {
-        boolean createResult = false;
-        try {
-            ConsumeStats consumeStats = mqAdminExt.examineConsumeStats(consumerGroup);
-            createResult = !consumeStats.getOffsetTable().isEmpty();
-        } catch (Exception e) {
-        }
-        return createResult;
-    }
-
-    public static boolean createSub(String nameSrvAddr, String clusterName, String consumerId) {
-        boolean createResult = true;
-        SubscriptionGroupConfig config = new SubscriptionGroupConfig();
-        config.setGroupName(consumerId);
-        try {
-            Set<String> masterSet = CommandUtil.fetchMasterAddrByClusterName(mqAdminExt, clusterName);
-            for (String addr : masterSet) {
-                try {
-                    mqAdminExt.createAndUpdateSubscriptionGroupConfig(addr, config);
-                    log.info(String.format("create subscription group %s to %s success.\n", consumerId, addr));
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    Thread.sleep(1000 * 1);
-                }
-            }
-        } catch (Exception e) {
-            createResult = false;
-            e.printStackTrace();
-        }
-        return createResult;
-    }
-
-    public static ClusterInfo getCluster(String nameSrvAddr) {
-        ClusterInfo clusterInfo = null;
-        try {
-            clusterInfo = mqAdminExt.examineBrokerClusterInfo();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return clusterInfo;
-    }
-
-    public static boolean isBrokerExist(String ns, String ip) {
-        ClusterInfo clusterInfo = getCluster(ns);
-        if (clusterInfo == null) {
-            return false;
-        } else {
-            Map<String, BrokerData> brokers = clusterInfo.getBrokerAddrTable();
-            for (Entry<String, BrokerData> brokerEntry : brokers.entrySet()) {
-                HashMap<Long, String> brokerIps = brokerEntry.getValue().getBrokerAddrs();
-                for (Entry<Long, String> brokerIdEntry : brokerIps.entrySet()) {
-                    if (brokerIdEntry.getValue().contains(ip)) {
-                        return true;
-                    }
-                }
-            }
-        }
-
-        return false;
-    }
-
-    public static void deleteTopic(String nameSrvAddr, String cluster, String topic) {
-        try {
-            Set<String> set = new HashSet<>();
-            set.add(nameSrvAddr);
-            mqAdminExt.deleteTopicInNameServer(set, topic);
-
-            boolean isTopicExist = checkTopicExist(mqAdminExt, topic);
-            long startTime = System.currentTimeMillis();
-            while (!isTopicExist) {
-                isTopicExist = checkTopicExist(mqAdminExt, topic);
-                if (System.currentTimeMillis() - startTime < 5 * 1000) {
-                    TestUtils.waitForMoment(100);
-                } else {
-                    log.error(String.format("timeout,but delete topic[%s] failed!", topic));
-                    break;
-                }
-            }
-
-        } catch (Exception e) {
-        }
-    }
-
-    public void getSubConnection(String nameSrvAddr, String clusterName, String consumerId) {
-        SubscriptionGroupConfig config = new SubscriptionGroupConfig();
-        config.setGroupName(consumerId);
-        try {
-            Set<String> masterSet = CommandUtil.fetchMasterAddrByClusterName(mqAdminExt, clusterName);
-            for (String addr : masterSet) {
-                try {
-
-                    System.out.printf("create subscription group %s to %s success.\n", consumerId, addr);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    Thread.sleep(1000 * 1);
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-}
diff --git a/src/main/java/org/apache/rocketmq/util/MQWait.java b/src/main/java/org/apache/rocketmq/util/MQWait.java
deleted file mode 100644
index 3f3d1a4..0000000
--- a/src/main/java/org/apache/rocketmq/util/MQWait.java
+++ /dev/null
@@ -1,94 +0,0 @@
-///*
-// * 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.rocketmq.util;
-//
-//import org.apache.log4j.Logger;
-//import org.apache.rocketmq.test.listener.AbstractListener;
-//
-//import java.util.ArrayList;
-//import java.util.Collection;
-//import java.util.Collections;
-//
-//import static com.google.common.truth.Truth.assertThat;
-//
-//public class MQWait {
-//    private static Logger logger = Logger.getLogger(MQWait.class);
-//
-//    public static boolean waitConsumeAll(int timeoutMills, Collection<Object> allSendMsgs,
-//        AbstractListener... listeners) {
-//        boolean recvAll = false;
-//        long startTime = System.currentTimeMillis();
-//        Collection<Object> noDupMsgs = new ArrayList<Object>();
-//        while (!recvAll) {
-//            if ((System.currentTimeMillis() - startTime) < timeoutMills) {
-//                noDupMsgs.clear();
-//                try {
-//                    for (AbstractListener listener : listeners) {
-//                        Collection<Object> recvMsgs = Collections
-//                            .synchronizedCollection(listener.getAllUndupMsgBody());
-//                        noDupMsgs.addAll(VerifyUtils.getFilterdMessage(allSendMsgs, recvMsgs));
-//                    }
-//                } catch (Exception e) {
-//                    e.printStackTrace();
-//                }
-//
-//                try {
-//                    assertThat(noDupMsgs).containsAllIn(allSendMsgs);
-//                    recvAll = true;
-//                    break;
-//                } catch (Throwable e) {
-//                }
-//                TestUtil.waitForMonment(500);
-//            } else {
-//                logger.error(String.format(
-//                    "timeout but still not receive all messages,expectSize[%s],realSize[%s]",
-//                    allSendMsgs.size(), noDupMsgs.size()));
-//                break;
-//            }
-//        }
-//
-//        return recvAll;
-//    }
-//
-//    public static void setCondition(Condition condition, int waitTimeMills, int intervalMills) {
-//        long startTime = System.currentTimeMillis();
-//        while (!condition.meetCondition()) {
-//            if (System.currentTimeMillis() - startTime > waitTimeMills) {
-//                logger.error("time out,but contidion still not meet!");
-//                break;
-//            } else {
-//                TestUtil.waitForMonment(intervalMills);
-//            }
-//        }
-//    }
-//
-//    public static void main(String[] args) {
-//
-//        long start = System.currentTimeMillis();
-//        MQWait.setCondition(new Condition() {
-//            int i = 0;
-//
-//            public boolean meetCondition() {
-//                i++;
-//                return i == 100;
-//            }
-//        }, 10 * 1000, 200);
-//
-//    }
-//
-//}
diff --git a/src/main/java/org/apache/rocketmq/util/NameUtils.java b/src/main/java/org/apache/rocketmq/util/NameUtils.java
deleted file mode 100644
index 0336dc0..0000000
--- a/src/main/java/org/apache/rocketmq/util/NameUtils.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.rocketmq.util;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.lang3.RandomStringUtils;
-
-public class NameUtils {
-    /**
-     * Make sure not used in other cases.
-     */
-    private static Map<String, String> alreadyUsed = new ConcurrentHashMap<>();
-
-    public synchronized static String getTopicName() {
-        while (true) {
-            String topic = "topic-server-" + RandomStringUtils.randomAlphanumeric(20);
-            String used = alreadyUsed.putIfAbsent(topic, topic);
-            if (used == null) {
-                return topic;
-            }
-        }
-
-    }
-
-    public synchronized static String getGroupName() {
-        while (true) {
-            String gid = "GID-server-" + RandomStringUtils.randomAlphanumeric(20);
-            String used = alreadyUsed.putIfAbsent(gid, gid);
-            if (used == null) {
-                return gid;
-            }
-        }
-
-    }
-
-    public synchronized static String getTagName() {
-        while (true) {
-            String tag = "tag-server-" + RandomStringUtils.randomAlphanumeric(20);
-            String used = alreadyUsed.putIfAbsent(tag, tag);
-            if (used == null) {
-                return tag;
-            }
-        }
-
-    }
-
-    public synchronized static String getRandomTopicName() {
-        while (true) {
-            String topic = "topic-server-" + RandomStringUtils.randomAlphanumeric(20);
-            String used = alreadyUsed.putIfAbsent(topic, topic);
-            if (used == null) {
-                return topic;
-            }
-        }
-    }
-
-    public synchronized static String getTopicName(String messageType, String className, String methodName) {
-        while (true) {
-            String topic = String.format("topic-%s-%s", messageType, getMD5Sum(className, methodName));
-            String used = alreadyUsed.putIfAbsent(topic, topic);
-            if (used == null) {
-                return topic;
-            }
-        }
-    }
-
-    public synchronized static String getRandomTopicName(String suffix) {
-        while (true) {
-            String topic = "topic-" + RandomStringUtils.randomAlphanumeric(6) + "-" + suffix;
-            String used = alreadyUsed.putIfAbsent(topic, topic);
-            if (used == null) {
-                return topic;
-            }
-        }
-    }
-
-    public synchronized static String getRandomGroupName() {
-        while (true) {
-            String gid = "GID-server-" + RandomStringUtils.randomAlphanumeric(20);
-            String used = alreadyUsed.putIfAbsent(gid, gid);
-            if (used == null) {
-                return gid;
-            }
-        }
-    }
-
-    public synchronized static String getGroupName(String className, String methodName) {
-        while (true) {
-            String gid = String.format("GID-%s", getMD5Sum(className, methodName));
-            String used = alreadyUsed.putIfAbsent(gid, gid);
-            if (used == null) {
-                return gid;
-            }
-        }
-    }
-
-    public synchronized static String getRandomGroupName(String suffix) {
-        while (true) {
-            String gid = "GID-" + RandomStringUtils.randomAlphanumeric(6) + "-" + suffix;
-            String used = alreadyUsed.putIfAbsent(gid, gid);
-            if (used == null) {
-                return gid;
-            }
-        }
-    }
-
-    public synchronized static String getRandomTagName() {
-        while (true) {
-            String tag = "tag-server-" + RandomStringUtils.randomAlphanumeric(20);
-            String used = alreadyUsed.putIfAbsent(tag, tag);
-            if (used == null) {
-                return tag;
-            }
-        }
-
-    }
-
-    protected static String getMD5Sum(String className, String methodName) {
-        String completeName = String.format("%s-%s", className, methodName);
-        return methodName + "-" + DigestUtils.md5Hex(completeName).substring(0, 6);
-    }
-
-}
diff --git a/src/main/java/org/apache/rocketmq/util/RandomUtils.java b/src/main/java/org/apache/rocketmq/util/RandomUtils.java
deleted file mode 100644
index 0a44538..0000000
--- a/src/main/java/org/apache/rocketmq/util/RandomUtils.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.rocketmq.util;
-
-import java.util.Random;
-import java.util.UUID;
-
-public class RandomUtils {
-    private static final int UNICODE_START = '\u4E00';
-    private static final int UNICODE_END = '\u9FA0';
-    private static Random rd = new Random();
-
-    private RandomUtils() {
-
-    }
-
-    public static String getStringByUUID() {
-        return UUID.randomUUID().toString();
-    }
-
-    public static String getChineseWord(int len) {
-        StringBuilder res = new StringBuilder();
-
-        for (int i = 0; i < len; ++i) {
-            char str = getChineseChar();
-            res.append(str);
-        }
-
-        return res.toString();
-    }
-
-    public static String getStringWithNumber(int n) {
-        int[] arg = new int[] {'0', '9' + 1};
-        return getString(n, arg);
-    }
-
-    public static String getStringWithCharacter(int n) {
-        int[] arg = new int[] {'a', 'z' + 1, 'A', 'Z' + 1};
-        return getString(n, arg);
-    }
-
-    private static String getString(int n, int[] arg) {
-        StringBuilder res = new StringBuilder();
-        for (int i = 0; i < n; i++) {
-            res.append(getChar(arg));
-        }
-        return res.toString();
-    }
-
-    private static char getChar(int[] arg) {
-        int size = arg.length;
-        int c = rd.nextInt(size / 2);
-        c = c * 2;
-        return (char) (getIntegerBetween(arg[c], arg[c + 1]));
-    }
-
-    public static int getIntegerBetween(int n, int m) {
-        if (m == n) {
-            return n;
-        }
-        int res = getIntegerMoreThanZero();
-        return n + res % (m - n);
-    }
-
-    public static int getIntegerMoreThanZero() {
-        int res = rd.nextInt();
-        while (res <= 0) {
-            res = rd.nextInt();
-        }
-        return res;
-    }
-
-    private static char getChineseChar() {
-        return (char) (UNICODE_START + rd.nextInt(UNICODE_END - UNICODE_START));
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/util/TestUtils.java b/src/main/java/org/apache/rocketmq/util/TestUtils.java
deleted file mode 100644
index 6c67b0c..0000000
--- a/src/main/java/org/apache/rocketmq/util/TestUtils.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * 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.rocketmq.util;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class TestUtils {
-    private static final Logger log = LoggerFactory.getLogger(TestUtils.class);
-
-    private TestUtils() {
-    }
-
-    public static Long parseStringToLong(String s, Long defval) {
-        Long val;
-        try {
-            val = Long.parseLong(s);
-        } catch (NumberFormatException var4) {
-            val = defval;
-        }
-
-        return val;
-    }
-
-    public static Integer parseStringToInteger(String s, Integer defval) {
-        Integer val;
-        try {
-            val = Integer.parseInt(s);
-        } catch (NumberFormatException var4) {
-            val = defval;
-        }
-
-        return val;
-    }
-
-    public static String addQuoteToParamater(String param) {
-        StringBuilder sb = new StringBuilder("'");
-        sb.append(param).append("'");
-        return sb.toString();
-    }
-
-    public static void waitForMoment(long time) {
-        try {
-            Thread.sleep(time);
-        } catch (InterruptedException var3) {
-            var3.printStackTrace();
-        }
-
-    }
-
-    public static void waitForSeconds(long time) {
-        try {
-            log.info("waiting {} seconds...", time);
-            TimeUnit.SECONDS.sleep(time);
-        } catch (InterruptedException var3) {
-            var3.printStackTrace();
-        }
-
-    }
-
-    public static void waitForMinutes(long time) {
-        try {
-            log.info("waiting {} minutes...", time);
-            TimeUnit.MINUTES.sleep(time);
-        } catch (InterruptedException var3) {
-            var3.printStackTrace();
-        }
-
-    }
-
-    public static void waitForInputQuit() {
-        waitForInput("quit");
-    }
-
-    public static void waitForInput(String keyWord) {
-        waitForInput(keyWord, String.format("The thread will wait until you input stop command[%s]:", keyWord));
-    }
-
-    public static void waitForInput(String keyWord, String info) {
-        try {
-            byte[] b = new byte[1024];
-            int n = System.in.read(b);
-
-            for (String s = (new String(b, 0, n - 1)).replace("\r", "").replace("\n", ""); !s.equals(keyWord); s = new String(b, 0, n - 1)) {
-                n = System.in.read(b);
-            }
-        } catch (IOException var5) {
-            var5.printStackTrace();
-        }
-
-    }
-
-    public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
-        List<Map.Entry<K, V>> list = new LinkedList(map.entrySet());
-        Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
-            @Override
-            public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
-                return ((Comparable) o1.getValue()).compareTo(o2.getValue());
-            }
-        });
-        Map<K, V> result = new LinkedHashMap();
-        Iterator var3 = list.iterator();
-
-        while (var3.hasNext()) {
-            Map.Entry<K, V> entry = (Map.Entry) var3.next();
-            result.put(entry.getKey(), entry.getValue());
-        }
-
-        return result;
-    }
-
-}
diff --git a/src/main/java/org/apache/rocketmq/util/VerifyUtils.java b/src/main/java/org/apache/rocketmq/util/VerifyUtils.java
deleted file mode 100644
index 84f6657..0000000
--- a/src/main/java/org/apache/rocketmq/util/VerifyUtils.java
+++ /dev/null
@@ -1,1067 +0,0 @@
-/*
- * 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.rocketmq.util;
-
-import java.nio.charset.StandardCharsets;
-import java.text.SimpleDateFormat;
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.util.data.collect.DataCollector;
-import org.junit.jupiter.api.Assertions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class VerifyUtils {
-    private static final Logger log = LoggerFactory.getLogger(VerifyUtils.class);
-    private static final int TIMEOUT = 90;
-    private static AtomicInteger receivedIndex = new AtomicInteger(0);
-    private static int defaultSimpleThreadNums = 4;
-
-    /**
-     * check order message
-     * point: every shardingkey is orderly
-     *
-     * @param receivedMessage
-     * @return
-     */
-    public static boolean checkOrderMessage(ConcurrentHashMap<String, LinkedList<Object>> receivedMessage) {
-        for (Map.Entry<String, LinkedList<Object>> stringLinkedListEntry : receivedMessage.entrySet()) {
-            StringBuilder sb = new StringBuilder(String.format("shardingKey %s,message order: ", stringLinkedListEntry.getKey()));
-            int preNode = -1;
-            LinkedList<Object> messages = stringLinkedListEntry.getValue();
-
-            String tag = ((MessageView) messages.getFirst()).getTag().toString();
-            for (Object message : messages) {
-                MessageView messageView = (MessageView) message;
-                if (!messageView.getTag().toString().equals(tag)) {
-                    preNode = -1;
-                }
-                int curNode = Integer.parseInt(StandardCharsets.UTF_8.decode(messageView.getBody()).toString());
-                sb.append(curNode).append(",");
-                if (preNode > curNode) {
-                    log.error(sb.toString());
-                    return false;
-                }
-                preNode = curNode;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * check normal message
-     *
-     * @param enqueueMessages
-     * @param dequeueMessages
-     */
-    public static void verifyNormalMessage(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages) {
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, TIMEOUT * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-    }
-
-    public static void verifyNormalMessage(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages, Set<String> unconsumedMsgIds, int timeout) {
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, timeout * 1000L, 1);
-//        if (unConsumedMessages.size() == 0) {
-//            Assertions.fail(String.format("Messages are all consumed"));
-//        } else {
-//            for (Object messageId : unConsumedMessages) {
-//                unconsumedMsgIds.removeIf(msgId -> ((String)messageId).equals(msgId));
-//            }
-//        }
-        Set<Object> unConsumedMessagesCopy = new HashSet<>(unConsumedMessages);
-        unConsumedMessagesCopy.removeAll(unconsumedMsgIds);
-        StringBuilder sb = new StringBuilder();
-        if (!unConsumedMessages.containsAll(unconsumedMsgIds)) {
-            unconsumedMsgIds.removeAll(unConsumedMessages);
-            log.info(unconsumedMsgIds.size() + "messages are consumed:" + unconsumedMsgIds.size());
-            sb.append("The following ").append(unconsumedMsgIds.size()).append(" messages are consumed:").append(unconsumedMsgIds);
-            Assertions.fail(sb.toString());
-        }
-        if (unConsumedMessagesCopy.size() > 0) {
-            log.info(unConsumedMessagesCopy.size() + "messages are not consumed:" + unConsumedMessagesCopy);
-            MessageView messageView = (MessageView) dequeueMessages.getFirstElement();
-            sb.append(messageView.getTopic()).append(" The following").append(unConsumedMessagesCopy.size()).append("messages are not consumed:").append(unConsumedMessagesCopy);
-            Assertions.fail(sb.toString());
-        }
-
-    }
-
-    public static void verifyNormalMessage(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages, int timeout) {
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, timeout * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-    }
-
-    /**
-     * General message checker, whether the subscribed message is the same as the sent message
-     *
-     * @param enqueueMessages Send the enqueuing message set
-     * @param dequeueMessages Consume the outgoing message set
-     * @param messageBody     Body of message
-     */
-    public static void verifyNormalMessageWithBody(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages, String messageBody) {
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, TIMEOUT * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-        Collection<Object> receivedMessages = dequeueMessages.getAllData();
-        List<Object> messages = new ArrayList<>(receivedMessages);
-        for (Object message : messages) {
-            MessageView messageView = (MessageView) message;
-            Assertions.assertEquals(messageBody, StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), "The messageBody you subscribed to did not match your expectations");
-        }
-    }
-
-    /**
-     * Sequential message inspector
-     *
-     * @param enqueueMessages Send the enqueuing message set
-     * @param dequeueMessages Consume the outgoing message set
-     */
-    public static void verifyOrderMessage(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages) {
-        //Check whether the consumption is complete
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, TIMEOUT * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("%s The following %s messages are not consumed: %s", unConsumedMessages.toArray()[0], unConsumedMessages.size(), unConsumedMessages));
-        }
-        //Check for sequential consumption             log.warn(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        Assertions.assertTrue(checkOrder(dequeueMessages), "Message out of order");
-    }
-
-    /**
-     * Delayed and timed message checker
-     *
-     * @param enqueueMessages Send the enqueuing message set
-     * @param dequeueMessages Consume the outgoing message set
-     * @param delayTime       Estimated consumption time required
-     */
-    public static void verifyDelayMessage(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages, int delayTime) {
-        //Check whether the consumption is complete
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages,
-            (TIMEOUT + delayTime) * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-        //Check for consumption latency
-        HashMap<String, Long> delayUnExcept = checkDelay(dequeueMessages, 5);
-        StringBuilder sb = new StringBuilder();
-        sb.append("The following messages do not meet the delay requirements \n");
-        for (String msg : delayUnExcept.keySet()) {
-            sb.append(msg).append(" , interval:").append(delayUnExcept.get(msg)).append("\n");
-        }
-        Assertions.assertEquals(0, delayUnExcept.size(), sb.toString());
-    }
-
-    /**
-     * @param enqueueMessages Send the enqueuing message set
-     * @param dequeueMessages Consume the outgoing message set
-     * @param delayTime       Time of delay
-     * @param count           The amount that is not consumed
-     */
-    public static void verifyDelayMessageWithUnConsumeCount(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages, int delayTime,
-        int count) {
-        //Check whether the consumption is complete
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, (TIMEOUT + delayTime) * 1000L, 1);
-        if (unConsumedMessages.size() > count) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-        //Check for consumption latency
-        HashMap<String, Long> delayUnExcept = checkDelay(dequeueMessages, TIMEOUT + 5);
-        StringBuilder sb = new StringBuilder();
-        sb.append("The following message does not meet the delay requirement \n");
-        //Time stamp formatting
-        SimpleDateFormat date = new SimpleDateFormat("ss");
-        for (String msg : delayUnExcept.keySet()) {
-            sb.append(msg).append(" , interval:").append("Difference between" + date.format(new Date(Long.parseLong(String.valueOf(delayUnExcept.get(msg))))) + "s").append(
-                "\n");
-        }
-        Assertions.assertEquals(0, delayUnExcept.size(), sb.toString());
-    }
-
-    /**
-     * @param enqueueMessages Send the enqueuing message set
-     * @param dequeueMessages Consume the outgoing message set
-     * @param delayTime       Time of delay
-     * @param reconsumeTime   Number of retries
-     */
-    public static void verifyDelayMessageWithReconsumeTimes(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages, int delayTime,
-        int reconsumeTime) {
-        int flexibleTime = TIMEOUT;
-        if (reconsumeTime == 1) {
-            flexibleTime = flexibleTime + 10;
-        } else if (reconsumeTime == 2) {
-            flexibleTime = flexibleTime + 10 + 30;
-        } else if (reconsumeTime == 3) {
-            flexibleTime = flexibleTime + 10 + 30 + 60;
-        } else if (reconsumeTime == 4) {
-            flexibleTime = flexibleTime + 10 + 30 + 60 + 120;
-        }
-        //Check whether the consumption is complete
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, (flexibleTime + delayTime) * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-        //Check for consumption latency
-        HashMap<String, Long> delayUnExcept = checkDelay(dequeueMessages, 5 + flexibleTime - 30);
-        StringBuilder sb = new StringBuilder();
-        sb.append("The following message does not meet the delay requirement \n");
-        for (String msg : delayUnExcept.keySet()) {
-            sb.append(msg).append(" , interval:").append(delayUnExcept.get(msg)).append("\n");
-        }
-        Assertions.assertEquals(0, delayUnExcept.size(), sb.toString());
-    }
-
-    public static void verifyNormalMessageWithReconsumeTimes(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages,
-        int reconsumeTime) {
-        int flexibleTime = TIMEOUT;
-        if (reconsumeTime == 1) {
-            flexibleTime = flexibleTime + 10;
-        } else if (reconsumeTime == 2) {
-            flexibleTime = flexibleTime + 10 + 30;
-        } else if (reconsumeTime == 3) {
-            flexibleTime = flexibleTime + 10 + 30 + 60;
-        } else if (reconsumeTime == 4) {
-            flexibleTime = flexibleTime + 10 + 30 + 60 + 120;
-        }
-        //Check whether the consumption is complete
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, flexibleTime * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-    }
-
-    /**
-     * Verify message retry consumption
-     *
-     * @param enqueueMessages    List of messages to send
-     * @param dequeueAllMessages A list of messages to consume
-     * @param consumedTimes      The number of repeated purchases
-     */
-    public static void verifyRetryConsume(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueAllMessages, int consumedTimes) {
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueAllMessages, TIMEOUT * 1000L, consumedTimes);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-    }
-
-    /**
-     * Transaction message inspector
-     *
-     * @param enqueueMessages Send the enqueuing message set
-     * @param dequeueMessages Consume the outgoing message set
-     */
-    public static void checkTransactionMessage(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages) {
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, TIMEOUT * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-    }
-
-    private static HashMap<String, Long> checkDelay(DataCollector<Object> dequeueMessages, int offset) {
-        HashMap<String, Long> map = new HashMap<>();
-        Collection<Object> receivedMessages = dequeueMessages.getAllData();
-        for (Object receivedMessage : receivedMessages) {
-            MessageView messageView = (MessageView) receivedMessage;
-            Optional<Long> startDeliverTime = messageView.getDeliveryTimestamp();
-            //Check the current time and the distribution time. If the difference is within 5s, the requirements are met
-            long bornTimestamp = messageView.getBornTimestamp();
-            //if ()
-//            if (Math.abs(startDeliverTime.get() - bornTimestamp) / 1000 > DelayConf.DELAY_LEVEL[messageView.getDeliveryAttempt() - 1] + offset) {
-//                map.put(messageView.getMessageId().toString(), (startDeliverTime.get() - bornTimestamp) / 1000);
-//            }
-        }
-        return map;
-    }
-
-    /**
-     * Check the orderliness of the messages
-     *
-     * @param dequeueMessages A collection of received messages
-     * @return Partition order or not
-     */
-    private static boolean checkOrder(DataCollector<Object> dequeueMessages) {
-        Collection<Object> receivedMessages = dequeueMessages.getAllData();
-        ConcurrentHashMap<String, LinkedList<Object>> map = new ConcurrentHashMap<>();
-        for (Object receivedMessage : receivedMessages) {
-            MessageView messageView = (MessageView) receivedMessage;
-            String shardingKey = String.valueOf(messageView.getMessageGroup());
-            LinkedList<Object> messages;
-            if (map.containsKey(shardingKey)) {
-                messages = map.get(shardingKey);
-                messages.add(receivedMessage);
-            } else {
-                messages = new LinkedList<>();
-                messages.add(receivedMessage);
-                map.put(shardingKey, messages);
-            }
-        }
-        return checkOrderMessage(map);
-    }
-
-    /**
-     * Check that all the messages sent are consumed
-     *
-     * @param enqueueMessages Send the enqueuing message set
-     * @param dequeueMessages Consume the outgoing message set
-     * @param timeoutMills    Checking the timeout Period
-     * @param consumedTimes
-     * @return A collection of messages that are not consumed
-     */
-    private static Collection<Object> waitForMessageConsume(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages,
-        Long timeoutMills, Integer consumedTimes) {
-        log.info("Set timeout: {}ms", timeoutMills);
-
-        Collection<Object> sendMessages = new ArrayList<>(enqueueMessages.getAllData());
-
-        long currentTime = System.currentTimeMillis();
-
-        while (!sendMessages.isEmpty()) {
-//            log.info("param1:{}, param2:{}", enqueueMessages.getDataSize(), dequeueMessages.getDataSize());
-            List<Object> receivedMessagesCopy = new ArrayList<>(dequeueMessages.getAllData());
-            Iterator<Object> iter = sendMessages.iterator();
-            while (iter.hasNext()) {
-                String enqueueMessageId = (String) iter.next();
-//                String messageId = (MessageView) message;
-
-                long msgCount = receivedMessagesCopy.stream().filter(
-                    msg -> {
-                        MessageView messageView = (MessageView) msg;
-                        return messageView.getMessageId().toString().equals(enqueueMessageId);
-                    }).count();
-                if (msgCount > 0 && getRepeatedTimes(receivedMessagesCopy, enqueueMessageId) == consumedTimes) {
-                    iter.remove();
-                } else if (getRepeatedTimes(receivedMessagesCopy, enqueueMessageId) > consumedTimes) {
-                    Assertions.fail(
-                            String.format("More retry messages were consumed than expected (including one original message) Except:%s, Actual:%s, MsgId:%s", consumedTimes, getRepeatedTimes(receivedMessagesCopy, enqueueMessageId),
-                                    enqueueMessageId));
-                    //log.error("More retry messages were consumed than expected, Except:{}, Actual:{}", consumedTimes, getRepeatedTimes(receivedMessagesCopy, message));
-                }
-            }
-            if (sendMessages.isEmpty()) {
-                break;
-            }
-            if (System.currentTimeMillis() - currentTime >= timeoutMills) {
-                log.error("Timeout but not received all send messages, send {} , recv {}, not received msg: {}\n received msg:{}\n",
-                    enqueueMessages.getDataSize(), receivedMessagesCopy.size(), sendMessages, receivedMessagesCopy);
-                break;
-            }
-            TestUtils.waitForMoment(500L);
-        }
-        return sendMessages;
-    }
-
-    private static synchronized int getRepeatedTimes(Collection<Object> recvMsgs, String enqueueMessageId) {
-        int count = 0;
-        for (Object recvMsg : recvMsgs) {
-            MessageView messageView = (MessageView) recvMsg;
-            if (messageView.getMessageId().toString().equals(enqueueMessageId)) {
-                count++;
-            }
-        }
-        return count;
-    }
-
-    /**
-     * Validation of sql attribute filtering
-     *
-     * @param enqueueMessages A message sent
-     * @param dequeueMessages News of consumption
-     * @param props           The desired attribute condition is not met
-     */
-    public static void verifyNormalMessageWithUserProperties(DataCollector<Object> enqueueMessages,
-        DataCollector<Object> dequeueMessages, HashMap<String, String> props, int expectedUnrecvMsgNum) {
-        Collection<Object> unConsumedMessages = waitForMessageConsume(enqueueMessages, dequeueMessages, TIMEOUT * 1000L, 1);
-        Collection<Object> recvMsgs = dequeueMessages.getAllData();
-        for (Object unConsumedMessage : recvMsgs) {
-            MessageView messageView = (MessageView) unConsumedMessage;
-            for (Map.Entry<String, String> entry : props.entrySet()) {
-                Map<String, String> msgProperties = messageView.getProperties();
-                for (Map.Entry<String, String> property : msgProperties.entrySet()) {
-                    if (property.getKey().equals(entry.getKey()) && property.getValue().equals(entry.getValue())) {
-                        Assertions.fail("sql attribute filtering is not in effect, consuming messages to other attributes," + messageView.getProperties().toString());
-                    }
-                }
-            }
-        }
-        if (unConsumedMessages.size() != expectedUnrecvMsgNum) {
-            Assertions.fail("Failed to consume all the sent data by sql filter");
-        }
-    }
-
-    /**
-     * Verifying Cluster Consumption
-     *
-     * @param enqueueMessages    All messages sent
-     * @param dequeueAllMessages Multiple consumer end, consumption of all messages
-     */
-    @SafeVarargs
-    public static void verifyClusterConsume(DataCollector<Object> enqueueMessages,
-        DataCollector<Object>... dequeueAllMessages) {
-        long currentTime = System.currentTimeMillis();
-        List<Object> sendMessagesCopy = new ArrayList<>(enqueueMessages.getAllData());
-
-        while (!sendMessagesCopy.isEmpty()) {
-            Collection<Object> noDupMsgs = new ArrayList<>();
-            for (DataCollector<Object> messages : dequeueAllMessages) {
-                noDupMsgs.addAll(messages.getAllData());
-                //log.info("consumer received message: {}", messages.getDataSize());
-            }
-            log.info("sendMessagesCopy left: {}", sendMessagesCopy.size());
-
-            List<Object> receivedMessagesCopy = new ArrayList<>(noDupMsgs);
-            Iterator<Object> iter = sendMessagesCopy.iterator();
-            while (iter.hasNext()) {
-                Object object = iter.next();
-                String messageId = (String) object;
-                long msgCount = receivedMessagesCopy.stream().filter(msg -> ((MessageView) msg).getMessageId().toString().equals(messageId)).count();
-                if (msgCount > 0 && getRepeatedTimes(receivedMessagesCopy, messageId) == 1) {
-                    iter.remove();
-                }
-            }
-            if (sendMessagesCopy.isEmpty()) {
-                break;
-            }
-            if (System.currentTimeMillis() - currentTime >= 60000L) {
-                log.error("Timeout but not received all send messages, not received msg: {}\n received msg:{}\n", sendMessagesCopy, receivedMessagesCopy);
-                break;
-            }
-            TestUtils.waitForMoment(500L);
-        }
-
-        Assertions.assertEquals(0, sendMessagesCopy.size(), String.format("The following %s messages are not consumed: %s", sendMessagesCopy.size(), sendMessagesCopy));
-
-    }
-
-    /**
-     * Verify no consumption for a period of time
-     *
-     * @param receivedMessages
-     * @param timeout          time
-     */
-    public static void waitForConsumeFailed(DataCollector<Object> receivedMessages, int timeout) {
-        long currentTime = System.currentTimeMillis();
-        while (currentTime + timeout * 1000L > System.currentTimeMillis()) {
-            if (receivedMessages.getDataSize() > 0) {
-                Assertions.fail("Consume to message");
-                break;
-            }
-            TestUtils.waitForSeconds(5);
-        }
-    }
-
-    public static void verifyNormalMessage(RMQNormalProducer producer, RMQNormalConsumer consumer) {
-        log.info("The verification process starts......");
-        Collection<Object> unConsumedMessages = waitForMessageConsume(producer.getEnqueueMessages(), consumer.getDequeueMessages(), TIMEOUT * 1000L, 1);
-        if (unConsumedMessages.size() > 0) {
-            Assertions.fail(String.format("The following %s messages are not consumed: %s", unConsumedMessages.size(), unConsumedMessages));
-        }
-    }
-
-    public static void tryReceiveOnce(SimpleConsumer consumer) {
-        tryReceiveOnce(consumer, false, false);
-    }
-
-    public static void tryReceiveOnce(SimpleConsumer consumer, Boolean useExistTopic, Boolean useExistGid) {
-        long start = System.currentTimeMillis();
-        if (!useExistTopic || !useExistGid) {
-            CompletableFuture[] cfs = new CompletableFuture[5];
-            for (int i = 0; i < 5; i++) {
-                log.info("Try pulling a message once");
-                CompletableFuture<List<MessageView>> future = consumer.receiveAsync(32, Duration.ofSeconds(10));
-                future.thenAccept(messageViews -> {
-                    if (messageViews.size() > 0) {
-                        for (MessageView messageView : messageViews) {
-                            receivedIndex.getAndIncrement();
-                            log.info("MessageId:{}, Body:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                            try {
-                                consumer.ack(messageView);
-                            } catch (ClientException e) {
-                                throw new RuntimeException(e);
-                            }
-                        }
-                    }
-                });
-                cfs[i] = future;
-            }
-            try {
-                CompletableFuture.allOf(cfs).get(30, TimeUnit.SECONDS);
-                log.info("receive server response, cost={}ms", System.currentTimeMillis() - start);
-            } catch (Exception e) {
-                throw new RuntimeException("receive response count not match");
-            }
-        }
-    }
-
-    public static void waitReceiveThenAckAsync(RMQNormalProducer producer, SimpleConsumer consumer, int maxMessageNum,
-        Duration invisibleDuration) {
-        long endTime = System.currentTimeMillis() + TIMEOUT * 1000;
-        List<Runnable> runnables = new ArrayList<>();
-        Collection<Object> sendCollection = Collections.synchronizedCollection(producer.getEnqueueMessages().getAllData());
-        for (int i = 0; i < defaultSimpleThreadNums; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        while (endTime > System.currentTimeMillis()) {
-                            final List<MessageView> messageViews = consumer.receive(maxMessageNum, invisibleDuration);
-                            if (messageViews.size() > 0) {
-                                for (MessageView messageView : messageViews) {
-                                    receivedIndex.getAndIncrement();
-                                    log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                        StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                                    CompletableFuture<Void> future = consumer.ackAsync(messageView);
-                                    future.thenAccept(new Consumer<Void>() {
-                                        @Override
-                                        public void accept(Void unused) {
-                                            log.info("ack async success");
-                                            sendCollection.removeIf(sendMessageId -> sendMessageId.equals(messageView.getMessageId().toString()));
-                                        }
-                                    });
-                                    future.exceptionally(new Function<Throwable, Void>() {
-                                        @Override
-                                        public Void apply(Throwable throwable) {
-                                            throwable.printStackTrace();
-                                            Assertions.fail(String.format("ack async failed: %s", throwable.getMessage()));
-                                            return null;
-                                        }
-                                    });
-                                    try {
-                                        future.get();
-                                    } catch (Exception e) {
-                                        e.printStackTrace();
-                                    }
-                                }
-                            }
-                            log.info("Pull message: {} bar, remaining unconsumed message: {} bar", messageViews.size(), sendCollection.size());
-                            if (sendCollection.size() == 0) {
-                                break;
-                            }
-                        }
-                        Assertions.assertEquals(0, sendCollection.size(), String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-                    } catch (ClientException e) {
-                        Assertions.fail(e.getMessage());
-                    }
-                }
-            });
-        }
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, TIMEOUT + 5);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void waitReceiveThenAck(RMQNormalProducer producer, SimpleConsumer consumer, int maxMessageNum,
-        Duration invisibleDuration) {
-        long endTime = System.currentTimeMillis() + TIMEOUT * 1000;
-
-        List<Runnable> runnables = new ArrayList<>(8);
-        Collection<Object> sendCollection = Collections.synchronizedCollection(producer.getEnqueueMessages().getAllData());
-        for (int i = 0; i < defaultSimpleThreadNums; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        while (endTime > System.currentTimeMillis()) {
-                            final List<MessageView> messageViews = consumer.receive(maxMessageNum, invisibleDuration);
-                            if (messageViews.size() > 0) {
-                                for (MessageView messageView : messageViews) {
-                                    receivedIndex.getAndIncrement();
-                                    log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                        StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                                    consumer.ack(messageView);
-                                    sendCollection.removeIf(sendMessageId -> sendMessageId.equals(messageView.getMessageId().toString()));
-                                }
-                            }
-                            log.info("Pull message: {} bar, remaining unconsumed message: {} bar", messageViews.size(), sendCollection.size());
-                            if (sendCollection.size() == 0) {
-                                break;
-                            }
-                        }
-                        Assertions.assertTrue(sendCollection.size() == 0, String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-                    } catch (ClientException e) {
-                        Assertions.fail(e.getMessage());
-                    }
-                }
-            });
-        }
-
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, TIMEOUT + 5);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void waitFIFOReceiveThenAck(RMQNormalProducer producer, SimpleConsumer consumer,
-        int maxMessageNum,
-        Duration invisibleDuration) {
-        long endTime = System.currentTimeMillis() + TIMEOUT * 1000;
-        Collection<Object> sendCollection = producer.getEnqueueMessages().getAllData();
-        ConcurrentHashMap<String, LinkedList<Object>> map = new ConcurrentHashMap<>();
-        try {
-            while (endTime > System.currentTimeMillis()) {
-                final List<MessageView> messageViews = consumer.receive(maxMessageNum, invisibleDuration);
-                if (messageViews.size() > 0) {
-                    for (MessageView messageView : messageViews) {
-                        receivedIndex.getAndIncrement();
-                        log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                            StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                        consumer.ack(messageView);
-                        sendCollection.removeIf(sendMessageId -> sendMessageId.equals(messageView.getMessageId().toString()));
-                        String shardingKey = String.valueOf(messageView.getMessageGroup());
-                        LinkedList<Object> messages;
-                        if (map.containsKey(shardingKey)) {
-                            messages = map.get(shardingKey);
-                            messages.add(messageView);
-                        } else {
-                            messages = new LinkedList<>();
-                            messages.add(messageView);
-                            map.put(shardingKey, messages);
-                        }
-                    }
-                }
-                log.info("Pull message: {} bar, remaining unconsumed message: {} bar", messageViews.size(), sendCollection.size());
-                if (sendCollection.size() == 0) {
-                    Assertions.assertTrue(checkOrderMessage(map), "Consumption is not sequential");
-                }
-            }
-            Assertions.assertTrue(sendCollection.size() == 0, String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-        } catch (ClientException e) {
-            Assertions.fail(e.getMessage());
-        }
-    }
-
-    public static void waitReceiveAsyncThenAck(RMQNormalProducer producer, SimpleConsumer consumer,
-        int maxMessageNum,
-        Duration invisibleDuration) {
-        long endTime = System.currentTimeMillis() + TIMEOUT * 1000;
-        Collection<Object> sendCollection = Collections.synchronizedCollection(producer.getEnqueueMessages().getAllData());
-
-        List<Runnable> runnables = new ArrayList<>();
-        for (int i = 0; i < defaultSimpleThreadNums; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    while (endTime > System.currentTimeMillis()) {
-                        if (sendCollection.size() == 0) {
-                            break;
-                        }
-                        final CompletableFuture<List<MessageView>> future = consumer.receiveAsync(maxMessageNum, invisibleDuration);
-                        future.thenAccept(new Consumer<List<MessageView>>() {
-                            @Override
-                            public void accept(List<MessageView> messageViews) {
-                                log.info("Get {} message: {}", messageViews.size(), Arrays.toString(messageViews.toArray()));
-                                if (messageViews.size() > 0) {
-                                    for (MessageView messageView : messageViews) {
-                                        receivedIndex.getAndIncrement();
-                                        log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                            StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                                        try {
-                                            consumer.ack(messageView);
-                                            sendCollection.removeIf(sendMessageId -> sendMessageId.equals(messageView.getMessageId().toString()));
-                                        } catch (ClientException e) {
-                                            e.printStackTrace();
-                                        }
-                                    }
-                                    log.info("Pull message: {} bar, remaining unconsumed message: {} bar", messageViews.size(), sendCollection.size());
-                                }
-                            }
-                        });
-                        future.exceptionally(new Function<Throwable, List<MessageView>>() {
-                            @Override
-                            public List<MessageView> apply(Throwable throwable) {
-                                throwable.printStackTrace();
-//                    log.info("received async failed:{}", throwable.getMessage());
-                                Assertions.fail(String.format("received async failed:%s", throwable.getMessage()));
-                                return null;
-                            }
-                        });
-                        try {
-                            future.get();
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                    Assertions.assertEquals(0, sendCollection.size(), String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-                }
-            });
-        }
-
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, TIMEOUT + 5);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void waitReceiveAsyncThenAckAsync(RMQNormalProducer producer, SimpleConsumer consumer,
-        int maxMessageNum, Duration invisibleDuration) {
-        long endTime = System.currentTimeMillis() + TIMEOUT * 1000;
-        Collection<Object> sendCollection = Collections.synchronizedCollection(producer.getEnqueueMessages().getAllData());
-
-        List<Runnable> runnables = new ArrayList<>();
-        for (int i = 0; i < defaultSimpleThreadNums; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    while (endTime > System.currentTimeMillis()) {
-                        if (sendCollection.size() == 0) {
-                            break;
-                        }
-                        final CompletableFuture<List<MessageView>> future = consumer.receiveAsync(maxMessageNum, invisibleDuration);
-                        future.thenAccept(new Consumer<List<MessageView>>() {
-                            @Override
-                            public void accept(List<MessageView> messageViews) {
-                                log.info("Get {} message: {}", messageViews.size(), Arrays.toString(messageViews.toArray()));
-                                if (messageViews.size() > 0) {
-                                    for (MessageView messageView : messageViews) {
-                                        receivedIndex.getAndIncrement();
-                                        log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                            StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                                        CompletableFuture<Void> ackFuture = consumer.ackAsync(messageView);
-                                        ackFuture.thenAccept(new Consumer<Void>() {
-                                            @Override
-                                            public void accept(Void unused) {
-                                                log.info("ack async success");
-                                                sendCollection.removeIf(sendMessageId -> sendMessageId.equals(messageView.getMessageId().toString()));
-                                            }
-                                        });
-                                        ackFuture.exceptionally(new Function<Throwable, Void>() {
-                                            @Override
-                                            public Void apply(Throwable throwable) {
-                                                throwable.printStackTrace();
-                                                Assertions.fail(String.format("ack async failed: %s", throwable.getMessage()));
-                                                return null;
-                                            }
-                                        });
-                                        try {
-                                            ackFuture.get();
-                                        } catch (Exception e) {
-                                            e.printStackTrace();
-                                        }
-                                    }
-                                    log.info("Pull message: {} bar, remaining unconsumed message: {} bar", messageViews.size(), sendCollection.size());
-                                }
-                            }
-                        });
-                        future.exceptionally(new Function<Throwable, List<MessageView>>() {
-                            @Override
-                            public List<MessageView> apply(Throwable throwable) {
-                                throwable.printStackTrace();
-                                Assertions.fail(String.format("received async failed:%s", throwable.getMessage()));
-                                return null;
-                            }
-                        });
-                        try {
-                            future.get();
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                    Assertions.assertTrue(sendCollection.size() == 0, String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-                }
-            });
-        }
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, TIMEOUT + 5);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void waitReceiveThenNack(RMQNormalProducer producer, SimpleConsumer consumer, int maxMessageNum,
-        Duration receiveInvisibleDuration, Duration changeInvisibleDuration) {
-
-        long endTime = System.currentTimeMillis() + TIMEOUT * 1000;
-        Collection<Object> sendCollection = producer.getEnqueueMessages().getAllData();
-        try {
-            while (endTime > System.currentTimeMillis()) {
-                final List<MessageView> messageViews = consumer.receive(maxMessageNum, receiveInvisibleDuration);
-                if (messageViews.size() > 0) {
-                    for (MessageView messageView : messageViews) {
-                        receivedIndex.getAndIncrement();
-                        log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                            StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                        if (changeInvisibleDuration != null) {
-                            consumer.changeInvisibleDuration(messageView, changeInvisibleDuration);
-                            log.info("Change the invisibility duration of [{}] to (changeInvisibleDuration): {}", messageView.getMessageId().toString(), changeInvisibleDuration);
-                        }
-                        sendCollection.removeIf(sendMessageId -> sendMessageId.equals(messageView.getMessageId().toString()));
-                    }
-                }
-                log.info("Pull message: {} bar, remaining unconsumed message: {} bar", messageViews.size(), sendCollection.size());
-                if (sendCollection.size() == 0) {
-                    break;
-                }
-            }
-            Assertions.assertTrue(sendCollection.size() == 0, String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-        } catch (ClientException e) {
-            Assertions.fail(e.getMessage());
-        }
-    }
-
-    public static void waitReceiveThenAck(RMQNormalProducer producer, SimpleConsumer consumer, int maxMessageNum,
-        Duration invisibleDuration, int consumeTimes) {
-        ConcurrentHashMap<String, Integer> msgMap = new ConcurrentHashMap<>();
-        ConcurrentHashMap<String, Long> msgTimeMap = new ConcurrentHashMap<>();
-        List<Runnable> runnables = new ArrayList<>(4);
-        Collection<Object> sendCollection = Collections.synchronizedCollection(producer.getEnqueueMessages().getAllData());
-
-        for (int i = 0; i < 4; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    long endTime = System.currentTimeMillis() + TIMEOUT * 1000;
-                    try {
-                        while (endTime > System.currentTimeMillis()) {
-                            final List<MessageView> messageViews = consumer.receive(maxMessageNum, invisibleDuration);
-                            if (messageViews.size() > 0) {
-                                for (MessageView messageView : messageViews) {
-                                    receivedIndex.getAndIncrement();
-                                    log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                        StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                                    String receivedMessageId = messageView.getMessageId().toString();
-
-                                    //Processing repeated consuming messages
-                                    if (msgMap.containsKey(receivedMessageId)) {
-                                        msgMap.put(receivedMessageId, msgMap.get(receivedMessageId) + 1);
-                                    } else {
-                                        msgMap.put(receivedMessageId, 1);
-                                    }
-
-                                    //Calculate the time between consumption
-                                    if (msgTimeMap.containsKey(receivedMessageId)) {
-                                        Long preTime = msgTimeMap.get(receivedMessageId);
-                                        Long currentTime = System.currentTimeMillis();
-                                        msgTimeMap.put(receivedMessageId, currentTime);
-                                        //Determine the time error of the retry message
-                                        if ((currentTime - preTime) < (invisibleDuration.getSeconds() - 3) * 1000 || (currentTime - preTime) > (invisibleDuration.getSeconds() + 3) * 1000) {
-                                            String info = String.format("currentTime:%s, preTime:%s, invisibleDuration:%s, actual:%s", DateUtils.format(currentTime), DateUtils.format(preTime), invisibleDuration.getSeconds() * 1000, currentTime - preTime);
-                                            log.info(info);
-                                            Assertions.fail(info + String.format(", Not between %s and %s", invisibleDuration.getSeconds() - 2, invisibleDuration.getSeconds() + 2));
-                                        }
-                                    } else {
-                                        msgTimeMap.put(receivedMessageId, System.currentTimeMillis());
-                                    }
-
-                                    if (msgMap.get(receivedMessageId).equals(consumeTimes)) {
-                                        consumer.ack(messageView);
-                                    }
-                                }
-                            }
-                            sendCollection.removeIf(sendMessageId -> getRepeatedTimes(msgMap, sendMessageId) == consumeTimes);
-
-                            log.info("Pull message: {} bar, remaining unconsumed message: {} bar, need to consume: {} times", messageViews.size(), sendCollection.size(), consumeTimes);
-                            if (sendCollection.size() == 0) {
-                                break;
-                            }
-                        }
-                        Assertions.assertTrue(sendCollection.size() == 0, String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-                    } catch (ClientException e) {
-                        Assertions.fail(e.getMessage());
-                    }
-                }
-            });
-        }
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, TIMEOUT + 5);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void waitReceiveThenAck(RMQNormalProducer producer, SimpleConsumer consumer, int maxMessageNum,
-        Duration invisibleDuration, int consumeTimes, int waitTime, boolean needAck) {
-        ConcurrentHashMap<String, Integer> msgMap = new ConcurrentHashMap<>();
-        ConcurrentHashMap<String, Long> msgTimeMap = new ConcurrentHashMap<>();
-        List<Runnable> runnables = new ArrayList<>(4);
-        Collection<Object> sendCollection = Collections.synchronizedCollection(producer.getEnqueueMessages().getAllData());
-
-        for (int i = 0; i < 4; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    long endTime = System.currentTimeMillis() + waitTime * 1000;
-                    try {
-                        while (endTime > System.currentTimeMillis()) {
-                            final List<MessageView> messageViews = consumer.receive(maxMessageNum, invisibleDuration);
-                            if (messageViews.size() > 0) {
-                                for (MessageView messageView : messageViews) {
-                                    receivedIndex.getAndIncrement();
-                                    log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                        StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                                    String receivedMessageId = messageView.getMessageId().toString();
-
-                                    //Processing repeated consuming messages
-                                    if (msgMap.containsKey(receivedMessageId)) {
-                                        msgMap.put(receivedMessageId, msgMap.get(receivedMessageId) + 1);
-                                    } else {
-                                        msgMap.put(receivedMessageId, 1);
-                                    }
-
-                                    //Calculate the time between consumption
-                                    if (msgTimeMap.containsKey(receivedMessageId)) {
-                                        Long preTime = msgTimeMap.get(receivedMessageId);
-                                        Long currentTime = System.currentTimeMillis();
-                                        msgTimeMap.put(receivedMessageId, currentTime);
-                                        //Determine the time error of the retry message
-                                        if ((currentTime - preTime) < (invisibleDuration.getSeconds() - 2) * 1000 || (currentTime - preTime) > (invisibleDuration.getSeconds() + 2) * 1000) {
-                                            String info = String.format("currentTime:%s, preTime:%s, invisibleDuration:%s, actual:%s", currentTime, preTime, invisibleDuration.getSeconds() * 1000, currentTime - preTime);
-                                            log.info(info);
-//                                            Assertions.fail(info + String.format(", Not between %s and %s", invisibleDuration.getSeconds() - 2, invisibleDuration.getSeconds() + 2));
-                                        }
-                                    } else {
-                                        msgTimeMap.put(receivedMessageId, System.currentTimeMillis());
-                                    }
-
-                                    if (needAck) {
-                                        if (msgMap.get(receivedMessageId).equals(consumeTimes)) {
-                                            consumer.ack(messageView);
-                                        }
-                                    }
-                                }
-                            }
-                            if (needAck) {
-                                sendCollection.removeIf(sendMessageId -> getRepeatedTimes(msgMap, sendMessageId) == consumeTimes);
-                            }
-                            log.info("Pull message: {} bar, remaining unconsumed message: {} bar, need to consume: {} times", messageViews.size(), sendCollection.size(), consumeTimes);
-
-                            if (sendCollection.size() == 0) {
-                                break;
-                            }
-                        }
-
-                        if (needAck) {
-                            Assertions.assertTrue(sendCollection.size() == 0, String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-                        } else {
-                            for (Object obj : sendCollection) {
-                                if (msgMap.containsKey((String) obj)) {
-                                    log.info("Retry times: {}", msgMap.get((String) obj));
-                                    if (msgMap.get((String) obj) != consumeTimes) {
-                                        Assertions.fail(String.format("[ %s ] the number of retry times is invalid, expect:%s, actual:%s", obj, msgMap.get((String) obj), consumeTimes));
-                                    }
-                                }
-                            }
-                        }
-                    } catch (ClientException e) {
-                        Assertions.fail(e.getMessage());
-                    }
-                }
-            });
-        }
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, TIMEOUT + 5);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void waitDelayReceiveThenAck(RMQNormalProducer producer, SimpleConsumer consumer,
-        int maxMessageNum, long delayTimeMillis) {
-        long endTime = System.currentTimeMillis() + TIMEOUT * 1000;
-        Collection<Object> sendCollection = Collections.synchronizedCollection(producer.getEnqueueMessages().getAllData());
-        List<Runnable> runnables = new ArrayList<>();
-        for (int i = 0; i < 4; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        while (endTime > System.currentTimeMillis()) {
-                            final List<MessageView> messageViews = consumer.receive(maxMessageNum, Duration.ofSeconds(10));
-                            if (messageViews.size() > 0) {
-                                for (MessageView messageView : messageViews) {
-                                    receivedIndex.getAndIncrement();
-                                    log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Index:{}, Retry:{}", messageView.getMessageId(),
-                                        StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), receivedIndex.get(), messageView.getDeliveryAttempt());
-                                    consumer.ack(messageView);
-                                    long bornTimestamp = messageView.getBornTimestamp();
-                                    long startDeliverTime = messageView.getDeliveryTimestamp().get();
-                                    //Check the current time and the distribution time. If the difference is within 5s, the requirements are met
-                                    if (Math.abs((startDeliverTime - bornTimestamp) - delayTimeMillis) > 5 * 1000L) {
-                                        Assertions.fail(String.format("Message [%s] does not meet latency requirements, TIMER_ENQUEUE_MS:%s, startDeliverTime:%s, delay:%s", messageView.getMessageId().toString(), bornTimestamp, startDeliverTime, startDeliverTime - bornTimestamp));
-                                    }
-                                    sendCollection.removeIf(sendMessageId -> sendMessageId.equals(messageView.getMessageId().toString()));
-                                }
-                            }
-                            log.info("Pull message: {} bar, remaining unconsumed message: {} bar", messageViews.size(), sendCollection.size());
-                            if (sendCollection.size() == 0) {
-                                break;
-                            }
-                        }
-                        Assertions.assertTrue(sendCollection.size() == 0, String.format("Remaining [%s] unconsumed messages: %s", sendCollection.size(), Arrays.toString(sendCollection.toArray())));
-                    } catch (ClientException e) {
-                        e.printStackTrace();
-                        Assertions.fail(e.getMessage());
-                    }
-                }
-            });
-        }
-
-        try {
-            AssertUtils.assertConcurrent("Test Failed ", runnables, TIMEOUT + 15);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static int getRepeatedTimes(ConcurrentHashMap<String, Integer> receivedMsg, Object sendMessageId) {
-        if (receivedMsg.containsKey((String) sendMessageId)) {
-            return receivedMsg.get((String) sendMessageId);
-        }
-        return 0;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/util/data/collect/DataCollector.java b/src/main/java/org/apache/rocketmq/util/data/collect/DataCollector.java
deleted file mode 100644
index 2283182..0000000
--- a/src/main/java/org/apache/rocketmq/util/data/collect/DataCollector.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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.rocketmq.util.data.collect;
-
-import java.util.Collection;
-
-public interface DataCollector<T> {
-    /**
-     * Return count to zero
-     */
-    void resetData();
-
-    /**
-     * Get all the collected data, including duplicate data
-     *
-     * @return
-     */
-    Collection<T> getAllData();
-
-    /**
-     * Get the collected nonduplicate data
-     *
-     * @return
-     */
-    Collection<T> getAllDataWithoutDuplicate();
-
-    /**
-     * Adding Data
-     */
-    void addData(T data);
-
-    /**
-     * Get the total number of non-duplicate data
-     *
-     * @return
-     */
-    long getDataSizeWithoutDuplicate();
-
-    /**
-     * Get the total number of all data, including duplicates
-     *
-     * @return
-     */
-    long getDataSize();
-
-    /**
-     * Verify that one piece of data is duplicated
-     *
-     * @return
-     */
-    boolean isRepeatedData(T data);
-
-    /**
-     * Gets the number of times a piece of data is repeated
-     *
-     * @return
-     */
-    int getRepeatedTimeForData(T data);
-
-    /**
-     * Removing a piece of Data
-     *
-     * @return
-     */
-    void removeData(T data);
-
-    /**
-     * Lock the counter so that it does not increase, but can be deleted
-     *
-     * @return
-     */
-    void lockIncrement();
-
-    /**
-     * Contact counter locks so that it can be added and removed
-     *
-     * @return
-     */
-    void unlockIncrement();
-
-    T getFirstElement();
-}
diff --git a/src/main/java/org/apache/rocketmq/util/data/collect/DataCollectorManager.java b/src/main/java/org/apache/rocketmq/util/data/collect/DataCollectorManager.java
deleted file mode 100644
index ea2c471..0000000
--- a/src/main/java/org/apache/rocketmq/util/data/collect/DataCollectorManager.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * 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.rocketmq.util.data.collect;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.rocketmq.util.data.collect.impl.ListDataCollectorImpl;
-import org.apache.rocketmq.util.data.collect.impl.MapDataCollectorImpl;
-
-public final class DataCollectorManager {
-    private static DataCollectorManager instance = new DataCollectorManager();
-    private Map<String, DataCollector> collectMap = new HashMap<String, DataCollector>();
-    private Object lock = new Object();
-
-    private DataCollectorManager() {
-    }
-
-    public static DataCollectorManager getInstance() {
-        return instance;
-    }
-
-    public DataCollector fetchDataCollector(String key) {
-        String realKey = key;
-        if (!collectMap.containsKey(realKey)) {
-            synchronized (lock) {
-                if (!collectMap.containsKey(realKey)) {
-                    DataCollector collect = (DataCollector) new MapDataCollectorImpl();
-                    collectMap.put(realKey, collect);
-                }
-            }
-        }
-        return collectMap.get(realKey);
-    }
-
-    public DataCollector fetchMapDataCollector(String key) {
-        String realKey = key;
-        if (!collectMap.containsKey(realKey)
-            || collectMap.get(realKey) instanceof ListDataCollectorImpl) {
-            synchronized (lock) {
-                if (!collectMap.containsKey(realKey)
-                    || collectMap.get(realKey) instanceof ListDataCollectorImpl) {
-                    DataCollector collect = null;
-                    if (collectMap.containsKey(realKey)) {
-                        DataCollector src = collectMap.get(realKey);
-                        collect = new MapDataCollectorImpl(src.getAllData());
-                    } else {
-                        collect = new MapDataCollectorImpl();
-                    }
-                    collectMap.put(realKey, collect);
-
-                }
-            }
-        }
-        return collectMap.get(realKey);
-    }
-
-    public DataCollector fetchListDataCollector(String key) {
-        String realKey = key;
-        if (!collectMap.containsKey(realKey)
-            || collectMap.get(realKey) instanceof MapDataCollectorImpl) {
-            synchronized (lock) {
-                if (!collectMap.containsKey(realKey)
-                    || collectMap.get(realKey) instanceof MapDataCollectorImpl) {
-                    DataCollector collect = null;
-                    if (collectMap.containsKey(realKey)) {
-                        DataCollector src = collectMap.get(realKey);
-                        collect = new ListDataCollectorImpl(src.getAllData());
-                    } else {
-                        collect = new ListDataCollectorImpl();
-                    }
-                    collectMap.put(realKey, collect);
-                }
-            }
-        }
-        return collectMap.get(realKey);
-    }
-
-    public void resetDataCollect(String key) {
-        if (collectMap.containsKey(key)) {
-            collectMap.get(key).resetData();
-        }
-    }
-
-    public void resetAll() {
-        for (Map.Entry<String, DataCollector> entry : collectMap.entrySet()) {
-            entry.getValue().resetData();
-        }
-    }
-
-    public void removeDataCollect(String key) {
-        collectMap.remove(key);
-    }
-
-    public void removeAll() {
-        collectMap.clear();
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/util/data/collect/DataFilter.java b/src/main/java/org/apache/rocketmq/util/data/collect/DataFilter.java
deleted file mode 100644
index 9fd1fe9..0000000
--- a/src/main/java/org/apache/rocketmq/util/data/collect/DataFilter.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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.rocketmq.util.data.collect;
-
-public interface DataFilter {
-
-}
diff --git a/src/main/java/org/apache/rocketmq/util/data/collect/impl/ListDataCollectorImpl.java b/src/main/java/org/apache/rocketmq/util/data/collect/impl/ListDataCollectorImpl.java
deleted file mode 100644
index 264326a..0000000
--- a/src/main/java/org/apache/rocketmq/util/data/collect/impl/ListDataCollectorImpl.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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.rocketmq.util.data.collect.impl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import org.apache.rocketmq.util.data.collect.DataCollector;
-
-public class ListDataCollectorImpl implements DataCollector {
-
-    private List<Object> datas = new ArrayList<Object>();
-    private boolean lock = false;
-
-    public ListDataCollectorImpl() {
-
-    }
-
-    public ListDataCollectorImpl(Collection<Object> datas) {
-        for (Object data : datas) {
-            addData(data);
-        }
-    }
-
-    public Collection<Object> getAllData() {
-        return datas;
-    }
-
-    public synchronized void resetData() {
-        datas.clear();
-        unlockIncrement();
-    }
-
-    public long getDataSizeWithoutDuplicate() {
-        return getAllDataWithoutDuplicate().size();
-    }
-
-    public synchronized void addData(Object data) {
-        if (lock) {
-            return;
-        }
-        datas.add(data);
-    }
-
-    public long getDataSize() {
-        return datas.size();
-    }
-
-    public boolean isRepeatedData(Object data) {
-        return Collections.frequency(datas, data) == 1;
-    }
-
-    public synchronized Collection<Object> getAllDataWithoutDuplicate() {
-        return new HashSet<Object>(datas);
-    }
-
-    public int getRepeatedTimeForData(Object data) {
-        int res = 0;
-        for (Object obj : datas) {
-            if (obj.equals(data)) {
-                res++;
-            }
-        }
-        return res;
-    }
-
-    public synchronized void removeData(Object data) {
-        datas.remove(data);
-    }
-
-    public void lockIncrement() {
-        lock = true;
-    }
-
-    public void unlockIncrement() {
-        lock = false;
-    }
-
-    @Override
-    public Object getFirstElement() {
-        return null;
-    }
-}
diff --git a/src/main/java/org/apache/rocketmq/util/data/collect/impl/MapDataCollectorImpl.java b/src/main/java/org/apache/rocketmq/util/data/collect/impl/MapDataCollectorImpl.java
deleted file mode 100644
index 93a326c..0000000
--- a/src/main/java/org/apache/rocketmq/util/data/collect/impl/MapDataCollectorImpl.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.rocketmq.util.data.collect.impl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.rocketmq.util.data.collect.DataCollector;
-
-public class MapDataCollectorImpl implements DataCollector {
-
-    private Map<Object, AtomicInteger> datas = new ConcurrentHashMap<Object, AtomicInteger>();
-    private boolean lock = false;
-
-    public MapDataCollectorImpl() {
-
-    }
-
-    public MapDataCollectorImpl(Collection<Object> datas) {
-        for (Object data : datas) {
-            addData(data);
-        }
-    }
-
-    public synchronized void addData(Object data) {
-        if (lock) {
-            return;
-        }
-        if (datas.containsKey(data)) {
-            datas.get(data).addAndGet(1);
-        } else {
-            datas.put(data, new AtomicInteger(1));
-        }
-    }
-
-    public Collection<Object> getAllData() {
-        List<Object> lst = new ArrayList<Object>();
-        for (Entry<Object, AtomicInteger> entry : datas.entrySet()) {
-            for (int i = 0; i < entry.getValue().get(); i++) {
-                lst.add(entry.getKey());
-            }
-        }
-        return lst;
-    }
-
-    public long getDataSizeWithoutDuplicate() {
-        return datas.keySet().size();
-    }
-
-    public void resetData() {
-        datas.clear();
-        unlockIncrement();
-    }
-
-    public long getDataSize() {
-        long sum = 0;
-        for (AtomicInteger count : datas.values()) {
-            sum = sum + count.get();
-        }
-        return sum;
-    }
-
-    public boolean isRepeatedData(Object data) {
-        if (datas.containsKey(data)) {
-            return datas.get(data).get() == 1;
-        }
-        return false;
-    }
-
-    public Collection<Object> getAllDataWithoutDuplicate() {
-        return datas.keySet();
-    }
-
-    public int getRepeatedTimeForData(Object data) {
-        if (datas.containsKey(data)) {
-            return datas.get(data).intValue();
-        }
-        return 0;
-    }
-
-    public void removeData(Object data) {
-        datas.remove(data);
-    }
-
-    public void lockIncrement() {
-        lock = true;
-    }
-
-    public void unlockIncrement() {
-        lock = false;
-    }
-
-    @Override
-    public Object getFirstElement() {
-        return null;
-    }
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/client/consumer/ConsumerGroupTest.java b/src/test/java/org/apache/rocketmq/broker/client/consumer/ConsumerGroupTest.java
deleted file mode 100644
index 3201e06..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/consumer/ConsumerGroupTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.rocketmq.broker.client.consumer;
-
-import java.io.IOException;
-import java.time.Duration;
-import java.util.Collections;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-@Tag(TESTSET.CLIENT)
-public class ConsumerGroupTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(ConsumerGroupTest.class);
-    private static String topic;
-    private static String className;
-    private SimpleConsumer consumer;
-
-    @BeforeAll
-    public static void setUpAll() {
-        className = ConsumerGroupTest.class.getName();
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (consumer != null) {
-            try {
-                consumer.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    @Test
-    @DisplayName("Use the built-in ConsumerGroup[DEFAULT_CONSUMER] to consume messages and expect consume failed")
-    public void testSystemInnerConsumerGroup() {
-        String groupId = "DEFAULT_CONSUMER";
-        assertThrows(Exception.class, () -> {
-            consumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setAwaitDuration(Duration.ofSeconds(10))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .build();
-            consumer.receive(32, Duration.ofSeconds(10));
-        }, "Expected Start [SimpleConsumer] Exception to throw, but it didn't");
-    }
-
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/client/consumer/PushConsumerInitTest.java b/src/test/java/org/apache/rocketmq/broker/client/consumer/PushConsumerInitTest.java
deleted file mode 100644
index 716adb6..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/consumer/PushConsumerInitTest.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * 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.rocketmq.broker.client.consumer;
-
-import java.util.Collections;
-import java.util.HashMap;
-import org.apache.rocketmq.client.apis.ClientConfiguration;
-import org.apache.rocketmq.client.apis.StaticSessionCredentialsProvider;
-import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.PushConsumer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ClientConfigurationFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.util.TestUtils;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-/**
- * PushConsumer client initialization use case
- */
-@Tag(TESTSET.CLIENT)
-public class PushConsumerInitTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(PushConsumerInitTest.class);
-    private static String topic;
-    private static String groupId;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        groupId = getGroupId(methodName);
-        TestUtils.waitForSeconds(2);
-    }
-
-    @BeforeEach
-    public void setUp() {
-
-    }
-
-    @AfterEach
-    public void tearDown() {
-    }
-
-    @AfterAll
-    public static void tearDownAll() {
-    }
-
-    @Test
-    @DisplayName("PushConsumer all parameters are set properly, expect start success")
-    public void testNormalSetting() {
-        try {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setConsumptionThreadCount(20)
-                .setMaxCacheMessageCount(1000)
-                .setMaxCacheMessageSizeInBytes(4 * 1024 * 1024)
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        } catch (Exception e) {
-            Assertions.fail("Start [PushConsumer] failed, expected success, message: " + e.getMessage());
-        }
-    }
-
-    @Disabled
-    @Tag(TESTSET.ACL)
-    @DisplayName("Error setting the AccessKey of the consumer client,expect start failed")
-    public void testErrorAK() {
-        StaticSessionCredentialsProvider staticSessionCredentialsProvider = new StaticSessionCredentialsProvider("errorAk", account.getSecretKey());
-        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-            .setEndpoints(account.getEndpoint())
-            .setCredentialProvider(staticSessionCredentialsProvider)
-            .build();
-
-        assertThrows(Exception.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(clientConfiguration)
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-
-    @Disabled
-    @Tag(TESTSET.ACL)
-    @DisplayName("Error setting the SecretKey of the consumer client,expect start failed")
-    public void testErrorSK() {
-        StaticSessionCredentialsProvider staticSessionCredentialsProvider = new StaticSessionCredentialsProvider(account.getAccessKey(), "errorSk");
-        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-            .setEndpoints(account.getEndpoint())
-            .setCredentialProvider(staticSessionCredentialsProvider)
-            .build();
-
-        assertThrows(Exception.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(clientConfiguration)
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @Tag(TESTSET.ACL)
-    @DisplayName("Error setting the 'EndPoint' of the consumer client,expect start failed")
-    public void testErrorNameserver() {
-        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-            .setEndpoints("https://www.aliyun.com")
-            .build();
-
-        assertThrows(Exception.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(clientConfiguration)
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("Set the consumer client's topic error, expecting a message receiving failure to throw an Exception")
-    public void testErrorTopic() {
-        assertThrows(Exception.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap("topicNotExist", FilterExpression.SUB_ALL))
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("Without setting ConsumerGroup, expect PushConsumer NPE exception to start")
-    public void testNoGroupId() {
-        assertThrows(Exception.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The 'SubscriptionExpressions' is not set, expect PushConsumer IllegalArgumentException exception to start")
-    public void testNoSubscription() {
-        assertThrows(Exception.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(groupId)
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("Set an empty SubscriptionExpressions, expecting PushConsumer IllegalArgumentException to be raised")
-    public void testEmptySubscription() {
-        assertThrows(Exception.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(new HashMap<>())
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The 'ClientConfiguration' is not set. PushConsumer NPE exception is expected")
-    public void testNoClientConfiguration() {
-        assertThrows(NullPointerException.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setMessageListener(messageView -> {
-                    return ConsumeResult.SUCCESS;
-                })
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The 'MessageListener' is not set. PushConsumer NPE exception is expected")
-    public void testNoListener() {
-        assertThrows(NullPointerException.class, () -> {
-            PushConsumer pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .build();
-            pushConsumer.close();
-        }, "Expected Start [PushConsumer] ClientException to throw, but it didn't");
-    }
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/client/consumer/SimpleConsumerInitTest.java b/src/test/java/org/apache/rocketmq/broker/client/consumer/SimpleConsumerInitTest.java
deleted file mode 100644
index 6fe84a9..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/consumer/SimpleConsumerInitTest.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * 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.rocketmq.broker.client.consumer;
-
-import java.time.Duration;
-import java.util.Collections;
-import java.util.HashMap;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ClientConfigurationFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-@Tag(TESTSET.CLIENT)
-public class SimpleConsumerInitTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(SimpleConsumerInitTest.class);
-    private static String topic;
-    private static String groupId;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        groupId = getGroupId(methodName);
-    }
-
-    @BeforeEach
-    public void setUp() {
-
-    }
-
-    @AfterEach
-    public void tearDown() {
-    }
-
-    @AfterAll
-    public static void tearDownAll() {
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer all parameters are set properly, expect start success")
-    public void testNormalSetting() {
-        try {
-            SimpleConsumer simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(groupId)
-                .setAwaitDuration(Duration.ofSeconds(10))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .build();
-            simpleConsumer.close();
-        } catch (Exception e) {
-            Assertions.fail("Start [SimpleConsumer] failed, expected success, message: " + e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start without setting 'ClientConfiguration', expect throw exception")
-    public void testNoClientConfiguration() {
-        assertThrows(NullPointerException.class, () -> {
-            SimpleConsumer simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setAwaitDuration(Duration.ofSeconds(10))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .build();
-        }, "Expected Start [SimpleConsumer] Exception to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start without setting 'ConsumerGroup', expect throw exception")
-    public void testNoConsumerGroup() {
-        assertThrows(Exception.class, () -> {
-            SimpleConsumer simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setAwaitDuration(Duration.ofSeconds(10))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .build();
-        }, "Expected Start [SimpleConsumer] Exception to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start without setting 'Subscription', expect throw exception")
-    public void testNoSubscription() {
-        assertThrows(Exception.class, () -> {
-            SimpleConsumer simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setAwaitDuration(Duration.ofSeconds(10))
-                .build();
-        }, "Expected Start [SimpleConsumer] Exception to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start without setting 'AwaitDuration', expect throw exception ")
-    public void testNoAwaitDuration() {
-        assertThrows(Exception.class, () -> {
-            SimpleConsumer simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .build();
-        }, "Expected Start [SimpleConsumer] Exception to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start setting empty 'AwaitDuration', expect throw exception ")
-    public void testEmptySubscription() {
-        assertThrows(Exception.class, () -> {
-            SimpleConsumer simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(new HashMap<>())
-                .setAwaitDuration(Duration.ofSeconds(10))
-                .build();
-        }, "Expected Start [SimpleConsumer] Exception to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start setting 'AwaitDuration=0', except invoke 'receive()' throw exception")
-    public void testAwaitDurationIs0s() {
-        SimpleConsumer simpleConsumer = null;
-        try {
-            simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setAwaitDuration(Duration.ofSeconds(0))
-                .build();
-            simpleConsumer.receive(1, Duration.ofSeconds(10));
-        } catch (ClientException e) {
-            e.printStackTrace();
-            Assertions.fail("SimpleConsumer start failed");
-        }
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start setting 'MaxMessageNum=0', except throw exception")
-    public void testReceiveMaxMessageNumIs0() {
-        SimpleConsumer simpleConsumer = null;
-        try {
-            simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setAwaitDuration(Duration.ofSeconds(15))
-                .build();
-            simpleConsumer.receive(0, Duration.ofSeconds(20));
-            Assertions.fail("except client receive message failed, but success");
-        } catch (Exception e) {
-            log.info("SimpleConsumer start failed: {}", e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start setting 'MaxMessageNum=100000', except success")
-    public void testReceiveMaxMessageNumMore100000() {
-        SimpleConsumer simpleConsumer = null;
-        try {
-            simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setAwaitDuration(Duration.ofSeconds(15))
-                .build();
-            simpleConsumer.receive(100000, Duration.ofSeconds(20));
-        } catch (Exception e) {
-            Assertions.fail("Start client failed: " + e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start setting 'invisibleDuration<1000ms', except throw exception")
-    public void testReceiveInvisibleDurationLess1000ms() {
-        SimpleConsumer simpleConsumer = null;
-        try {
-            simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setAwaitDuration(Duration.ofSeconds(15))
-                .build();
-            simpleConsumer.receive(1, Duration.ofMillis(9999));
-            Assertions.fail("except client receive message failed, but success");
-        } catch (Exception e) {
-            log.info(e.getMessage());
-            Assertions.assertTrue(e.getMessage().contains("the invisibleTime is too small"), e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("SimpleConsumer client start setting 'invisibleDuration>43200000ms', except throw exception")
-    public void testReceiveInvisibleDurationMore43200000ms() {
-        SimpleConsumer simpleConsumer = null;
-        try {
-            simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setAwaitDuration(Duration.ofSeconds(15))
-                .build();
-            simpleConsumer.receive(1, Duration.ofMillis(43200001));
-            Assertions.fail("except client receive message failed, but success");
-        } catch (Exception e) {
-            log.info(e.getMessage());
-            Assertions.assertTrue(e.getMessage().contains("the invisibleTime is too large"), e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("Setting 'AwaitDuration=10s',Expect the empty pull message request to return between 10s and 20s")
-    public void testAwaitDuration() {
-        SimpleConsumer simpleConsumer = null;
-        try {
-            simpleConsumer = provider.newSimpleConsumerBuilder()
-                .setConsumerGroup(groupId)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setSubscriptionExpressions(Collections.singletonMap(topic, FilterExpression.SUB_ALL))
-                .setAwaitDuration(Duration.ofSeconds(10))
-                .build();
-            long startTime = System.currentTimeMillis();
-            log.info("startTime: {}", startTime);
-            simpleConsumer.receive(1, Duration.ofSeconds(10));
-            long endTime = System.currentTimeMillis();
-            log.info("endTime: {}", endTime);
-            simpleConsumer.close();
-            Assertions.assertTrue((endTime - startTime) > 10000 && (endTime - startTime) < 20000, String.format("invoke method 'receive()' exception, startTime:%s, endTime:%s, intervalTime:%s", startTime, endTime, endTime - startTime));
-        } catch (Exception e) {
-            Assertions.fail("SimpConsumer start exception");
-        }
-    }
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/client/message/MessageAbnormalTest.java b/src/test/java/org/apache/rocketmq/broker/client/message/MessageAbnormalTest.java
deleted file mode 100644
index b0bfbed..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/message/MessageAbnormalTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * 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.rocketmq.broker.client.message;
-
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.producer.Producer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ClientConfigurationFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-/**
- * Test message properties
- */
-@Tag(TESTSET.CLIENT)
-public class MessageAbnormalTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(MessageAbnormalTest.class);
-    private static Producer producer;
-    private static String topic;
-    private String tag;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String className = MessageAbnormalTest.class.getName();
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        try {
-            producer = provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(topic)
-                .build();
-        } catch (ClientException e) {
-            e.printStackTrace();
-        }
-    }
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-    }
-
-    @AfterEach
-    public void tearDown() {
-    }
-
-    @AfterAll
-    public static void tearDownAll() {
-
-    }
-
-    //TODO
-    @Disabled
-    @DisplayName("producer invoke send(messageBody=\"\"), expect throw exception")
-    public void sendMsgBodyIsEmpty() {
-        Message message = MessageFactory.buildMessage(topic, tag, "");
-        assertThrows(Exception.class, () -> {
-            producer.send(message);
-        }, "Send messages with a null character message, Expected send() to throw exception, but it didn't");
-    }
-
-    @Test
-    @DisplayName("producer invoke send(messageBody=null), expect build message throw exception")
-    public void sendMsgBodyIsNull() {
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(topic, tag, null);
-            producer.send(message);
-        }, "Send messages with a null character message, Expected build() to throw exception, but it didn't");
-    }
-
-    @Test
-    @DisplayName("producer invoke send(topic=\"\"), expect throw exception")
-    public void sendMsgTopicIsEmpty() {
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage("", tag, RandomUtils.getStringByUUID());
-            producer.send(message);
-        }, "Topic does not exist, Expected build() to throw exception, but it didn't");
-    }
-
-    @Test
-    @DisplayName("producer invoke send(topic=null), expect throw exception")
-    public void sendMsgTopicIsNull() {
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(null, tag, RandomUtils.getStringByUUID());
-            producer.send(message);
-        }, "Topic does not exist,Expected build() to throw exception, but it didn't");
-    }
-
-    @Test
-    @DisplayName("producer invoke send(tag=null), expect build message throw exception")
-    public void sendMsgTagIsNull() {
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(topic, null, RandomUtils.getStringByUUID());
-            producer.send(message);
-        }, "tag is null, Expected build() to throw exception, but it didn't");
-    }
-
-    @Test
-    @DisplayName("producer invoke send(tag=\"\"), expect build message throw exception")
-    public void sendMsgTagIsEmpty() {
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(topic, "", RandomUtils.getStringByUUID());
-            producer.send(message);
-        }, "tag is blank, Expected build() to throw exception, but it didn't");
-    }
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/client/message/MessageBodyContentTest.java b/src/test/java/org/apache/rocketmq/broker/client/message/MessageBodyContentTest.java
deleted file mode 100644
index 5aee2fe..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/message/MessageBodyContentTest.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * 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.rocketmq.broker.client.message;
-
-import java.time.Duration;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Test message body
- */
-@Tag(TESTSET.CLIENT)
-public class MessageBodyContentTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(MessageBodyContentTest.class);
-    private String tag;
-    private static String topic;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-    }
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Send normal message, setting message body with space character, expect consume success")
-    public void testMessageBodyContentIsSpace() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-
-        String body = " ";
-        Message message = MessageFactory.buildMessage(topic, tag, body);
-        assert producer != null;
-        producer.send(message);
-
-        Assertions.assertEquals(1, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessageWithBody(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages(), body);
-    }
-
-    @Test
-    @DisplayName("Send normal message, setting message body with chinese character, expect consume success")
-    public void testMessageBodyContentIsChinese() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-
-        String body = "中文字符";
-        Message message = MessageFactory.buildMessage(topic, tag, body);
-        assert producer != null;
-        producer.send(message);
-
-        Assertions.assertEquals(1, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessageWithBody(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages(), body);
-    }
-
-    @Test
-    @DisplayName("Send normal message, setting message body with emoji(😱) character, expect consume success ")
-    public void testMessageBodyContentIsEmoji() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-
-        String body = "😱";
-        Message message = MessageFactory.buildMessage(topic, tag, body);
-        assert producer != null;
-        producer.send(message);
-
-        Assertions.assertEquals(1, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessageWithBody(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages(), body);
-    }
-}
-
-
diff --git a/src/test/java/org/apache/rocketmq/broker/client/message/MessageKeyTest.java b/src/test/java/org/apache/rocketmq/broker/client/message/MessageKeyTest.java
deleted file mode 100644
index 36129bf..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/message/MessageKeyTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * 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.rocketmq.broker.client.message;
-
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-/**
- * Test message key
- */
-@Tag(TESTSET.CLIENT)
-public class MessageKeyTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(MessageKeyTest.class);
-    private static String topic;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Message Key beyond 16KB, expect throw exception")
-    public void testMessageKeyBeyond16KB() {
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        String body = RandomStringUtils.randomAlphabetic(64);
-        String key = RandomStringUtils.randomAlphabetic(16 * 1024 + 1);
-
-        Assertions.assertNotNull(producer);
-        assertThrows(Exception.class, () -> {
-            Message message = provider.newMessageBuilder()
-                .setTopic(topic)
-                .setKeys(key)
-                .setBody(body.getBytes(StandardCharsets.UTF_8))
-                .build();
-            producer.getProducer().send(message);
-        }, " message key beyond 16KB , expect throw exception but it didn't");
-    }
-
-    @Test
-    @DisplayName("Message Key equals 16KB, expect send success")
-    public void testMessageKeyEquals16KB() {
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        String body = RandomStringUtils.randomAlphabetic(64);
-        String key = RandomStringUtils.randomAlphabetic(16 * 1024);
-        Assertions.assertNotNull(producer);
-
-        Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setKeys(key)
-            .setBody(body.getBytes(StandardCharsets.UTF_8))
-            .build();
-        producer.send(message);
-    }
-
-    @Test
-    @DisplayName("Message Key contains invisible characters \u0000 ,expect throw exception")
-    public void testMessageKeyWithInvisibleCharacter() {
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        String body = RandomStringUtils.randomAlphabetic(64);
-        String key = "\u0000";
-
-        Assertions.assertNotNull(producer);
-        assertThrows(Exception.class, () -> {
-            Message message = provider.newMessageBuilder()
-                .setTopic(topic)
-                .setKeys(key)
-                .setBody(body.getBytes(StandardCharsets.UTF_8))
-                .build();
-            producer.getProducer().send(message);
-        }, " message key contains invisible character ,expect throw exception but it didn't");
-    }
-
-    @Test
-    @DisplayName("Message key contains Chinese, expect send and consume success")
-    public void testMessageKeyContentWithChinese() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String groupId = getGroupId(methodName);
-
-        String key = "中文字符";
-        String tag = NameUtils.getRandomTagName();
-        String body = RandomStringUtils.randomAlphabetic(64);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setKeys(key)
-            .setTag(tag)
-            .setBody(body.getBytes(StandardCharsets.UTF_8))
-            .build();
-        producer.send(message);
-
-        Assertions.assertEquals(1, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("The message contains multiple keys, expect send and consume success")
-    public void testMessageWithMultiKey() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String groupId = getGroupId(methodName);
-
-        String key1 = RandomStringUtils.randomAlphabetic(64);
-        String key2 = RandomStringUtils.randomAlphabetic(64);
-        String tag = NameUtils.getRandomTagName();
-        String body = RandomStringUtils.randomAlphabetic(64);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setKeys(key1, key2)
-            .setTag(tag)
-            .setBody(body.getBytes(StandardCharsets.UTF_8))
-            .build();
-        producer.send(message);
-
-        Assertions.assertEquals(1, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-}
-
-
diff --git a/src/test/java/org/apache/rocketmq/broker/client/message/MessageTagTest.java b/src/test/java/org/apache/rocketmq/broker/client/message/MessageTagTest.java
deleted file mode 100644
index 07e6c2a..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/message/MessageTagTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * 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.rocketmq.broker.client.message;
-
-import java.time.Duration;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-/**
- * Test message tag
- */
-@Tag(TESTSET.CLIENT)
-public class MessageTagTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(MessageTagTest.class);
-    private static String topic;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Message Tag beyond 16KB, expect throw exception")
-    public void testMessageTagBeyond16KB() {
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        String tag = RandomStringUtils.randomAlphabetic(16 * 1024 + 1);
-        String body = RandomStringUtils.randomAlphabetic(64);
-
-        Assertions.assertNotNull(producer);
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(topic, tag, body);
-            producer.getProducer().send(message);
-        }, " message tag beyond 16KB ,expect throw exception but it didn't");
-    }
-
-    @Test
-    @DisplayName("Message Tag equals 16KB, expect send success")
-    public void testMessageTagEquals16KB() {
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        String tag = RandomStringUtils.randomAlphabetic(16 * 1024);
-        String body = RandomStringUtils.randomAlphabetic(64);
-
-        Message message = MessageFactory.buildMessageOnlyTag(topic, tag, body);
-        producer.send(message);
-    }
-
-    @Test
-    @DisplayName("Message Tag contains invisible characters \u0000 ,expect throw exception")
-    public void testMessageTagWithInvisibleCharacter() {
-        producer = ProducerFactory.getRMQProducer(account, topic);
-
-        String tag = "\u0000";
-
-        Assertions.assertNotNull(producer);
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(topic, tag);
-            producer.getProducer().send(message);
-        }, " message tag contains invisible character ,expect throw exception but it didn't");
-    }
-
-    @Test
-    @DisplayName("Message Tag and User Property beyond 16KB ,expect throw exception")
-    public void testMessageUserPropertyAndTagBeyond16KB() {
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        String tag = RandomStringUtils.randomAlphabetic(16 * 1024 + 1);
-        String body = RandomStringUtils.randomAlphabetic(64);
-
-        Assertions.assertNotNull(producer);
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(topic, tag, body);
-            producer.getProducer().send(message);
-        }, " message tag and user property beyond 16KB ,expect throw exception but it didn't");
-    }
-
-    @Test
-    @DisplayName("Message Tag contains | , expect throw exception")
-    public void testMessageTagContentWith() {
-        String tag = "tag|";
-        String body = RandomStringUtils.randomAlphabetic(64);
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(topic, tag, body);
-            producer.getProducer().send(message);
-        }, " message tag contains | , expect throw exception but it didn't");
-
-    }
-
-    @Test
-    @DisplayName("Message Tag contains Chinese, expect send and consume success")
-    public void testMessageTagContentWithChinese() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String groupId = getGroupId(methodName);
-
-        String tag = "中文字符";
-        String body = RandomStringUtils.randomAlphabetic(64);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-
-        Message message = MessageFactory.buildMessage(topic, tag, body);
-        producer.send(message);
-
-        Assertions.assertEquals(1, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-}
-
-
diff --git a/src/test/java/org/apache/rocketmq/broker/client/message/MessageUserPropertyTest.java b/src/test/java/org/apache/rocketmq/broker/client/message/MessageUserPropertyTest.java
deleted file mode 100644
index 176b460..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/message/MessageUserPropertyTest.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * 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.rocketmq.broker.client.message;
-
-import java.util.HashMap;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.java.exception.BadRequestException;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-/**
- * Test user property
- */
-@Tag(TESTSET.CLIENT)
-public class MessageUserPropertyTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(MessageUserPropertyTest.class);
-    private static String topic;
-    private static RMQNormalProducer producer;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        producer = ProducerFactory.getRMQProducer(account, topic);
-    }
-
-    @AfterAll
-    public static void tearDownAll() {
-        if (producer != null) {
-            producer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Message user property beyond limit 128 ,expect throw exception")
-    public void testMessageUserPropertyBeyondSize128() {
-        HashMap<String, String> userProperty = new HashMap<>();
-        for (int i = 0; i <= 128; i++) {
-            userProperty.put(String.valueOf(i), RandomStringUtils.randomAlphabetic(2));
-        }
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProperty);
-            producer.getProducer().send(message);
-        }, " message user property beyond limit 128 ,expect throw exception but it didn't");
-    }
-
-    @Test
-    @DisplayName("The number of message user propertys equals limit 128, expect send success")
-    public void testMessageUserPropertyEqualsSize128() {
-        HashMap<String, String> userProperty = new HashMap<>();
-        for (int i = 0; i < 128; i++) {
-            userProperty.put(String.valueOf(i), RandomStringUtils.randomAlphabetic(2));
-        }
-        Message message = MessageFactory.buildMessageWithProperty(topic, userProperty);
-        producer.send(message);
-    }
-
-    @Test
-    @DisplayName("Message user property equals limit 16KB, expect send success")
-    public void testMessageUserPropertyEquals16KB() {
-        String key = RandomStringUtils.randomAlphabetic(8 * 1024);
-        String value = RandomStringUtils.randomAlphabetic(8 * 1024);
-        HashMap<String, String> userProperty = new HashMap<>();
-        userProperty.put(key, value);
-
-        Message message = MessageFactory.buildMessageWithProperty(topic, userProperty);
-        producer.send(message);
-    }
-
-    @Test
-    @DisplayName("Message user property beyond 16KB ,expect throw exception")
-    public void testMessageUserPropertyBeyond16KB() {
-        String key = RandomStringUtils.randomAlphabetic(8 * 1024);
-        String value = RandomStringUtils.randomAlphabetic(8 * 1024 + 1);
-        HashMap<String, String> userProperty = new HashMap<>();
-        userProperty.put(key, value);
-
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProperty);
-            producer.getProducer().send(message);
-        }, " message user property beyond 16KB ,expect throw exception but it didn't");
-    }
-
-    @Test
-    @DisplayName("Message user property contains invisible character \u0000 ,expect throw exception")
-    public void testMessageUserPropertyContentWithInvisibleCharacter() {
-        HashMap<String, String> userProperty = new HashMap<>();
-        userProperty.put("\u0000", "value");
-
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProperty);
-            producer.getProducer().send(message);
-        }, " message user property contains invisible character ,expect throw exception but it didn't");
-
-    }
-
-    @Test
-    @DisplayName("Message user property use SystemKey UNIQ_KEY, expect throw exception")
-    public void testMessageUserPropertyWithSystemKey() {
-        HashMap<String, String> userProperty = new HashMap<>();
-        userProperty.put("UNIQ_KEY", "value");
-
-        assertThrows(BadRequestException.class, () -> {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProperty);
-            producer.getProducer().send(message);
-        }, " message user property use system key UNIQ_KEY ,expect throw exception but it didn't");
-
-    }
-
-    @Test
-    @DisplayName("Message user property ,key and tag beyond 16KB ,expect throw exception")
-    public void testMessageUserPropertyKeyAndTagBeyond16KB() {
-        HashMap<String, String> userProperty = new HashMap<>();
-        String body = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024);
-        String key = RandomStringUtils.randomAlphabetic(4 * 1024);
-        String value = RandomStringUtils.randomAlphabetic(4 * 1024);
-        userProperty.put(key, value);
-        String tag = RandomStringUtils.randomAlphabetic(4 * 1024);
-        String msgKey = RandomStringUtils.randomAlphabetic(4 * 1024 + 1);
-
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessageWithProperty(topic, tag, userProperty, body, msgKey);
-            producer.getProducer().send(message);
-        }, "message user property ,key and tag beyond 16KB ,expect throw exception but it didn't");
-
-    }
-
-    @Test
-    @DisplayName("Message user property ,key and tag equals 16KB, expect send success")
-    public void testMessageUserPropertyKeyAndTagEquals16KB() {
-        HashMap<String, String> userProperty = new HashMap<>();
-        String body = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024);
-        String key = RandomStringUtils.randomAlphabetic(4 * 1024);
-        String value = RandomStringUtils.randomAlphabetic(4 * 1024);
-        userProperty.put(key, value);
-        String tag = RandomStringUtils.randomAlphabetic(4 * 1024);
-        String msgKey = RandomStringUtils.randomAlphabetic(4 * 1024);
-
-        Message message = MessageFactory.buildMessageWithProperty(topic, tag, userProperty, body, msgKey);
-        producer.send(message);
-    }
-
-    @Test
-    @DisplayName("Message user property ,key and tag equals 64B, expect send success")
-    public void testMessageUserPropertyKeyAndTagEquals64B() {
-        HashMap<String, String> userProperty = new HashMap<>();
-        String body = RandomStringUtils.randomAlphabetic(64);
-        String key = RandomStringUtils.randomAlphabetic(64);
-        String value = RandomStringUtils.randomAlphabetic(64);
-        userProperty.put(key, value);
-        String tag = RandomStringUtils.randomAlphabetic(64);
-        String msgKey = RandomStringUtils.randomAlphabetic(64);
-
-        Message message = MessageFactory.buildMessageWithProperty(topic, tag, userProperty, body, msgKey);
-        producer.send(message);
-
-    }
-    //BEGIN GENERATED CODE
-    @Test
-    @DisplayName("Message user property is the visible character, expect send success")
-    public void testSpecialCharProperty() {
-        HashMap<String, String> userProps = new HashMap<>();
-        userProps.put("中文", "中文");
-        userProps.put("_", "_");
-        userProps.put("%", "%");
-        userProps.put("。", "。");
-        userProps.put("||", "||");
-        userProps.put("&&", "&&");
-        userProps.put("🏷", "🏷");
-        Message message = MessageFactory.buildMessageWithProperty(topic, userProps);
-        producer.send(message);
-    }
-    //END GENERATED CODE
-}
-
-
diff --git a/src/test/java/org/apache/rocketmq/broker/client/message/NormalMessageSizeTest.java b/src/test/java/org/apache/rocketmq/broker/client/message/NormalMessageSizeTest.java
deleted file mode 100644
index f472f5d..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/message/NormalMessageSizeTest.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * 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.rocketmq.broker.client.message;
-
-import java.io.IOException;
-import java.util.HashMap;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.producer.Producer;
-import org.apache.rocketmq.client.apis.producer.Transaction;
-import org.apache.rocketmq.client.apis.producer.TransactionResolution;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ClientConfigurationFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.util.NameUtils;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-@Tag(TESTSET.NORMAL)
-@DisplayName("Test cases that send messages")
-public class NormalMessageSizeTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(NormalMessageSizeTest.class);
-    private static String normalTopic;
-    private static String transTopic;
-    private static String fifoTopic;
-    private static String delayTopic;
-    private static Producer producer;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        normalTopic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        transTopic = getTopic(TopicMessageType.TRANSACTION.getValue(), methodName);
-        delayTopic = getTopic(TopicMessageType.DELAY.getValue(), methodName);
-        fifoTopic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        try {
-            producer = provider.newProducerBuilder()
-                .setTransactionChecker(messageView -> TransactionResolution.COMMIT)
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(normalTopic, transTopic, delayTopic, fifoTopic)
-                .build();
-        } catch (ClientException e) {
-            Assertions.fail("create producer failed");
-        }
-    }
-
-    @AfterAll
-    public static void tearDownAll() {
-        if (producer != null) {
-            try {
-                producer.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    @Test
-    @DisplayName("Send normal messages synchronously with the body size of 4M+1, expect send failed")
-    public void testNormalMsgSize4MAdd1() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024 + 1);
-        String tag = NameUtils.getRandomTagName();
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(normalTopic, tag, messageBody);
-            producer.send(message);
-        });
-    }
-
-    @Test
-    @DisplayName("Send normal messages synchronously with the body size of 4M, expect send success")
-    public void testNormalMsgSize4M() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024);
-        String tag = NameUtils.getRandomTagName();
-        Message message = MessageFactory.buildMessage(normalTopic, tag, messageBody);
-        try {
-            producer.send(message);
-        } catch (Exception e) {
-            e.printStackTrace();
-            Assertions.fail("Send message failed, expected success");
-        }
-    }
-
-    @Test
-    @DisplayName("Send delay messages synchronously with the body size of 4M+1, expect send failed")
-    public void testDelayMsgSize4MAdd1() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024 + 1);
-        String tag = NameUtils.getRandomTagName();
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildDelayMessage(delayTopic, tag, messageBody, 10L);
-            producer.send(message);
-        });
-    }
-
-    @Test
-    @DisplayName("Send delay messages synchronously with the body size of 4M, expect send success")
-    public void testDelayMsgSize4M() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024);
-        String tag = NameUtils.getRandomTagName();
-        Message message = MessageFactory.buildDelayMessage(delayTopic, tag, messageBody, 10L);
-        try {
-            producer.send(message);
-        } catch (ClientException e) {
-            e.printStackTrace();
-            Assertions.fail("Send message failed, expected success, message:" + e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("Send transaction messages synchronously with the body size of 4M+1, expect send failed")
-    public void testTransMsgSize4MAdd1() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024 + 1);
-        String tag = NameUtils.getRandomTagName();
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildMessage(transTopic, tag, messageBody);
-            Transaction transaction = producer.beginTransaction();
-            producer.send(message, transaction);
-            transaction.commit();
-        });
-    }
-
-    @Test
-    @DisplayName("Send transaction messages synchronously with the body size of 4M, expect send success")
-    public void testTransMsgSize4M() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024);
-        String tag = NameUtils.getRandomTagName();
-        Message message = MessageFactory.buildMessage(transTopic, tag, messageBody);
-        try {
-            Transaction transaction = producer.beginTransaction();
-            producer.send(message, transaction);
-            transaction.commit();
-        } catch (ClientException e) {
-            Assertions.fail("Send message failed, expected success, message:" + e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("Send FIFO messages synchronously with the body size of 4M+1, expect send failed")
-    public void testFifoMsgSize4MAdd1() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024 + 1);
-        String tag = NameUtils.getRandomTagName();
-        assertThrows(Exception.class, () -> {
-            Message message = MessageFactory.buildOrderMessage(fifoTopic, tag, messageBody, "a");
-            producer.send(message);
-        });
-    }
-
-    @Test
-    @DisplayName("Send FIFO messages synchronously with the body size of 4M, expect send success")
-    public void testFifoMsgSize4M() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024);
-        String tag = NameUtils.getRandomTagName();
-        Message message = MessageFactory.buildOrderMessage(fifoTopic, tag, messageBody, "a");
-        try {
-            producer.send(message);
-        } catch (ClientException e) {
-            Assertions.fail("Send message failed, expected success, message:" + e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("Send normal messages synchronously with the body size of 4M and the user property size of 16KB, expect send success")
-    public void testNormalMsgSize4MAndUserProperty16KB() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024);
-        String key = RandomStringUtils.randomAlphabetic(8 * 1024);
-        String value = RandomStringUtils.randomAlphabetic(8 * 1024);
-        HashMap<String, String> userProperty = new HashMap<>();
-        userProperty.put(key, value);
-        try {
-            Message message = MessageFactory.buildMessageWithProperty(normalTopic, messageBody, userProperty);
-            producer.send(message);
-        } catch (ClientException e) {
-            Assertions.fail("Send message failed, expected success, message:" + e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("Send FIFO messages synchronously with the body size of 4M and the user property size of 16KB, expect send success")
-    public void testFifoMsgSize4MAndUserProperty16KB() {
-        String messageBody = RandomStringUtils.randomAlphabetic(4 * 1024 * 1024);
-        String key = RandomStringUtils.randomAlphabetic(8 * 1024);
-        String value = RandomStringUtils.randomAlphabetic(8 * 1024);
-        HashMap<String, String> userProperty = new HashMap<>();
-        userProperty.put(key, value);
-        try {
-            Message message = MessageFactory.buildOrderMessageWithProperty(fifoTopic, messageBody, "a", userProperty);
-            producer.send(message);
-        } catch (ClientException e) {
-            Assertions.fail("Send message failed, expected success, message:" + e.getMessage());
-        }
-    }
-
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/client/producer/ProducerInitTest.java b/src/test/java/org/apache/rocketmq/broker/client/producer/ProducerInitTest.java
deleted file mode 100644
index 3d9f2f2..0000000
--- a/src/test/java/org/apache/rocketmq/broker/client/producer/ProducerInitTest.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * 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.rocketmq.broker.client.producer;
-
-import org.apache.rocketmq.client.apis.ClientConfiguration;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.StaticSessionCredentialsProvider;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.producer.Producer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ClientConfigurationFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-@Tag(TESTSET.CLIENT)
-public class ProducerInitTest extends BaseOperate {
-    private static final Logger log = LoggerFactory.getLogger(ProducerInitTest.class);
-    private static String topic;
-
-    @BeforeAll
-    public static void setUpAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-    }
-
-    @BeforeEach
-    public void setUp() {
-    }
-
-    @AfterEach
-    public void tearDown() {
-    }
-
-    @Test
-    @DisplayName("Producer is normally set,expected success")
-    public void testNormalSetting() {
-        try {
-            provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(topic)
-                .setMaxAttempts(3)
-                .build();
-        } catch (ClientException e) {
-            Assertions.fail("Send message failed, expected success, message:" + e.getMessage());
-        }
-    }
-
-    @Disabled
-    @DisplayName("The AccessKey setting of the Producer failed, expect ONSClientException to throw")
-    public void testErrorAK() {
-        StaticSessionCredentialsProvider staticSessionCredentialsProvider = new StaticSessionCredentialsProvider("errorAk", account.getSecretKey());
-        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-            .setEndpoints(account.getEndpoint())
-            .setCredentialProvider(staticSessionCredentialsProvider)
-            .build();
-
-        assertThrows(Exception.class, () -> {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(clientConfiguration)
-                .setTopics(topic)
-                .build();
-            Message message = MessageFactory.buildMessage(topic);
-            producer.send(message);
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Disabled
-    @DisplayName("The SecretKey setting of the Producer failed, expect ONSClientException to throw")
-    public void testErrorSK() {
-        StaticSessionCredentialsProvider staticSessionCredentialsProvider = new StaticSessionCredentialsProvider(account.getAccessKey(), "errorSk");
-        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-            .setEndpoints(account.getEndpoint())
-            .setCredentialProvider(staticSessionCredentialsProvider)
-            .build();
-
-        assertThrows(Exception.class, () -> {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(clientConfiguration)
-                .setTopics(topic)
-                .build();
-            Message message = MessageFactory.buildMessage(topic);
-            producer.send(message);
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The NAMESRV_ADDR setting of the Producer failed, expect ONSClientException to throw")
-    public void testErrorNameSrvAddr() {
-        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-            .setEndpoints("https://www.aliyun.com")
-            .build();
-
-        assertThrows(Exception.class, () -> {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(clientConfiguration)
-                .setTopics(topic)
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The Producer does not set the AccessKey, expect an exception occurs when the client start")
-    public void testUnsetAK() {
-        assertThrows(Exception.class, () -> {
-            StaticSessionCredentialsProvider staticSessionCredentialsProvider = new StaticSessionCredentialsProvider(null, account.getSecretKey());
-            ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-                .setEndpoints(account.getEndpoint())
-                .setCredentialProvider(staticSessionCredentialsProvider)
-                .build();
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(clientConfiguration)
-                .setTopics(topic)
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The Producer does not set the SecretKey, expect an exception occurs when the client start")
-    public void testUnsetSK() {
-        assertThrows(Exception.class, () -> {
-            StaticSessionCredentialsProvider staticSessionCredentialsProvider = new StaticSessionCredentialsProvider(account.getAccessKey(), null);
-            ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
-                .setEndpoints(account.getEndpoint())
-                .setCredentialProvider(staticSessionCredentialsProvider)
-                .build();
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(clientConfiguration)
-                .setTopics(topic)
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The Producer does not set the Properties, expect an exception occurs when the client start")
-    public void testUnsetProperties() {
-        assertThrows(Exception.class, () -> {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(null)
-                .setTopics(topic)
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The Producer sets the maximum retry times to 0, expect the client start success")
-    public void testSet0MaxAttempts() {
-        assertThrows(Exception.class, () -> {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(topic)
-                .setMaxAttempts(0)
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The Producer sets the maximum retry times to -1, expect the client start failed")
-    public void testSetLess0MaxAttempts() {
-        assertThrows(Exception.class, () -> {
-            provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setMaxAttempts(-1)
-                .setTopics(topic)
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The Producer sets the maximum retry times to 100, expect the client start failed")
-    public void testSet100MaxAttempts() {
-        assertThrows(Exception.class, () -> {
-            provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setMaxAttempts(-1)
-                .setTopics(topic)
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The Producer sets a non-existent topic, expect the client start failed")
-    public void testSetNotExistTopic() {
-        assertThrows(Exception.class, () -> {
-            provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setMaxAttempts(3)
-                .setTopics("notExistTopic")
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The Producer sets the same topic, expect the client start failed")
-    public void testSetTwoTopic() {
-        try {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(topic, topic)
-                .build();
-        } catch (ClientException e) {
-            Assertions.fail("Send message failed, expected success, message:" + e.getMessage());
-        }
-    }
-
-    @Test
-    @DisplayName("The Producer sets more topics, one of which does not exist, expect the client start failed")
-    public void testSetTwoTopicWithOneNotExist() {
-        assertThrows(Exception.class, () -> {
-            Producer producer = provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setTopics(topic, "notExistTopic")
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("ClientConfiguration is not set, expect the Producer NPE start failed")
-    public void testNoClientConfiguration() {
-        assertThrows(Exception.class, () -> {
-            Producer producer = provider.newProducerBuilder()
-                .setTopics(topic, "notExistTopic")
-                .build();
-        }, "Expected ClientException to throw, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The topic of Producer is not set, expected success")
-    public void testNoTopics() {
-        try {
-            provider.newProducerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .build();
-        } catch (Exception e) {
-            Assertions.fail("Send message failed, expected success, message:" + e.getMessage());
-        }
-    }
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/cluster/ClusterTest.java b/src/test/java/org/apache/rocketmq/broker/cluster/ClusterTest.java
deleted file mode 100644
index 4e2f077..0000000
--- a/src/test/java/org/apache/rocketmq/broker/cluster/ClusterTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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.rocketmq.broker.cluster;
-
-import java.io.IOException;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.PushConsumer;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Tag(TESTSET.NORMAL)
-public class ClusterTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(ClusterTest.class);
-    private String tag;
-    private final static int SEND_NUM = 100;
-    private PushConsumer pushConsumer01;
-    private PushConsumer pushConsumer02;
-    private PushConsumer pushConsumer03;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-    }
-
-    @BeforeEach
-    public void tearDown() {
-        try {
-            if (pushConsumer01 != null) {
-                pushConsumer01.close();
-            }
-            if (pushConsumer02 != null) {
-                pushConsumer02.close();
-            }
-            if (pushConsumer03 != null) {
-                pushConsumer03.close();
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    //TODO
-    @Disabled
-    @DisplayName("Send 100 normal messages synchronously, start three consumers on different GroupId, and expect each client to consume up to 100 messages")
-    public void testBroadcastConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId01 = getGroupId(methodName + 1);
-        String groupId02 = getGroupId(methodName + 2);
-        String groupId03 = getGroupId(methodName + 3);
-
-        RMQNormalListener listenerA = new RMQNormalListener("ListenerA");
-        RMQNormalListener listenerB = new RMQNormalListener("ListenerB");
-        RMQNormalListener listenerC = new RMQNormalListener("ListenerC");
-        pushConsumer01 = ConsumerFactory.getPushConsumer(account, topic, groupId01, new FilterExpression(tag), listenerA);
-        pushConsumer02 = ConsumerFactory.getPushConsumer(account, topic, groupId02, new FilterExpression(tag), listenerB);
-        pushConsumer03 = ConsumerFactory.getPushConsumer(account, topic, groupId03, new FilterExpression(tag), listenerC);
-
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), listenerA.getDequeueMessages());
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), listenerB.getDequeueMessages());
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), listenerC.getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Send 100 normal messages synchronously, start 3 consumers on the same GroupId, expect 3 clients to consume a total of 100 messages")
-    public void testClusterConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName + 1);
-
-        RMQNormalListener listenerA = new RMQNormalListener("ListenerA");
-        RMQNormalListener listenerB = new RMQNormalListener("ListenerB");
-        RMQNormalListener listenerC = new RMQNormalListener("ListenerC");
-        pushConsumer01 = ConsumerFactory.getPushConsumer(account, topic, groupId, new FilterExpression(tag), listenerA);
-        pushConsumer02 = ConsumerFactory.getPushConsumer(account, topic, groupId, new FilterExpression(tag), listenerB);
-        pushConsumer03 = ConsumerFactory.getPushConsumer(account, topic, groupId, new FilterExpression(tag), listenerC);
-
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, String.valueOf(i));
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyClusterConsume(producer.getEnqueueMessages(), listenerA.getDequeueMessages(), listenerB.getDequeueMessages(), listenerC.getDequeueMessages());
-    }
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/example/ProducerExample.java b/src/test/java/org/apache/rocketmq/broker/example/ProducerExample.java
deleted file mode 100644
index ce1849e..0000000
--- a/src/test/java/org/apache/rocketmq/broker/example/ProducerExample.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.rocketmq.broker.example;
-
-import org.apache.rocketmq.client.apis.ClientConfiguration;
-import org.apache.rocketmq.client.apis.ClientConfigurationBuilder;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.ClientServiceProvider;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.producer.Producer;
-import org.apache.rocketmq.client.apis.producer.SendReceipt;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ProducerExample {
-    private static final Logger log = LoggerFactory.getLogger(ProducerExample.class);
-
-    public static void main(String[] args) throws Exception {
-        String endpoint = "11.165.235.102:8081";
-        String topic = "TestTopic";
-        ClientServiceProvider provider = ClientServiceProvider.loadService();
-        ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(endpoint);
-        ClientConfiguration configuration = builder.build();
-        Producer producer = provider.newProducerBuilder()
-            .setTopics(topic)
-            .setClientConfiguration(configuration)
-            .build();
-        Message message = provider.newMessageBuilder()
-            .setTopic(topic)
-            .setKeys("messageKey")
-            .setTag("messageTag")
-            .setBody("messageBody".getBytes())
-            .build();
-        try {
-            SendReceipt sendReceipt = producer.send(message);
-            log.info(String.valueOf(sendReceipt.getMessageId()));
-        } catch (ClientException e) {
-            e.printStackTrace();
-        }
-    }
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/filter/push/SqlFilterTest.java b/src/test/java/org/apache/rocketmq/broker/filter/push/SqlFilterTest.java
deleted file mode 100644
index 18214a2..0000000
--- a/src/test/java/org/apache/rocketmq/broker/filter/push/SqlFilterTest.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * 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.rocketmq.broker.filter.push;
-
-import java.time.Duration;
-import java.util.HashMap;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.TestUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Tag(TESTSET.SQL)
-public class SqlFilterTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(SqlFilterTest.class);
-    private final static int SEND_NUM = 10;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-
-    @BeforeEach
-    public void setUp() {
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("10 messages are sent synchronously, without any attribute filtering, and expected to be consumed to the 10 messages sent")
-    public void testSendWithTagAndPropsRecvWithOutFilter() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        HashMap<String, String> userProps = new HashMap<>();
-        userProps.put("regionId", "cn-hangzhou");
-        userProps.put("price", "30");
-        String subExpression = "TRUE";
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProps);
-            producer.send(message);
-        }
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Send 10 messages with the attribute price=10 and 10 messages with the attribute price=30. Set the filtering rule to price>20 and expect only 10 messages to be consumed")
-    public void testSqlSendTwoProps_SubFilterOne() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        HashMap<String, String> userProps1 = new HashMap<>();
-        userProps1.put("price", "10");
-        HashMap<String, String> userProps2 = new HashMap<>();
-        userProps2.put("price", "30");
-        String subExpression = "price>20";
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProps1);
-            producer.send(message);
-        }
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProps2);
-            producer.send(message);
-        }
-        VerifyUtils.verifyNormalMessageWithUserProperties(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages(), userProps1, 10);
-    }
-
-    @Test
-    @DisplayName("Send 10 messages synchronously, using the attribute between{a,b} filter, expect to consume 10 messages sent")
-    public void testSendWithTagAndPropsRecvWithBetween() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        HashMap<String, String> userProps = new HashMap<>();
-        userProps.put("regionId", "cn-hangzhou");
-        userProps.put("price", "30");
-        String subExpression = "(price BETWEEN 10 AND 100) AND regionId IS NOT NUll";
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProps);
-            producer.send(message);
-        }
-
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Send 10 messages synchronously, filter messages using unknown attributes, expect to consume up to 0 messages")
-    public void testSendWithTagAndPropsRecvWithUnknownProps() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        HashMap<String, String> userProps = new HashMap<>();
-        userProps.put("regionId", "cn-hangzhou");
-        userProps.put("price", "30");
-        String subExpression = "product = 'MQ'";
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessageWithProperty(topic, userProps);
-            producer.send(message);
-        }
-        TestUtils.waitForSeconds(20);
-        Assertions.assertEquals(0, pushConsumer.getListener().getDequeueMessages().getDataSize());
-    }
-
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/filter/push/SqlFilterWithOrderMsgTest.java b/src/test/java/org/apache/rocketmq/broker/filter/push/SqlFilterWithOrderMsgTest.java
deleted file mode 100644
index 1b1e35c..0000000
--- a/src/test/java/org/apache/rocketmq/broker/filter/push/SqlFilterWithOrderMsgTest.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * 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.rocketmq.broker.filter.push;
-
-import java.time.Duration;
-import java.util.HashMap;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.TestUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Only the Platinum instance of the tcp protocol client supports the use of user-defined attributes and tags to filter sequential messages
- */
-@Tag(TESTSET.SQL)
-public class SqlFilterWithOrderMsgTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(SqlFilterTest.class);
-    private final static int SEND_NUM = 10;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-    private static String className;
-
-    @BeforeEach
-    public void setUp() {
-        className = SqlFilterWithOrderMsgTest.class.getName();
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("10 sequential messages are sent synchronously, without any attribute filtering, expecting to consume the 10 messages sent")
-    public void testSendWithTagAndPropsRecvWithOutFilter() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        HashMap<String, String> userProps = new HashMap<>();
-        userProps.put("regionId", "cn-hangzhou");
-        userProps.put("price", "30");
-        String subExpression = "TRUE";
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        String prefix = RandomUtils.getStringWithCharacter(5);
-        for (int i = 0; i < SEND_NUM; i++) {
-            String shardingKey = prefix + "-" + Character.toString((char) (i % 2 + 'a'));
-            Message message = MessageFactory.buildOrderMessageWithProperty(topic, String.valueOf(i), shardingKey, userProps);
-            producer.send(message);
-        }
-        VerifyUtils.verifyOrderMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("10 sequential messages are sent synchronously, filtered using the attribute between{a,b}, expected to consume 10 messages sent")
-    public void testSendWithTagAndPropsRecvWithBetween() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        HashMap<String, String> userProps = new HashMap<>();
-        userProps.put("regionId", "cn-hangzhou");
-        userProps.put("price", "30");
-        String subExpression = "(price BETWEEN 10 AND 100) AND regionId IS NOT NUll";
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        String prefix = RandomUtils.getStringWithCharacter(5);
-        for (int i = 0; i < SEND_NUM; i++) {
-            String shardingKey = prefix + "-" + Character.toString((char) (i % 2 + 'a'));
-            Message message = MessageFactory.buildOrderMessageWithProperty(topic, String.valueOf(i), shardingKey, userProps);
-            producer.send(message);
-        }
-
-        VerifyUtils.verifyOrderMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Send 10 sequential messages synchronously, filter the messages using unknown attributes, and expect to consume up to zero messages")
-    public void testSendWithTagAndPropsRecvWithUnknownProps() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        HashMap<String, String> userProps = new HashMap<>();
-        userProps.put("regionId", "cn-hangzhou");
-        userProps.put("price", "30");
-        String subExpression = "product = 'MQ'";
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(subExpression, FilterExpressionType.SQL92), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        String prefix = RandomUtils.getStringWithCharacter(5);
-        for (int i = 0; i < SEND_NUM; i++) {
-            String shardingKey = prefix + "-" + Character.toString((char) (i % 2 + 'a'));
-            Message message = MessageFactory.buildOrderMessageWithProperty(topic, String.valueOf(i), shardingKey, userProps);
-            producer.send(message);
-        }
-        TestUtils.waitForSeconds(20);
-        Assertions.assertEquals(0, pushConsumer.getListener().getDequeueMessages().getDataSize());
-    }
-}
diff --git a/src/test/java/org/apache/rocketmq/broker/filter/push/TagFilterTest.java b/src/test/java/org/apache/rocketmq/broker/filter/push/TagFilterTest.java
deleted file mode 100644
index b47fb5b..0000000
--- a/src/test/java/org/apache/rocketmq/broker/filter/push/TagFilterTest.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * 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.rocketmq.broker.filter.push;
-
-import java.time.Duration;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.TestUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@DisplayName("TAG filtering test: Use PushConsumer for consumption")
-@Tag(TESTSET.TAG)
-public class TagFilterTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(TagFilterTest.class);
-    private final static int SEND_NUM = 10;
-    RMQNormalProducer producer;
-    RMQNormalConsumer pushConsumer;
-    RMQNormalConsumer simpleConsumer;
-
-    @BeforeEach
-    public void setUp() {
-
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Using tagA sent 10 messages, the use of tagA | | tagB filter messages, expect consumption to send 10 messages")
-    public void testSendTagA_SubTagAorTagB() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTag = NameUtils.getRandomTagName();
-        String receiveTag = sendTag + "||TagB";
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(receiveTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(receiveTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-        log.info("Wait for the SimpleConsumer");
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTag, SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Use tagA sent 10 messages first, after using tagB sent 10 messages, use tagA | | tagB filter messages, expect consumption to send 20 messages")
-    public void testSndTagATagB_SubTagATagB() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTagA = NameUtils.getRandomTagName();
-        String sendTagB = NameUtils.getRandomTagName();
-        String receiveTag = sendTagA + "||" + sendTagB;
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(receiveTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(receiveTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTagA, SEND_NUM);
-        producer.send(topic, sendTagB, SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM * 2, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("The tagA is used to send 10 messages, then the tagB is used to send 10 messages, and the * is used to filter the messages, expecting to consume 20 messages sent")
-    public void testSendTagAAndTagB_SubAll() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTagA = NameUtils.getRandomTagName();
-        String sendTagB = NameUtils.getRandomTagName();
-        String receiveTag = "*";
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(receiveTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(receiveTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTagA, SEND_NUM);
-        producer.send(topic, sendTagB, SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM * 2, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Send 10 tagA messages, subscribe to tagB messages, expect to consume up to 0 messages")
-    public void testSendTagA_SubTagB() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTagA = NameUtils.getRandomTagName();
-        String receiveTag = NameUtils.getRandomTagName();
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(receiveTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(receiveTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTagA, SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        TestUtils.waitForSeconds(20);
-        Assertions.assertEquals(0, pushConsumer.getListener().getDequeueMessages().getDataSize());
-    }
-
-    @Test
-    @DisplayName("Send 10 tagA messages, subscribe to tagA messages, expect to consume up to 10 messages")
-    public void testSendTagA_SubTagA() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTag = NameUtils.getRandomTagName();
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(sendTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(sendTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTag, SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Consumption uses a very long tagA, sending 10 messages, expecting to consume 10 tagA messages")
-    public void testLongTagSize() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTag = RandomStringUtils.randomAlphanumeric(1024 * 10);
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(sendTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(sendTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTag, SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("The consumption uses a space-spaced tag, and two tags are used to send 10 messages each, with the expectation of consuming up to 20 messages")
-    public void testSubTagWithSpace() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTagA = NameUtils.getRandomTagName();
-        String sendTagB = NameUtils.getRandomTagName();
-        String receiveTag = " " + sendTagA + " || " + sendTagB + " ";
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(receiveTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(receiveTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTagA, SEND_NUM);
-        producer.send(topic, sendTagB, SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM * 2, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Send 10 tag = '@ | | | @' news, expect to send an exception is thrown, the tag is not allowed to include |")
-    public void testTagWithSpecialSymbol01() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-
-        Assertions.assertThrows(Exception.class, () -> {
-            producer.send(topic, "|@", SEND_NUM);
-        }, "Send messages with  tag \"|@\", Expected send() to throw exception, but it didn't");
-    }
-
-    @Test
-    @DisplayName("Send 10 messages with tag='*', subscribe to messages with tag='*', expect to consume the message")
-    public void testTagWithSpecialSymbol02() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression("*"), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression("*"), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, "*", SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Consumer use | | separators between the tag, respectively using two tag each 10 messages sent, and expect consumption to 20 messages")
-    public void testTagWithSpecialSymbol03() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTagA = NameUtils.getRandomTagName();
-        String sendTagB = NameUtils.getRandomTagName();
-        String receiveTag = sendTagA + "||||" + sendTagB;
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(receiveTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(receiveTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTagA, SEND_NUM);
-        producer.send(topic, sendTagB, SEND_NUM);
-
-        Assertions.assertEquals(SEND_NUM * 2, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-        pushConsumer.close();
-        producer.close();
-    }
-
-    @Test
-    @DisplayName("Send 10 messages each using the whitespace characters tag\"\" and \"\", expecting the send to throw an exception")
-    public void testTagWithBlankSymbol() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-
-        String sendTagA = "";
-        String sendTagB = " ";
-
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        Assertions.assertThrows(Exception.class, () -> {
-            producer.send(topic, sendTagA, SEND_NUM);
-        }, "Send messages with blank tag \"\", Expected send() to throw exception, but it didn't");
-        Assertions.assertThrows(Exception.class, () -> {
-            producer.send(topic, sendTagB, SEND_NUM);
-        }, "Send messages with blank tag \" \", Expected send() to throw exception, but it didn't");
-    }
-
-    @Test
-    @DisplayName("The sent tag uses two strings with the same hash value, and the consumed tag uses BB, expecting to consume messages with tag=BB")
-    public void testSendTagWithSameHashCode_SubWithOne() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTagA = "BB";
-        String sendTagB = "Aa";
-        String receiveTag = "BB";
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(receiveTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(receiveTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTagA, SEND_NUM);
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-        pushConsumer.getListener().clearMsg();
-        producer.send(topic, sendTagB, SEND_NUM);
-        TestUtils.waitForSeconds(10);
-        Assertions.assertEquals(0, pushConsumer.getListener().getDequeueAllMessages().getDataSize());
-    }
-
-    @Test
-    @DisplayName("Send 10 messages with tag=BB, 10 messages with tag=bb, subscribe with tag=BB, expect case-sensitive messages to be consumed to tag=BB")
-    public void testTagCaseSensitive() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        String sendTagA = "BB";
-        String sendTagB = "bb";
-        String receiveTag = "BB";
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(receiveTag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(receiveTag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        producer.send(topic, sendTagA, SEND_NUM);
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-        pushConsumer.getListener().clearMsg();
-        producer.send(topic, sendTagB, SEND_NUM);
-        TestUtils.waitForSeconds(10);
-        Assertions.assertEquals(0, pushConsumer.getListener().getDequeueAllMessages().getDataSize());
-    }
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/server/DelayMessageTest.java b/src/test/java/org/apache/rocketmq/broker/server/DelayMessageTest.java
deleted file mode 100644
index 8fb34d6..0000000
--- a/src/test/java/org/apache/rocketmq/broker/server/DelayMessageTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * 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.rocketmq.broker.server;
-
-import java.time.Duration;
-import java.util.concurrent.Callable;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.awaitility.Awaitility.await;
-
-@Tag(TESTSET.DELAY)
-@Tag(TESTSET.SMOKE)
-public class DelayMessageTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(DelayMessageTest.class);
-    private String tag;
-    private final static int SEND_NUM = 10;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Send 10 messages timed 10 seconds later synchronously, and expect these 10 messages to be consumed by PushConsumer 10 seconds later")
-    public void testDelay_Send_PushConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.DELAY.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildDelayMessage(topic, tag, RandomUtils.getStringByUUID(), System.currentTimeMillis() + 10 * 1000);
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyDelayMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages(), 15);
-    }
-
-    @Test
-    @DisplayName("10 messages are sent asynchronously and are expected to be consumed by PushConsumer 10 seconds later")
-    public void testDelay_SendAsync_PushConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.DELAY.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildDelayMessage(topic, tag, RandomUtils.getStringByUUID(), System.currentTimeMillis() + 10 * 1000);
-            producer.sendAsync(message);
-        }
-        await().atMost(10, SECONDS).until(new Callable<Boolean>() {
-            @Override
-            public Boolean call() throws Exception {
-                return SEND_NUM == producer.getEnqueueMessages().getDataSize();
-            }
-        });
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyDelayMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages(), 15);
-    }
-
-    @Test
-    @DisplayName("Sends 10 timed messages (-20s) expecting to be delivered and consumed immediately")
-    public void testDelayTime15SecondsAgo() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.DELAY.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildDelayMessage(topic, tag, RandomUtils.getStringByUUID(), System.currentTimeMillis() - 20 * 1000);
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyDelayMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages(), 0);
-    }
-
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/server/NormalMessageTest.java b/src/test/java/org/apache/rocketmq/broker/server/NormalMessageTest.java
deleted file mode 100644
index 7f9bb82..0000000
--- a/src/test/java/org/apache/rocketmq/broker/server/NormalMessageTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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.rocketmq.broker.server;
-
-import java.time.Duration;
-import java.util.concurrent.Callable;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.awaitility.Awaitility.await;
-
-@Tag(TESTSET.NORMAL)
-@Tag(TESTSET.SMOKE)
-public class NormalMessageTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(NormalMessageTest.class);
-    private String tag;
-    private final static int SEND_NUM = 10;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Send 10 normal messages synchronously, expecting those 10 messages to be consumed through PushConsumer")
-    public void testNormal_Send_PushConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, String.valueOf(i));
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-
-        pushConsumer.close();
-        producer.close();
-    }
-
-    @Test
-    @DisplayName("Send 10 normal messages asynchronously, expecting the 10 messages to be consumed by PushConsumer")
-    public void testNormal_SendAsync_PushConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, String.valueOf(i));
-            producer.sendAsync(message);
-        }
-        // Specifies the timeout of 10 s, if in this time period, conditions are still not satisfied, will throw ConditionTimeoutException
-        await().atMost(10, SECONDS).until(new Callable<Boolean>() {
-            @Override
-            public Boolean call() {
-                return SEND_NUM == producer.getEnqueueMessages().getDataSize();
-            }
-        });
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/server/OrderMessageTest.java b/src/test/java/org/apache/rocketmq/broker/server/OrderMessageTest.java
deleted file mode 100644
index 4888f4d..0000000
--- a/src/test/java/org/apache/rocketmq/broker/server/OrderMessageTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.rocketmq.broker.server;
-
-import java.time.Duration;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Tag(TESTSET.ORDER)
-@Tag(TESTSET.SMOKE)
-public class OrderMessageTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(OrderMessageTest.class);
-    private String tag;
-    private final static int SEND_NUM = 100;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Send 100 sequential messages synchronously, set 2 Messagegroups, and expect these 100 messages to be sequentially consumed by PushConsumer")
-    public void testOrder_Send_PushConsumeOrderly() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        String messageGroup = RandomUtils.getStringByUUID();
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), messageGroup + String.valueOf(i % 2));
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyOrderMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/server/TransactionMessageTest.java b/src/test/java/org/apache/rocketmq/broker/server/TransactionMessageTest.java
deleted file mode 100644
index 2c2c160..0000000
--- a/src/test/java/org/apache/rocketmq/broker/server/TransactionMessageTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * 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.rocketmq.broker.server;
-
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.concurrent.Callable;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.client.apis.producer.TransactionChecker;
-import org.apache.rocketmq.client.apis.producer.TransactionResolution;
-import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.client.trans.LocalTransactionCheckerImpl;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.TestUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.awaitility.Awaitility.await;
-
-@Tag(TESTSET.TRANSACTION)
-@Tag(TESTSET.SMOKE)
-public class TransactionMessageTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(TransactionMessageTest.class);
-    private String tag;
-    private final static int SEND_NUM = 10;
-    private RMQNormalProducer producer;
-    private RMQNormalConsumer pushConsumer;
-    private RMQNormalConsumer simpleConsumer;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-        if (pushConsumer != null) {
-            pushConsumer.close();
-        }
-        if (simpleConsumer != null) {
-            simpleConsumer.close();
-        }
-    }
-
-    @Test
-    @DisplayName("Send 10 transaction messages and synchronously commit the transaction (Checker performs rollback), expecting those 10 messages to be consumed via PushConsumer")
-    public void testTrans_SendCommit_PushConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.TRANSACTION.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQTransProducer(account, topic, new LocalTransactionCheckerImpl(TransactionResolution.ROLLBACK));
-        Assertions.assertNotNull(producer);
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-            producer.sendTrans(message, true);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Send 10 transaction messages and rollback directly (Checker does commit), expecting that these 10 messages cannot be consumed by PushConsumer")
-    public void testTrans_SendRollback_PushConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.TRANSACTION.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQTransProducer(account, topic, new LocalTransactionCheckerImpl(TransactionResolution.COMMIT));
-        Assertions.assertNotNull(producer);
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-            producer.sendTrans(message, false);
-        }
-        //Wait for the callback, expecting not to commit the already rolled back message
-        TestUtils.waitForSeconds(60);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        Assertions.assertEquals(0, pushConsumer.getListener().getDequeueMessages().getDataSize());
-    }
-
-    @Test
-    @DisplayName("Send 10 transaction messages and COMMIT the transaction by Checker (perform COMMIT), expecting the 10 messages to be consumed by PushConsumer")
-    public void testTrans_SendCheckerCommit_PushConsume() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.TRANSACTION.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQTransProducer(account, topic, new LocalTransactionCheckerImpl(TransactionResolution.COMMIT));
-        Assertions.assertNotNull(producer);
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-            producer.sendTrans(message, null);
-        }
-        //Wait for the callback to execute commit
-        TestUtils.waitForSeconds(60);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-    }
-
-    @Test
-    @DisplayName("Send 10 transaction messages and roll back the transaction by Checker (performing ROLLBACK), expecting that the 10 messages will not be consumed by PushConsumer")
-    public void testTrans_CheckerRollback() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.TRANSACTION.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        producer = ProducerFactory.getRMQTransProducer(account, topic, new LocalTransactionCheckerImpl(TransactionResolution.ROLLBACK));
-        Assertions.assertNotNull(producer);
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-            producer.sendTrans(message, null);
-        }
-        //Wait for the rollback and execute rollback
-        TestUtils.waitForSeconds(60);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        Assertions.assertEquals(0, pushConsumer.getListener().getDequeueMessages().getDataSize());
-    }
-
-    @Test
-    @DisplayName("Send 10 transactional messages and commit them by checking back (Checker commits for partial messages), and the expected committed messages can be consumed by PushConsumer")
-    public void testTrans_SendCheckerPartionCommit() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.TRANSACTION.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        pushConsumer = ConsumerFactory.getRMQPushConsumer(account, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-        simpleConsumer = ConsumerFactory.getRMQSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer.getSimpleConsumer());
-
-        AtomicInteger commitMsgNum = new AtomicInteger(0);
-        AtomicInteger rollbackMsgNum = new AtomicInteger(0);
-        producer = ProducerFactory.getRMQTransProducer(account, topic, new TransactionChecker() {
-            @Override
-            public TransactionResolution check(MessageView messageView) {
-                if (Integer.parseInt(StandardCharsets.UTF_8.decode(messageView.getBody()).toString()) % 2 == 0) {
-                    commitMsgNum.getAndIncrement();
-                    return TransactionResolution.COMMIT;
-                } else {
-                    rollbackMsgNum.getAndIncrement();
-                    return TransactionResolution.ROLLBACK;
-                }
-            }
-        });
-        Assertions.assertNotNull(producer);
-
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, String.valueOf(i));
-            producer.sendTrans(message, null);
-        }
-        await().atMost(90, SECONDS).until(new Callable<Boolean>() {
-            @Override
-            public Boolean call() {
-                return rollbackMsgNum.get() == commitMsgNum.get() && commitMsgNum.get() == SEND_NUM / 2;
-            }
-        });
-        //Wait for the rollback and execute commit/rollback
-        TestUtils.waitForSeconds(60);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        Assertions.assertEquals(5, pushConsumer.getListener().getDequeueMessages().getDataSize());
-    }
-
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/server/abnormal/DynamicChangeConsumeGroupTest.java b/src/test/java/org/apache/rocketmq/broker/server/abnormal/DynamicChangeConsumeGroupTest.java
deleted file mode 100644
index c8fae46..0000000
--- a/src/test/java/org/apache/rocketmq/broker/server/abnormal/DynamicChangeConsumeGroupTest.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * 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.rocketmq.broker.server.abnormal;
-//
-//import java.time.Duration;
-//import java.util.Collections;
-//import java.util.HashMap;
-//import java.util.concurrent.Callable;
-//import java.util.concurrent.atomic.AtomicBoolean;
-//import java.util.concurrent.atomic.AtomicInteger;
-//import org.apache.rocketmq.client.apis.ClientException;
-//import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
-//import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-//import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
-//import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-//import org.apache.rocketmq.client.apis.message.Message;
-//import org.apache.rocketmq.client.apis.producer.Producer;
-//import org.apache.rocketmq.client.apis.producer.SendReceipt;
-//import org.apache.rocketmq.client.rmq.RMQNormalConsumer;
-//import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-//import org.apache.rocketmq.console.enums.consumer.group.ConsumeRetryPolicyEnum;
-//import org.apache.rocketmq.console.enums.consumer.group.ConsumerDeliveryOrderTypeEnum;
-//import org.apache.rocketmq.console.enums.consumer.group.ConsumerGroupStatusEnum;
-//import org.apache.rocketmq.console.enums.topic.MessageTypeEnum;
-//import org.apache.rocketmq.enums.TESTSET;
-//import org.apache.rocketmq.factory.ClientConfigurationFactory;
-//import org.apache.rocketmq.factory.ConsumerFactory;
-//import org.apache.rocketmq.factory.MessageFactory;
-//import org.apache.rocketmq.factory.ProducerFactory;
-//import org.apache.rocketmq.frame.BaseOperate;
-//import org.apache.rocketmq.listener.rmq.RMQNormalListener;
-//import org.apache.rocketmq.util.NameUtils;
-//import org.apache.rocketmq.util.RandomUtils;
-//import org.apache.rocketmq.util.TestUtils;
-//import org.apache.rocketmq.util.VerifyUtils;
-//import org.junit.jupiter.api.AfterEach;
-//import org.junit.jupiter.api.Assertions;
-//import org.junit.jupiter.api.BeforeEach;
-//import org.junit.jupiter.api.DisplayName;
-//import org.junit.jupiter.api.Tag;
-//import org.junit.jupiter.api.Test;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//
-//import static java.util.concurrent.TimeUnit.SECONDS;
-//import static org.awaitility.Awaitility.await;
-//
-//@Tag(TESTSET.CLIENT)
-//@Tag(TESTSET.SMOKE)
-//public class DynamicChangeConsumeGroupTest extends BaseOperate {
-//    private final Logger logger = LoggerFactory.getLogger(DynamicChangeConsumeGroupTest.class);
-//    private String tag;
-//    private final static int sendNum = 10;
-//    private String Concurrently = ConsumerDeliveryOrderTypeEnum.CONCURRENTLY.getCode();
-//    private String Orderly = ConsumerDeliveryOrderTypeEnum.ORDERLY.getCode();
-//    private String DefaultRetryPolicy = ConsumeRetryPolicyEnum.CONSUME_RETRY_POLICY_DEFAULT.getCode();
-//    private String FixedRetryPolicy = ConsumeRetryPolicyEnum.CONSUME_RETRY_POLICY_FIXED.getCode();
-//
-//    @BeforeEach
-//    public void setUp() {
-//        tag = NameUtils.getRandomTagName();
-//    }
-//
-//    @AfterEach
-//    public void tearDown() {
-//    }
-//
-//    @Test
-//    @DisplayName("Sends a common message to check whether the consumption times match the ConsumeGroup retry times")
-//    public void testNormalTopicDynamicChangeRetryTimes() {
-//        String className = this.getClass().getName();
-//        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-//        String topic = getTopic(MessageTypeEnum.NORMAL.getCode(), className, methodName);
-//        String groupId = NameUtils.getRandomGroupName(methodName);
-//        try {
-//            int maxRetryTimes = 1;
-//            groupWrapper.createConsumerGroup(primaryAccount1, account1InstanceId, groupId, "", Concurrently, DefaultRetryPolicy, maxRetryTimes, true);
-//            groupWrapper.waitConsumerGroupExist(primaryAccount1, account1InstanceId, groupId);
-//
-//            Producer producer = ProducerFactory.getProducer(primaryAccount1, topic);
-//            Assertions.assertNotNull(producer, "Get Producer Failed");
-//            AtomicInteger consumeTimes = new AtomicInteger(0);
-//            HashMap<String, Integer> checkResult = new HashMap<>();
-//            AtomicBoolean beyondRetryTimes = new AtomicBoolean(false);
-//            SimpleConsumer simpleConsumer = null;
-//            try {
-//                provider.newPushConsumerBuilder()
-//                    .setClientConfiguration(ClientConfigurationFactory.build(primaryAccount1))
-//                    .setConsumerGroup(groupId)
-//                    .setSubscriptionExpressions(Collections.singletonMap(topic, new FilterExpression(tag, FilterExpressionType.TAG)))
-//                    .setConsumptionThreadCount(20)
-//                    .setMessageListener(messageView -> {
-//                        consumeTimes.getAndIncrement();
-//                        checkResult.put(messageView.getMessageId().toString(), consumeTimes.get());
-//                        logger.info(String.format("consume message failed ,%s", messageView));
-//                        return ConsumeResult.FAILURE;
-//                    })
-//                    .build();
-//                simpleConsumer = ConsumerFactory.getSimpleConsumer(primaryAccount1, topic, groupId, new FilterExpression(tag, FilterExpressionType.TAG), Duration.ofSeconds(10));
-//                VerifyUtils.tryReceiveOnce(simpleConsumer);
-//            } catch (ClientException e) {
-//                throw new RuntimeException(e);
-//            }
-//
-//            Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-//            SendReceipt firstSendReceipt =  producer.send(message);
-//            //The interval between a retry and the normal consumption is 10s
-//            await().atMost(120, SECONDS).until(new Callable<Boolean>() {
-//                @Override
-//                public Boolean call() {
-//                    return checkResult.get(firstSendReceipt.getMessageId().toString()) == 2;
-//                }
-//            });
-//            //Verify that the delivery did not exceed the maximum number of retries
-//            Assertions.assertEquals(2, consumeTimes.get(), "The maximum consumption retry times is abnormal. Procedure");
-//
-//            groupWrapper.updateConsumerGroup(primaryAccount1, account1InstanceId, groupId, "", Concurrently, DefaultRetryPolicy, maxRetryTimes + 1, true);
-//            await().atMost(60, SECONDS).until(new Callable<Boolean>() {
-//                @Override
-//                public Boolean call() {
-//                    return ConsumerGroupStatusEnum.RUNNING.getCode().equals(
-//                        groupWrapper.getConsumerGroup(primaryAccount1, account1InstanceId, groupId, true).getData().getStatus());
-//                }
-//            });
-//            //Refresh the gid cache obtained by the proxy from the metadata center
-//            TestUtils.waitForSeconds(20);
-//            VerifyUtils.tryReceiveOnce(simpleConsumer);
-//            consumeTimes.set(0);
-//            SendReceipt secondSendReceipt = producer.send(message);
-//            //The interval between entering the dead letter and normal consumption is 40s
-//            await().atMost(180, SECONDS).until(new Callable<Boolean>() {
-//                @Override
-//                public Boolean call() {
-//                    return checkResult.get(secondSendReceipt.getMessageId().toString()) == 3;
-//                }
-//            });
-//            //Verify that the delivery did not exceed the maximum number of retries
-//            Assertions.assertEquals(3, consumeTimes.get(), "send message failed");
-//        } catch (Exception e) {
-//            Assertions.fail();
-//        }
-//    }
-//
-//    @Test
-//    @DisplayName("Dynamically modify the consumeGroup consumption mode, expecting the consumeGroup to consume sequential messages Concurrently with the current Orderly or orderly Settings")
-//    public void testFiFoTopicChangeDeliveryOrderType() {
-//        String className = this.getClass().getName();
-//        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-//        String topic = getTopic(MessageTypeEnum.FIFO.getCode(), className, methodName);
-//        String groupId = NameUtils.getRandomGroupName(methodName);
-//
-//        try {
-//            groupWrapper.createConsumerGroup(primaryAccount1, account1InstanceId, groupId, "", Concurrently, DefaultRetryPolicy, 16, true);
-//            groupWrapper.waitConsumerGroupExist(primaryAccount1, account1InstanceId, groupId);
-//
-//            RMQNormalConsumer pushConsumer = ConsumerFactory.getRMQPushConsumer(primaryAccount1, topic, groupId, new FilterExpression(tag), new RMQNormalListener());
-//            SimpleConsumer simpleConsumer = ConsumerFactory.getSimpleConsumer(primaryAccount1, topic, groupId, new FilterExpression(tag, FilterExpressionType.TAG), Duration.ofSeconds(10));
-//            VerifyUtils.tryReceiveOnce(simpleConsumer);
-//
-//            RMQNormalProducer producer = ProducerFactory.getRMQProducer(primaryAccount1, topic);
-//            Assertions.assertNotNull(producer, "Get Producer failed");
-//            for (int i = 0; i < sendNum; i++) {
-//                String shardingKey = Character.toString((char) (i % 2 + 'a'));
-//                Message message = MessageFactory.buildOrderMessage(topic, tag, RandomUtils.getStringByUUID(), shardingKey);
-//                producer.send(message);
-//            }
-//            Assertions.assertEquals(sendNum, producer.getEnqueueMessages().getDataSize(), "send message failed");
-//            VerifyUtils.verifyNormalMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-//
-//            groupWrapper.updateConsumerGroup(primaryAccount1, account1InstanceId, groupId, "", Orderly, FixedRetryPolicy, 16, true);
-//            await().atMost(60, SECONDS).until(new Callable<Boolean>() {
-//                @Override
-//                public Boolean call() {
-//                    return ConsumerGroupStatusEnum.RUNNING.getCode().equals(
-//                        groupWrapper.getConsumerGroup(primaryAccount1, account1InstanceId, groupId, true).getData().getStatus());
-//                }
-//            });
-//            VerifyUtils.tryReceiveOnce(simpleConsumer);
-//            TestUtils.waitForSeconds(20);
-//
-//            producer.clearMsg();
-//            pushConsumer.getListener().clearMsg();
-//            for (int i = 0; i < sendNum; i++) {
-//                String shardingKey = Character.toString((char) (i % 2 + 'a'));
-//                Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), shardingKey);
-//                producer.send(message);
-//            }
-//            Assertions.assertEquals(sendNum, producer.getEnqueueMessages().getDataSize(), "send message failed");
-//            VerifyUtils.verifyOrderMessage(producer.getEnqueueMessages(), pushConsumer.getListener().getDequeueMessages());
-//
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
-//
-//}
-//
diff --git a/src/test/java/org/apache/rocketmq/broker/server/abnormal/PushConsumerRetryTest.java b/src/test/java/org/apache/rocketmq/broker/server/abnormal/PushConsumerRetryTest.java
deleted file mode 100644
index 3e86007..0000000
--- a/src/test/java/org/apache/rocketmq/broker/server/abnormal/PushConsumerRetryTest.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * 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.rocketmq.broker.server.abnormal;
-
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
-import org.apache.rocketmq.client.apis.consumer.PushConsumer;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ClientConfigurationFactory;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.awaitility.Awaitility.await;
-
-@Tag(TESTSET.DELAY)
-public class PushConsumerRetryTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(PushConsumerRetryTest.class);
-    private String tag;
-    private final static int SEND_NUM = 10;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-    }
-
-    @Test
-    @DisplayName("The normal message is sent, and after the PushConsumer partial retry, the retry message is expected to be consumed")
-    public void testNormalTopicPushConsumerRetry() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Map<String, MessageView> noRetryMsgs = new ConcurrentHashMap<>();
-        Map<String, MessageView> retryMsgs = new ConcurrentHashMap<>();
-
-        SimpleConsumer simpleConsumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer);
-
-        try {
-            provider.newPushConsumerBuilder().setClientConfiguration(ClientConfigurationFactory.build(account)).setConsumerGroup(groupId).setSubscriptionExpressions(Collections.singletonMap(topic, new FilterExpression(tag, FilterExpressionType.TAG))).setConsumptionThreadCount(20).setMessageListener(messageView -> {
-                if (Integer.parseInt(StandardCharsets.UTF_8.decode(messageView.getBody()).toString()) % 2 == 0) {
-                    log.info(String.format("commit normal msg %s ", messageView));
-                    noRetryMsgs.putIfAbsent(messageView.getMessageId().toString(), messageView);
-                    return ConsumeResult.SUCCESS;
-                } else if (messageView.getDeliveryAttempt() == 2) {
-                    log.info(String.format("retry  normal msg %s ", messageView));
-                    retryMsgs.putIfAbsent(messageView.getMessageId().toString(), messageView);
-                    return ConsumeResult.SUCCESS;
-                }
-                return ConsumeResult.FAILURE;
-            }).build();
-        } catch (ClientException e) {
-            throw new RuntimeException(e);
-        }
-        Assertions.assertNotNull(producer, "Get Producer Failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, String.valueOf(i));
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        //All messages are consumed.
-        await().atMost(120, SECONDS).until(new Callable<Boolean>() {
-            @Override
-            public Boolean call() throws Exception {
-                return noRetryMsgs.size() == retryMsgs.size() && noRetryMsgs.size() == SEND_NUM / 2;
-            }
-        });
-        for (Object msgId : producer.getEnqueueMessages().getAllData()) {
-            Assertions.assertTrue(noRetryMsgs.containsKey(msgId) || retryMsgs.containsKey(msgId));
-        }
-    }
-
-    @Test
-    @DisplayName("The send order message, after the PushConsumer partial retry, is expected to consume the retry message, and the message consumption order and send order")
-    public void testFiFoTopicPushConsumerRetry() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        SimpleConsumer simpleConsumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer);
-
-        PushConsumer pushConsumer = null;
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        Vector<MessageView> recvMessages = new Vector<>();
-        try {
-            pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, new FilterExpression(tag)))
-                .setConsumptionThreadCount(20)
-                .setMessageListener(messageView -> {
-                    if (Integer.parseInt(StandardCharsets.UTF_8.decode(messageView.getBody()).toString()) % 2 == 0) {
-                        log.info(String.format("commit fifo msg %s ", messageView));
-                        recvMessages.add(messageView);
-                        return ConsumeResult.SUCCESS;
-                    } else if (messageView.getDeliveryAttempt() == 2) {
-                        log.info(String.format("retry fifo msg %s ", messageView));
-                        recvMessages.add(messageView);
-                        return ConsumeResult.SUCCESS;
-                    }
-                    return ConsumeResult.FAILURE;
-                }).build();
-        } catch (ClientException e) {
-            throw new RuntimeException(e);
-        }
-        Assertions.assertNotNull(producer, "Get Producer Failed");
-        String messageGroup = RandomUtils.getStringByUUID();
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), messageGroup);
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        //All messages are consumed.
-        await().atMost(120, SECONDS).until(new Callable<Boolean>() {
-            @Override
-            public Boolean call() throws Exception {
-                return recvMessages.size() == SEND_NUM;
-            }
-        });
-        for (int i = 0; i < SEND_NUM; i++) {
-            Assertions.assertEquals(i, Integer.parseInt(StandardCharsets.UTF_8.decode(recvMessages.get(i).getBody()).toString()), "recv message failed");
-        }
-    }
-
-    @Test
-    @DisplayName("Send sequential messages, using three Shardingkeys, after partial retries, expect to consume retry messages, and the order of message consumption and the order of message delivery")
-    public void testFiFoTopicWith3ShardingkeyPushConsumerRetry() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        SimpleConsumer simpleConsumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(simpleConsumer);
-
-        PushConsumer pushConsumer = null;
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer);
-        Vector<MessageView> recvMessages = new Vector<>();
-        try {
-            pushConsumer = provider.newPushConsumerBuilder()
-                .setClientConfiguration(ClientConfigurationFactory.build(account))
-                .setConsumerGroup(groupId)
-                .setSubscriptionExpressions(Collections.singletonMap(topic, new FilterExpression(tag)))
-                .setConsumptionThreadCount(20)
-                .setMessageListener(messageView -> {
-                    if (Integer.parseInt(StandardCharsets.UTF_8.decode(messageView.getBody()).toString()) % 2 == 0) {
-                        log.info(String.format("commit fifo msg %s ", messageView));
-                        recvMessages.add(messageView);
-                        return ConsumeResult.SUCCESS;
-                    } else if (messageView.getDeliveryAttempt() == 2) {
-                        log.info(String.format("retry fifo msg %s ", messageView));
-                        recvMessages.add(messageView);
-                        return ConsumeResult.SUCCESS;
-                    }
-                    return ConsumeResult.FAILURE;
-                }).build();
-        } catch (ClientException e) {
-            throw new RuntimeException(e);
-        }
-        Assertions.assertNotNull(producer, "Get Producer Failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), String.valueOf(i % 3));
-            producer.send(message);
-        }
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        //All messages are consumed.
-        await().atMost(180, SECONDS).until(new Callable<Boolean>() {
-            @Override
-            public Boolean call() throws Exception {
-                return recvMessages.size() == SEND_NUM;
-            }
-        });
-
-        ArrayList<MessageView> shardingKeyA = new ArrayList<MessageView>();
-        ArrayList<MessageView> shardingKeyB = new ArrayList<MessageView>();
-        ArrayList<MessageView> shardingKeyC = new ArrayList<MessageView>();
-        for (int i = 0; i < SEND_NUM; i++) {
-            MessageView messageView = recvMessages.get(i);
-            switch (messageView.getMessageGroup().toString()) {
-                case "Optional[a]":
-                    shardingKeyA.add(messageView);
-                    break;
-                case "Optional[b]":
-                    shardingKeyB.add(messageView);
-                    break;
-                case "Optional[c]":
-                    shardingKeyC.add(messageView);
-                    break;
-                default:
-                    log.info(String.format("recv msgs with wrong shardingkey: %s, %s",
-                        messageView.getMessageGroup(), messageView));
-            }
-        }
-        Assertions.assertTrue(isSorted(shardingKeyA));
-        Assertions.assertTrue(isSorted(shardingKeyB));
-        Assertions.assertTrue(isSorted(shardingKeyC));
-    }
-
-    public static boolean isSorted(List<MessageView> messageViewList) {
-        for (int i = 0; i < messageViewList.size() - 1; i++) {
-            if (Integer.parseInt(StandardCharsets.UTF_8.decode(messageViewList.get(i).getBody()).toString())
-                > Integer.parseInt(StandardCharsets.UTF_8.decode(messageViewList.get(i + 1).getBody()).toString())) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/simple/SimpleAckTest.java b/src/test/java/org/apache/rocketmq/broker/simple/SimpleAckTest.java
deleted file mode 100644
index 8bea2a5..0000000
--- a/src/test/java/org/apache/rocketmq/broker/simple/SimpleAckTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * 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.rocketmq.broker.simple;
-
-import java.time.Duration;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.TestUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.Timeout;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Tag(TESTSET.NORMAL)
-@Tag(TESTSET.SIMPLE)
-public class SimpleAckTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(SimpleAckTest.class);
-    private String tag;
-    private final static int SEND_NUM = 20;
-    private RMQNormalProducer producer;
-
-    @BeforeAll
-    public static void setUpAll() {
-    }
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-        log.info("tag:{}", tag);
-    }
-
-    @AfterEach
-    public void tearDown() {
-        if (producer != null) {
-            producer.close();
-        }
-    }
-
-    @Test
-    @Timeout(180)
-    @DisplayName("Send 20 normal messages synchronously and expect SimpleConsumer to receive() and ack() messages normally")
-    public void testNormal_simple_receive_ack() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, tag + "-" + i);
-            producer.send(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.waitReceiveThenAck(producer, consumer, 1, Duration.ofSeconds(30));
-    }
-
-    @Test
-    @DisplayName("Send 20 normal messages synchronously. Expect SimpleConsumer to receive normal receiveAsync() and ack() messages")
-    public void testNormal_simple_receiveAsync_ack() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, tag + "-" + i);
-            producer.sendAsync(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.waitReceiveAsyncThenAck(producer, consumer, 1, Duration.ofSeconds(30));
-    }
-
-    @Test
-    @Timeout(180)
-    @DisplayName("Send 20 normal messages synchronously and expect SimpleConsumer to receive() and ackAsync() messages normally")
-    public void testNormal_simple_receive_ackAsync() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, tag + "-" + i);
-            producer.sendAsync(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.waitReceiveThenAckAsync(producer, consumer, 1, Duration.ofSeconds(30));
-    }
-
-    @Test
-    @Timeout(180)
-    @DisplayName("Send 20 normal messages synchronously. Expect SimpleConsumer to receive normal receiveAsync() and ackAsync() messages")
-    public void testNormal_simple_receiveAsync_ackAsync() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-
-        producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildMessage(topic, tag, tag + "-" + i);
-            producer.sendAsync(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-
-        VerifyUtils.waitReceiveAsyncThenAckAsync(producer, consumer, 1, Duration.ofSeconds(30));
-    }
-
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/simple/SimpleOrderParamTest.java b/src/test/java/org/apache/rocketmq/broker/simple/SimpleOrderParamTest.java
deleted file mode 100644
index 2351a99..0000000
--- a/src/test/java/org/apache/rocketmq/broker/simple/SimpleOrderParamTest.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * 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.rocketmq.broker.simple;
-
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.util.AssertUtils;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.TestUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Tag(TESTSET.SIMPLE)
-public class SimpleOrderParamTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(SimpleOrderParamTest.class);
-    private String tag;
-    private String groupId;
-    private final static int SEND_NUM = 20;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-        groupId = NameUtils.getRandomGroupName();
-        log.info("tag:{}, groupId:{}", tag, groupId);
-    }
-
-    @AfterEach
-    public void tearDown() {
-    }
-
-    @Test
-    @DisplayName("When sending 20 sequential messages synchronously using the same MessageGroup, SimpleConsumer normally receives () messages, but does not ack() messages, and keeps the sequence; the messages are stuck at the first")
-    public void testFIFO_simple_receive_nack() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-
-        String messageGroup = RandomUtils.getStringByUUID();
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), messageGroup);
-            producer.send(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-
-        List<Runnable> runnables = new ArrayList<>(4);
-        List<MessageView> receivedMessage = new ArrayList<>();
-        for (int i = 0; i < 4; i++) {
-            runnables.add(() -> {
-                long startTime = System.currentTimeMillis();
-                while (System.currentTimeMillis() < startTime + 30000) {
-                    try {
-                        List<MessageView> messageViews = consumer.receive(1, Duration.ofSeconds(10));
-                        log.info("Get {} message: {}", messageViews.size(), Arrays.toString(messageViews.toArray()));
-                        for (MessageView messageView : messageViews) {
-                            log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Retry:{}", messageView.getMessageId(),
-                                StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), messageView.getDeliveryAttempt());
-                            receivedMessage.add(messageView);
-                        }
-                    } catch (ClientException e) {
-                        e.printStackTrace();
-                    }
-                }
-            });
-        }
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, 60);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        log.info("A total of {} messages were received", receivedMessage.size());
-        for (MessageView view : receivedMessage) {
-            if (!StandardCharsets.UTF_8.decode(view.getBody()).toString().equals("0")) {
-                Assertions.fail(String.format("Consumption out of order, expected :Body=%s Actual :Body=%s", 0, StandardCharsets.UTF_8.decode(view.getBody())));
-            }
-        }
-    }
-
-    @Disabled
-    @DisplayName("20 sequential messages are sent synchronously, which are divided into eight Messagegroups. Normal receive() messages but no ack() messages are sent, and the sequence is maintained")
-    public void testFIFO_simple_multiMessageGroup() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-        try {
-            consumer.receive(1, Duration.ofSeconds(10));
-        } catch (ClientException e) {
-            e.printStackTrace();
-        }
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-
-        String messageGroup = RandomUtils.getStringByUUID();
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), messageGroup + String.valueOf(i % 8));
-            producer.send(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-
-        List<Runnable> runnables = new ArrayList<>(8);
-        List<MessageView> receivedMessage = new ArrayList<>();
-        for (int i = 0; i < 10; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    long startTime = System.currentTimeMillis();
-                    while (System.currentTimeMillis() < startTime + 30000) {
-                        try {
-                            List<MessageView> messageViews = consumer.receive(1, Duration.ofSeconds(10));
-                            log.info("Get {} message: {}", messageViews.size(), Arrays.toString(messageViews.toArray()));
-                            for (MessageView messageView : messageViews) {
-                                log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Retry:{}", messageView.getMessageId(),
-                                    StandardCharsets.UTF_8.decode(messageView.getBody()), messageView.getTag().get(), messageView.getProperties(), messageView.getDeliveryAttempt());
-                                receivedMessage.add(messageView);
-                            }
-                        } catch (ClientException e) {
-                            e.printStackTrace();
-                        }
-                    }
-                }
-            });
-        }
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, 60);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        log.info("A total of {} messages were received", receivedMessage.size());
-        for (MessageView view : receivedMessage) {
-            if (!StandardCharsets.UTF_8.decode(view.getBody()).toString().equals("0")) {
-                Assertions.fail(String.format("Consumption out of order, expected :Body=%s Actual :Body=%s", 0, StandardCharsets.UTF_8.decode(view.getBody())));
-            }
-        }
-    }
-
-    @Test
-    @DisplayName("Twenty sequential messages are sent synchronously and receive(3) in batch. All pulled messages are ack() messages except the first one. It is expected that all messages remain sequential and are consumed again after a certain time")
-    public void testFIFO_simple_receive_multi_nack() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-
-        String messageGroup = RandomUtils.getStringByUUID();
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), messageGroup);
-            producer.send(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-
-        List<Runnable> runnables = new ArrayList<>(8);
-        List<MessageView> receivedMessage = new ArrayList<>();
-        ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
-        for (int i = 0; i < 4; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    long startTime = System.currentTimeMillis();
-                    log.info("Start execution");
-                    while (System.currentTimeMillis() < startTime + 30000) {
-                        try {
-                            List<MessageView> messageViews = consumer.receive(3, Duration.ofSeconds(10));
-                            log.info("Get {} message: {}", messageViews.size(), Arrays.toString(messageViews.toArray()));
-                            for (int j = 0; j < messageViews.size(); j++) {
-                                String messageId = messageViews.get(j).getMessageId().toString();
-                                if (j > 0) {
-                                    consumer.ack(messageViews.get(j));
-                                    receivedMessage.add(messageViews.get(j));
-                                    log.info("ack message:{}", messageId);
-                                }
-                                log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, Retry:{}", messageId,
-                                    StandardCharsets.UTF_8.decode(messageViews.get(j).getBody()), messageViews.get(j).getTag().get(), messageViews.get(j).getProperties(), messageViews.get(j).getDeliveryAttempt());
-                                if (map.containsKey(messageId)) {
-                                    map.put(messageId, map.get(messageId) + 1);
-                                } else {
-                                    map.put(messageId, 1);
-                                }
-                            }
-                        } catch (ClientException e) {
-                            log.info("exception");
-                            e.printStackTrace();
-                        }
-                    }
-                    log.info("End Execution");
-                    Assertions.assertEquals(3, map.size());
-                    for (Map.Entry<String, Integer> entry : map.entrySet()) {
-                        Assertions.assertTrue(entry.getValue() > 1);
-                    }
-                }
-            });
-        }
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, 60);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        log.info("A total of {} messages were received", receivedMessage.size());
-    }
-
-    //TODO
-    @Disabled
-    @DisplayName("Send 20 sequential messages synchronously, batch receive(3), and only ack() the first message of pulled messages. Expect all messages to remain sequential and retry consumption after a certain time")
-    public void testFIFO_simple_receive_multi_only_ack_first() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        String messageGroup = RandomUtils.getStringByUUID();
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), messageGroup);
-            producer.send(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-
-        List<Runnable> runnables = new ArrayList<>();
-        ConcurrentHashMap<String, List<MessageView>> map = new ConcurrentHashMap<>();
-
-        for (int i = 0; i < 4; i++) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    long startTime = System.currentTimeMillis();
-                    log.info("Start execution");
-                    int consumeTimes = 0;
-                    while (System.currentTimeMillis() < startTime + 30000) {
-                        try {
-                            List<MessageView> messageViews = consumer.receive(3, Duration.ofSeconds(10));
-                            log.info("{} message obtained for {} time: {}", ++consumeTimes, messageViews.size(), Arrays.toString(messageViews.toArray()));
-                            if (messageViews.size() > 0) {
-                                Assertions.assertEquals(3, messageViews.size(), "The number of pulled messages does not meet expectations");
-                            }
-                            for (int j = 0; j < messageViews.size(); j++) {
-                                List<MessageView> receivedMessage = new ArrayList<>();
-                                String messageId = messageViews.get(j).getMessageId().toString();
-                                String body = StandardCharsets.UTF_8.decode(messageViews.get(j).getBody()).toString();
-                                if (j == 0) {
-                                    consumer.ack(messageViews.get(j));
-                                    log.info("ack message:{}, body:{}", messageId, StandardCharsets.UTF_8.decode(messageViews.get(j).getBody()));
-                                }
-                                if (map.containsKey(body)) {
-                                    receivedMessage = map.get(body);
-                                }
-                                receivedMessage.add(messageViews.get(j));
-                                map.put(StandardCharsets.UTF_8.decode(messageViews.get(j).getBody()).toString(), receivedMessage);
-                                log.info("MessageId:{}, Body:{}, tag:{}, Property:{}, DeliveryAttempt:{}", messageId,
-                                    StandardCharsets.UTF_8.decode(messageViews.get(j).getBody()), messageViews.get(j).getTag().get(), messageViews.get(j).getProperties(), messageViews.get(j).getDeliveryAttempt());
-                            }
-
-                        } catch (ClientException e) {
-                            log.info("exception==");
-                            e.printStackTrace();
-                        }
-                    }
-                    log.info("End Execution");
-//                    Assertions.assertEquals(sendNum, receivedMessage.size(), "Consumption is not as expected");
-                }
-            });
-        }
-        try {
-            AssertUtils.assertConcurrent("Test Failed", runnables, 60);
-            log.info("Start check");
-            for (Map.Entry<String, List<MessageView>> entry : map.entrySet()) {
-                if (entry.getKey().equals("0")) {
-                    Assertions.assertEquals(1, entry.getValue().size(), "not expected");
-                }
-                if (entry.getKey().equals("1")) {
-                    Assertions.assertTrue(entry.getValue().size() > 1);
-                    List<MessageView> viewList = entry.getValue();
-                    long actual = viewList.stream().filter(msg -> msg.getDeliveryAttempt() == 2).count();
-                    Assertions.assertEquals(1, actual, String.format("The number of message retries obtained was not expected, expect:%s, actual:%s", 1, actual));
-                }
-            }
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-    }
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/simple/SimpleOrderTest.java b/src/test/java/org/apache/rocketmq/broker/simple/SimpleOrderTest.java
deleted file mode 100644
index dca3391..0000000
--- a/src/test/java/org/apache/rocketmq/broker/simple/SimpleOrderTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.rocketmq.broker.simple;
-
-import java.time.Duration;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.TestUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Tag(TESTSET.SIMPLE)
-public class SimpleOrderTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(SimpleOrderTest.class);
-    private String tag;
-    private String groupId;
-    private final static int SEND_NUM = 20;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-        groupId = NameUtils.getRandomGroupName();
-        log.info("tag:{}, groupId:{}", tag, groupId);
-    }
-
-    @Test
-    @DisplayName("Send 20 sequential messages synchronously, and expect SimpleConsumer to receive() and ack() messages properly and maintain the sequence")
-    public void testFIFO_simple_receive_ack() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-
-        String topic = getTopic(TopicMessageType.FIFO.getValue(), methodName);
-        String groupId = getOrderlyGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-
-        for (int i = 0; i < SEND_NUM; i++) {
-            Message message = MessageFactory.buildOrderMessage(topic, tag, String.valueOf(i), "order-001");
-            producer.send(message);
-        }
-        TestUtils.waitForSeconds(1);
-        Assertions.assertEquals(SEND_NUM, producer.getEnqueueMessages().getDataSize(), "send message failed");
-        VerifyUtils.waitFIFOReceiveThenAck(producer, consumer, 5, Duration.ofSeconds(30));
-    }
-
-}
-
diff --git a/src/test/java/org/apache/rocketmq/broker/simple/SimpleParamTest.java b/src/test/java/org/apache/rocketmq/broker/simple/SimpleParamTest.java
deleted file mode 100644
index 8ce106b..0000000
--- a/src/test/java/org/apache/rocketmq/broker/simple/SimpleParamTest.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * 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.rocketmq.broker.simple;
-
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.rocketmq.client.apis.ClientException;
-import org.apache.rocketmq.client.apis.consumer.FilterExpression;
-import org.apache.rocketmq.client.apis.consumer.SimpleConsumer;
-import org.apache.rocketmq.client.apis.message.Message;
-import org.apache.rocketmq.client.apis.message.MessageView;
-import org.apache.rocketmq.client.rmq.RMQNormalProducer;
-import org.apache.rocketmq.common.attribute.TopicMessageType;
-import org.apache.rocketmq.enums.TESTSET;
-import org.apache.rocketmq.factory.ConsumerFactory;
-import org.apache.rocketmq.factory.MessageFactory;
-import org.apache.rocketmq.factory.ProducerFactory;
-import org.apache.rocketmq.frame.BaseOperate;
-import org.apache.rocketmq.util.AssertUtils;
-import org.apache.rocketmq.util.NameUtils;
-import org.apache.rocketmq.util.RandomUtils;
-import org.apache.rocketmq.util.TestUtils;
-import org.apache.rocketmq.util.VerifyUtils;
-import org.apache.rocketmq.util.data.collect.DataCollector;
-import org.apache.rocketmq.util.data.collect.DataCollectorManager;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Tag(TESTSET.SIMPLE)
-public class SimpleParamTest extends BaseOperate {
-    private final Logger log = LoggerFactory.getLogger(SimpleOrderTest.class);
-    private String tag;
-    private String groupId;
-
-    @BeforeEach
-    public void setUp() {
-        tag = NameUtils.getRandomTagName();
-        groupId = NameUtils.getRandomGroupName();
-        log.info("tag:{}, groupId:{}", tag, groupId);
-    }
-
-    @AfterEach
-    public void tearDown() {
-    }
-
-//    @Test
-//    @DisplayName("If you use SimpleConsumer to set the maximum number of retries of GroupId to 3, the maximum number of retries is expected to be 3, and the retry interval is equal to 10s of the received parameter")
-//    public void testNormal_simple_maxRetryTimes() {
-//        String className = this.getClass().getName();
-//        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-//
-//        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-//        String groupId = getGroupId(methodName);
-//
-//        groupWrapper.updateConsumerGroup(primaryAccount1, account1InstanceId, groupId, null, "Concurrently", "DefaultRetryPolicy", 1, true);
-//
-//        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(primaryAccount1, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-//        VerifyUtils.tryReceiveOnce(consumer);
-//        RMQNormalProducer producer = ProducerFactory.getRMQProducer(primaryAccount1, topic);
-//        Assertions.assertNotNull(producer, "Get Producer failed");
-//        Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-//        producer.send(message);
-//        VerifyUtils.waitReceiveThenAck(producer, consumer, 1, Duration.ofSeconds(10), 2, 40, false);
-//    }
-
-    //TODO
-    @Disabled
-    @DisplayName("After the SimpleConsumer receive(1,10s) message is used, an ack message is performed after three retries. Three retries are expected and the retry interval is equal to 10s of the receive parameter transmission")
-    public void testNormal_simple_receive10_ack_retry3() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(10));
-        VerifyUtils.tryReceiveOnce(consumer);
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-        producer.send(message);
-        VerifyUtils.waitReceiveThenAck(producer, consumer, 1, Duration.ofSeconds(10), 4);
-    }
-
-    @Test
-    @DisplayName("Send an ordinary message synchronously. After using SimpleConsumer receive(1,10s) message, perform an ack in the 11s section. If an INVALID_RECEIPT_HANDLE error message is displayed, then receive a new message again. And successfully ack")
-    public void test_waitAckException_reReceive_ack() {
-        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
-        String topic = getTopic(TopicMessageType.NORMAL.getValue(), methodName);
-        String groupId = getGroupId(methodName);
-
-        SimpleConsumer consumer = ConsumerFactory.getSimpleConsumer(account, topic, groupId, new FilterExpression(tag), Duration.ofSeconds(15));
-        VerifyUtils.tryReceiveOnce(consumer);
-        RMQNormalProducer producer = ProducerFactory.getRMQProducer(account, topic);
-        Assertions.assertNotNull(producer, "Get Producer failed");
-        Message message = MessageFactory.buildMessage(topic, tag, RandomUtils.getStringByUUID());
-        producer.send(message);
-        Assertions.assertEquals(1, producer.getEnqueueMessages().getDataSize(), "send message failed");
-
-        try {
-            long startTime = System.currentTimeMillis();
-            while (System.currentTimeMillis() < startTime + 60000) {
-                List<MessageView> messageViews = consumer.receive(1, Duration.ofSeconds(10));
-                if (messageViews.size() > 0) {
-                    for (MessageView messageView : messageViews) {
-                        log.info("MessageId:{}, Body:{}, tag:{}, property:{}", messageView.getMessageId(), StandardCharsets.UTF_8.decode(messageView.getBody()).toString(), messageView.getTag().get(), messageView.getProperties());
-                        TestUtils.waitForSeconds(11);
-                        consumer.ack(messageView);
-                        Assertions.fail("Calling changeInvisibleDuration after ack fails with an INVALID_RECEIPT_HANDLE error");
-                    }
-                } else {
... 460 lines suppressed ...