hosts文件内添加行
127.0.0.1 ${hostname}
::1 ${hostname}
可以一定程度上提升一些速度(自身感觉还是相对明显的, 原来需要大概2分钟靠上,现在基本在40秒左右)
正常时间应该会下面截图的时间长(下图时间为 只消费不注册 的情况下)
# 第一种 服务端只消费不注册, 消费端指定消费本地服务
优点: 使用简单且无侵入;
# 第二种 服务端将服务注册到本地, 如需远程服务支持需指定远端服务地址, 然后使用jmeter调用
优点: 单项目即可测试;
缺点: 有代码侵入; 依赖本地zk; 配置及构建参数繁琐;
以 PC 端接口调 project中 IntegralService为例 ( integralService 内会调用其他三方的dubbo服务 )
即: webapp:student:pc => project:service:IntegralService => otherDubboService
# step1: project 项目中的改动
1.添加测试依赖 testCompile 'com.kooup:koo-k12-test:1.0.0'
2.测试包下启动项目(直接debug main 方法即可)
public class DubboTestStart {
public static void main(String[] args) throws Exception{
System.setProperty("java.net.preferIPv4Stack", "true");
//配置文件可按需调整
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[]{"classpath*:app_config/koo-k12-service-app.xml",
"classpath*:dubbo_config/common.xml",
"classpath*:dubbo_config/koo-k12-service-dubbo.xml",
"classpath*:app_config/integral-rocketmq-app.xml",
"classpath*:app_config/im-mq-app.xml"});
context.start();
System.out.println(" >>>> Provider started.");
System.in.read();
}
}
# step2: pc (或者其他webapp项目)
1.添加本地配置(在当前用户目录下添加文件, 也可手动指定文件目录,jetty启动无效后续再确认问题)
#/Users/yakuiguo/dubbo-resolve.properties (端口号可查看dubbo.properties:dubbo.protocol.port=20059)
com.kooup.k12.integral.service.IntegralService=dubbo://localhost:20059
# step3: 启动
1.完成以上步骤即可启动项目,进行本地测试
用 -Ddubbo.resolve.file 指定映射文件路径,此配置优先级高于dubbo:reference中的配置
1.0.15及以上版本支持2.0以上版本自动加载${user.home}/dubbo-resolve.properties文件,不需要配置
/**
* com.kooup:koo-k12-test:1.0.0 jar包内所做事情
*/
@Slf4j
@Component
public class DubboTestService implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof RegistryConfig) {
RegistryConfig registryConfig = (RegistryConfig) bean;
String address = registryConfig.getAddress();
if (StringUtils.isNotBlank(address) && (address.contains("127.0.0.1") || address.contains("localhost"))) {
// 如果是注册到本地zk 则不处理
log.warn(" >>>>> dubbo服务将被注册到 address: {}", address);
}else {
registryConfig.setRegister(false);
log.warn(" >>>>> 设置registryConfig.register=false, 服务启动将不会注册服务到远程zk, address: {}", address);
}
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
本地启动zk服务, 并将服务注册到本地zk。
官网: https://zookeeper.apache.org/
Apache mirrors: https://www.apache.org/dyn/closer.cgi/zookeeper/
# 直接解压即可
# 常用命令
./bin/zkServer.sh start //启动服务
./bin/zkServer.sh status //查看状态
./bin/zkServer.sh stop //停止服务
./bin/zkCli.sh //启动客户端
./bin/zkCli.sh -timeout 50000 -server 127.0.0.1:2181 //启动客户端时指定服务地址及超时时间
https://www.cnblogs.com/xiohao/p/9717364.html
https://www.jianshu.com/p/f1a777109e66
https://blog.csdn.net/qq_41723615/article/details/92799469
可用加速地址 http://f1361db2.m.daocloud.io(也可自行注册 https://account.daocloud.io/signup )
# 基础命令
docker search zookeeper //搜索zookeeper相关的镜像
docker pull zookeeper //根据镜像名称获取镜像到本地
docker images //查看本地镜像
docker ps //查看本地已启动实例 参数: -a (查看本地所有实例)
# 创建并启动一个zookeeper实例 (映射到本地2181端口)
docker run -d -p 2181:2181 --name zk --privileged zookeeper
# 启动关闭已有实例
docker start zk //启动 zk为实例名称, 也可以使用容器id
docker stop zk //关闭
docker logs -f zks //滚动查看日志 (-t 时间戳, --since 30m 30分钟内的日志)
# 进入到实例内部
docker exec -it zk /bin/bash
# 项目配置
# 注册服务到本地zk
#file: service/src/main/resources/dubbo_config/koo-k12-service-dubbo.xml
1.
# 配置依赖服务
1.添加本地配置(在当前用户目录下添加文件, 也可手动指定文件目录,jetty启动无效后续再确认问题)
#/Users/yakuiguo/dubbo-resolve.properties (ip+端口 查看: https://dubbomonitor.trunk.koolearn.com/#/serviceDetail?service=com.kooup.k12.integral.service.IntegralService&app=kooup-dubbo-service)
com.koolearn.credit.engine.service.ICreditActionService=dubbo://10.155.10.163:20059
jmeter
官网: https://jmeter.apache.org/
下载: https://jmeter.apache.org/download_jmeter.cgi
插件
Git地址: https://github.com/thubbo/jmeter-plugins-for-apache-dubbo
现成jar: http://note.youdao.com/noteshareid=940a4e215f7721b1e8291ea8492d4dc0
3.4
# telnet host port
telnet 127.0.0.1 20063
# invoke 基础参数
invoke com.kooup.***.IK12PreviewTaskBizService.test(13568, "447904", false)
# 包含对象 {"class": "当前对象的全限定名", "key": "value" ... }
invoke com.kooup.***.IK12PreviewTaskBizService.test({"userName": "测试用户", "class": "com.kooup.user.param.User"})
# 包含枚举 {"class": "当前枚举的全限定名", "name": "value"} 其中name为固定key, value为枚举的标识
invoke com.kooup.***.IK12PreviewTaskBizService.test({"name": "OPEN_SUCCESS", "class": "com.kooup.enums.TestEnum"})
# 包含list使用数组即可 [1, 2] (元素类型对应参数类型即可)
invoke com.kooup.***.IK12PreviewTaskBizService.test([1, 2])