今天汇总一下。大家有什么别的问题和想法请随时回复。负载测试(压测)Dubbo 服务(dubbo provider), 就需要我们自己实现或者使用已有的dubbo consumer(plugin)来完成 模拟多个 dubbo consumer进行测试的过程。
前2天,我们介绍了如何简单的用dubbo api 来完成写一个dubbo consumer, 并倒入到jmeter中,用JSR 223 sampler来实现 dubbo consumer。
所以就拆解成2步。
-
实现dubbo consumer。
-
dubbo java api configuration (直接使用java api 来实现consumer)
-
xml configuration
-
Properties Configuration
-
Annotation Configuration
-
不自己开发,完全使用别人写好的Jmeter plugin (建议初学者下载插件并尝试, 这个是初学者可以直接上手 )
-
https://github.com/thubbo/jmeter-plugins-for-apache-dubbo
-
利用Jmeter模拟并发的dubbo consumer。
-
JSR 223 sampler
-
Java sampler
-
Jmeter dubbo plugin (不需要使用额外的操作,直接使用插件即可)
下面我们再来简单的看一下这个Jmeter dubbo plugin的插件是否好用。
1. 源码:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo
2. 下载地址,目前最新的版本。
https://gitee.com/ningyu/dist-jmeter-plugins-for-apache-dubbo/raw/master/2.7.8/jmeter-plugins-dubbo-2.7.8-jar-with-dependencies.jar
下载Jar包后,放入Jmeter中的 lib/ext 中,重新启动Jmeter。
启动我们的后端服务(用Java api重写),见源代码。
package com.hissummer.dubbotest;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ConfigCenterConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
public class DubboService {
public static void main(String[] args) {
// 服务实现
HelloServiceImpl helloservice = new HelloServiceImpl();
// 当前应用配置
ApplicationConfig application = new ApplicationConfig();
application.setName("dubbo-provider");
// 连接注册中心配置
RegistryConfig registry = new RegistryConfig();
registry.setAddress("zookeeper://127.0.0.1:2181");
//registry.setCheck(false);
//registry.setSimplified(true);
// ConfigCenterConfig configCenter = new ConfigCenterConfig();
// configCenter.setAddress("zookeeper://127.0.0.1:2181");
// configCenter.setCheck(false);
//registry.setRegister(false);
// registry.setUsername("aaa");
// registry.setPassword("bbb");
// 服务提供者协议配置
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName("dubbo");
protocol.setPort(12345);
// 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口
// 服务提供者暴露服务配置
ServiceConfig<HelloService> service = new ServiceConfig<HelloService>(); // 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏
service.setApplication(application);
//service.setConfigCenter(configCenter);
service.setRegistry(registry); // 多个注册中心可以用setRegistries()
service.setProtocol(protocol); // 多个协议可以用setProtocols()
service.setInterface(HelloService.class);
service.setRef(helloservice);
service.setVersion("1.0.0");
// 暴露及注册服务
service.export();
while(true)
{
try {
Thread.sleep(60000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
添加一个dubbo sample 后,填写对应的参数。
执行脚本,查看结果树。结果树中的请求内容如下。
Registry Protocol: zookeeper
Address: 127.0.0.1:2181
RPC Protocol: dubbo://
Timeout:
Version: 1.0.0
Retries: 0
Cluster: failfast
Group:
Connections: 100
LoadBalance: random
Async: sync
Interface: com.hissummer.dubbotest.HelloService
Method: hello
Method Args: [{
"paramType": "String",
"paramValue": "www.hissummer.com"
}]Attachment Args: []
响应数据返回的是一个Hello class object, 这个dubbo sampler插件序列化后展示如下:
{ "id": 0, "message": "www.hissummer.com", "class": "com.hissummer.dubbotest.Hello"}