今天汇总一下。大家有什么别的问题和想法请随时回复。负载测试(压测)Dubbo 服务(dubbo provider), 就需要我们自己实现或者使用已有的dubbo consumer(plugin)来完成 模拟多个 dubbo consumer进行测试的过程。 

前2天,我们介绍了如何简单的用dubbo api 来完成写一个dubbo consumer, 并倒入到jmeter中,用JSR 223 sampler来实现 dubbo consumer。 

所以就拆解成2步。 

  1.   实现dubbo consumer。

    1. dubbo java api configuration (直接使用java api 来实现consumer)

    2. xml configuration

    3. Properties Configuration 

    4. Annotation Configuration 

    5. 不自己开发,完全使用别人写好的Jmeter plugin (建议初学者下载插件并尝试, 这个是初学者可以直接上手 )

      1. https://github.com/thubbo/jmeter-plugins-for-apache-dubbo 

  2. 利用Jmeter模拟并发的dubbo consumer。 

    1. JSR 223 sampler

    2. Java sampler

    3. 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"}