jmeter-plugins-for-apache-dubbo对dubbox的兼容改造

本文详细介绍了如何对jmeter-plugins-for-apache-dubbo进行兼容性改造,使其支持Dubbox2.8.4版本,包括调整依赖、代码修改及功能优化等步骤,最终实现了接口级压测工具的有效运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于dubbo生态发展过程的曲折,公司系统较多依赖于原当当维护的dubbox框架,而业务测试中又需要能有一个支持接口级的压测工具(基于dubbo的测试工具之前有造过一个轮子详见:https://blog.youkuaiyun.com/qq355667166/article/details/78914453),经过测试同学选型最终确认了采用jmeter+插件化jmeter-plugins-for-apache-dubbo2.7.4(https://github.com/thubbo/jmeter-plugins-for-apache-dubbo)的方式来实现,但是在真正配置完使用时发现对dubbo2.8.4(Dubbox)不兼容从而导致无法正常使用

apache-dubbo和dubbox版本兼容性比对(可参考:https://blog.youkuaiyun.com/qq_29116427/article/details/100621126):

 

放手开干,下载该插件源码对其进行兼容性改造(以达成最终可用为目的,改造过程可能过于暴力):

1、屏蔽apache的dubbo包依赖,放入dubbox的包依赖,同时增加zkClient的jar包配置

2、此时整个程序编译后会发现大量错误引用,大多数只需要删除原有apache dubbo引用替换成dubbox的引用即可(这块还是蛮简单),这时候发现源码中有应用apache-dubbo中两个常量类,暴力点直接复制代码在本地创建:

创建CommonConstants类并将代码复制进来: 

package io.github.ningyu.jmeter.plugin.util;

import java.util.regex.Pattern;

/**
 * @Author: Andy.jia
 * @Date: 2019-12-04 10:48
 */
public interface CommonConstants {
    String DUBBO = "dubbo";
    String PROVIDER = "provider";
    String CONSUMER = "consumer";
    String APPLICATION_KEY = "application";
    String REMOTE_APPLICATION_KEY = "remote.application";
    String ENABLED_KEY = "enabled";
    String DISABLED_KEY = "disabled";
    String DUBBO_PROPERTIES_KEY = "dubbo.properties.file";
    String DEFAULT_DUBBO_PROPERTIES = "dubbo.properties";
    String ANY_VALUE = "*";
    String COMMA_SEPARATOR = ",";
    String DOT_SEPARATOR = ".";
    Pattern COMMA_SPLIT_PATTERN = Pattern.compile("\\s*[,]+\\s*");
    String PATH_SEPARATOR = "/";
    String PROTOCOL_SEPARATOR = "://";
    String REGISTRY_SEPARATOR = "|";
    Pattern REGISTRY_SPLIT_PATTERN = Pattern.compile("\\s*[|;]+\\s*");
    Pattern D_REGISTRY_SPLIT_PATTERN = Pattern.compile("\\s*[|]+\\s*");
    String SEMICOLON_SEPARATOR = ";";
    Pattern SEMICOLON_SPLIT_PATTERN = Pattern.compile("\\s*[;]+\\s*");
    Pattern EQUAL_SPLIT_PATTERN = Pattern.compile("\\s*[=]+\\s*");
    String DEFAULT_PROXY = "javassist";
    String DEFAULT_DIRECTORY = "dubbo";
    String PROTOCOL_KEY = "protocol";
    String DEFAULT_PROTOCOL = "dubbo";
    String DEFAULT_THREAD_NAME = "Dubbo";
    int DEFAULT_CORE_THREADS = 0;
    int DEFAULT_THREADS = 200;
    String THREADPOOL_KEY = "threadpool";
    String THREAD_NAME_KEY = "threadname";
    String CORE_THREADS_KEY = "corethreads";
    String THREADS_KEY = "threads";
    String QUEUES_KEY = "queues";
    String ALIVE_KEY = "alive";
    String DEFAULT_THREADPOOL = "limited";
    String DEFAULT_CLIENT_THREADPOOL = "cached";
    String IO_THREADS_KEY = "iothreads";
    int DEFAULT_QUEUES = 0;
    int DEFAULT_ALIVE = 60000;
    String TIMEOUT_KEY = "timeout";
    int DEFAULT_TIMEOUT = 1000;
    String REMOVE_VALUE_PREFIX = "-";
    String PROPERTIES_CHAR_SEPERATOR = "-";
    String UNDERLINE_SEPARATOR = "_";
    String SEPARATOR_REGEX = "_|-";
    String GROUP_CHAR_SEPERATOR = ":";
    String HIDE_KEY_PREFIX = ".";
    String DOT_REGEX = "\\.";
    String DEFAULT_KEY_PREFIX = "default.";
    String DEFAULT_KEY = "default";
    int DEFAULT_SERVER_SHUTDOWN_TIMEOUT = 10000;
    String SIDE_KEY = "side";
    String PROVIDER_SIDE = "provider";
    String CONSUMER_SIDE = "consumer";
    String ANYHOST_KEY = "anyhost";
    String ANYHOST_VALUE = "0.0.0.0";
    String LOCALHOST_KEY = "localhost";
    String LOCALHOST_VALUE = "127.0.0.1";
    String METHODS_KEY = "methods";
    String METHOD_KEY = "method";
    String PID_KEY = "pid";
    String TIMESTAMP_KEY = "timestamp";
    String GROUP_KEY = "group";
    String PATH_KEY = "path";
    String INTERFACE_KEY = "interface";
    String FILE_KEY = "file";
    String DUMP_DIRECTORY = "dump.directory";
    String CLASSIFIER_KEY = "classifier";
    String VERSION_KEY = "version";
    String REVISION_KEY = "revision";
    String RELEASE_KEY = "release";
    int MAX_PROXY_COUNT = 65535;
    String MONITOR_KEY = "monitor";
    String CLUSTER_KEY = "cluster";
    String USERNAME_KEY = "username";
    String PASSWORD_KEY = "password";
    String HOST_KEY = "host";
    String PORT_KEY = "port";
    String DUBBO_IP_TO_BIND = "DUBBO_IP_TO_BIND";
    /** @deprecated */
    @Deprecated
    String SHUTDOWN_WAIT_SECONDS_KEY = "dubbo.service.shutdown.wait.seconds";
    String SHUTDOWN_WAIT_KEY = "dubbo.service.shutdown.wait";
    String DUBBO_PROTOCOL = "dubbo";
    String DUBBO_LABELS = "dubbo.labels";
    String DUBBO_ENV_KEYS = "dubbo.env.keys";
    String CONFIG_CONFIGFILE_KEY = "config-file";
    String CONFIG_ENABLE_KEY = "highest-priority";
    String CONFIG_NAMESPACE_KEY = "namespace";
    String CHECK_KEY = "check";
}

创建RegistryConstants类并将代码复制进来: 

package io.github.ningyu.jmeter.plugin.util;

/**
 * @Author: Andy.jia
 * @Date: 2019-12-04 10:51
 */
public interface RegistryConstants {

    String REGISTRY_KEY = "registry";
    String REGISTRY_PROTOCOL = "registry";
    String DYNAMIC_KEY = "dynamic";
    String CATEGORY_KEY = "category";
    String PROVIDERS_CATEGORY = "providers";
    String CONSUMERS_CATEGORY = "consumers";
    String ROUTERS_CATEGORY = "routers";
    String DYNAMIC_ROUTERS_CATEGORY = "dynamicrouters";
    String DEFAULT_CATEGORY = "providers";
    String CONFIGURATORS_CATEGORY = "configurators";
    String DYNAMIC_CONFIGURATORS_CATEGORY = "dynamicconfigurators";
    String APP_DYNAMIC_CONFIGURATORS_CATEGORY = "appdynamicconfigurators";
    String ROUTERS_SUFFIX = ".routers";
    String EMPTY_PROTOCOL = "empty";
    String ROUTE_PROTOCOL = "route";
    String OVERRIDE_PROTOCOL = "override";
    String COMPATIBLE_CONFIG_KEY = "compatible_config";
}

3、以下代码是源码中使用了Dubbo 2.7.3支持配置中心外部化配置功能,但Dubbox2.8.4无法支持,根据使用场景评估影响面较小可直接将其屏蔽:

4、该插件支持通过zk地址获取服务列表的能力:

所以这里需要修改获取服务列表的功能,在io.github.ningyu.jmeter.plugin.dubbo.sample.ProviderService 下修改 资源配置类路径为:com.alibaba.dubbo.registry.RegistryService

5、打包,将新生成的jmeter-plugins-dubbo-2.7.4-jar-with-dependencies.jar 放置在jmeter/lib/ext下,启动jmeter最终效果如下: 

兼容后插件下载地址 :https://download.youkuaiyun.com/download/u012090878/11144502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值