Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
dubbo接口实例见我上一篇博客,被测试接口Service 实现如下。
public class UserServiceImpl implements UserService {
@Override
public String login(String name) {
return name+"login";
}
@Override
public String register(String name) {
return name+"register";
}
}
插件下载地址:jmeter-plugins-dubbo-1.3.6 14.25.57.jar jmeter-plugins-dubbo-1.3.6-jar-with-dependencies 14.26.12.jar
把下载下来的两个插件放在jmeter的${JMETER_HOME}\lib\ext路径下,重启即可。
重启后在jmeter的Sampler的目录下就可以查看到插件,添加Dubbo Sampler元件。
配置Dubbo Sampler元件信息
Protocol:注册协议,包括zookeeper、multicast、Redis、simple;
Address:注册地址,dubbo服务的IP+Port:
①、当使用zk,address填入zk地址,集群地址使用","分隔;
②、使用dubbo直连,address填写直连地址和服务端口;
Protocol:使用的dubbo协议,包括dubbo、rmi、hessian、webservice、memcached、redis,根据自己的协议类型选择对应的选项即可;
Timeout:请求超时时间,单位ms,根据dubbo具体配置填写;
Version:版本,dubbo不同版本之间差异较大,不同版本之间不能互相调用,这里指定dubbo版本,是为了方便识别和说明;
Retries:异常重试次数(类似这种分布式服务通信框架,大多都有重试机制,是为了保证事务成功率);
Cluster:集群类型,包括failover、failfast、failsafe、failback、failking;
Group:组类型,如果有的话,根据配置填写即可;
Connections:连接数,同上,根据配置填写;
Async:服务处理类型,包括sync(同步)、async(异步),根据配置填写;
Loadbalance:负载均衡策略,包括random(随机)、roundrobin(轮询)、leastactive(最少活跃数)、consistenthash(一致性哈希);
Interface:接口名(因为dubbo服务大多是开发根据规范自行命名的,因此这里需要填写完整的接口名+包名);
Method:当前接口下的方法名,按照开发提供的API文档填写即可;
Args:接口报文,根据API文档填写,如上图所示,添加输入行,输入对应的参数类型和值即可(参数类型和值如何定义填写,请参考上面的链接);
①、paramType:参数支持任何类型,包装类直接使用java.lang下的包装类,小类型使用:int、float、shot、double、long、byte、boolean、char,自定义类使用类完全名称;
②、paramValue:基础包装类和基础小类型直接使用值,例如:int为1,boolean为true等,自定义类与List或者Map等使用json格式数据;
添加监听器查看结果树,可以看到接口成功返回
新建SpringBoot工程,修改pom.xml文件,注意
4.0.0
com.lyf
dubbo-api
0.0.1-SNAPSHOT
dubbo-provider
dubbo-provider
Demo project for Spring Boot
1.8
com.lyf
dubbo-api
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-maven-plugin
在src/main/resources下新建dubboConsumer.xml文件,配置服务信息。
新建main方法,调用被测接口
package com.example.demo;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lyf.api.service.UserService;
public class DubboConsumerApplication {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "dubboConsumer.xml" });
context.start();
UserService userService = (UserService) context.getBean(UserService.class); //
String resp = userService.login("i am consumer");
System.out.println(resp); //
}
}
可以看到接口有正确返回