本地服务启动慢问题及dubbo测试方法记录

文章目录

    • @[toc]
    • tips
      • 1: 关于服务启动慢的问题
      • 2: 两种本地测试dubbo思路
    • 第一种(推荐使用)
    • 第二种 (太繁琐而且有代码侵入, 不建议使用)
      • 安装zk服务( 本地安装 )
        • Mac安装
        • Windows安装
      • 安装zk服务( 基于docker 推荐使用方式 )
        • Mac安装
        • Windows安装
        • 仓库加速
        • docker常用命令
      • 本地启动dubbo服务 (service 为例)
        • 使用jmeter调用dubbo接口
          • step1 安装(解压后)
          • step2 安装插件
          • step3 启动jmeter
          • step4 添加配置调用本地接口
      • dubbo接口invoke常用参数demo

tips

1: 关于服务启动慢的问题

hosts文件内添加行

    127.0.0.1   ${hostname}
    ::1   		${hostname}

可以一定程度上提升一些速度(自身感觉还是相对明显的, 原来需要大概2分钟靠上,现在基本在40秒左右)

正常时间应该会下面截图的时间长(下图时间为 只消费不注册 的情况下)

本地服务启动慢问题及dubbo测试方法记录_第1张图片
本地服务启动慢问题及dubbo测试方法记录_第2张图片

2: 两种本地测试dubbo思路

# 第一种 服务端只消费不注册, 消费端指定消费本地服务  
    优点: 使用简单且无侵入;

# 第二种 服务端将服务注册到本地, 如需远程服务支持需指定远端服务地址, 然后使用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。

安装zk服务( 本地安装 )

官网: https://zookeeper.apache.org/

Apache mirrors: https://www.apache.org/dyn/closer.cgi/zookeeper/

Mac安装

本地服务启动慢问题及dubbo测试方法记录_第3张图片

# 直接解压即可
# 常用命令
./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  	//启动客户端时指定服务地址及超时时间

Windows安装

https://www.cnblogs.com/xiohao/p/9717364.html

安装zk服务( 基于docker 推荐使用方式 )

Mac安装

https://www.jianshu.com/p/f1a777109e66

Windows安装

https://blog.csdn.net/qq_41723615/article/details/92799469

仓库加速

可用加速地址 http://f1361db2.m.daocloud.io(也可自行注册 https://account.daocloud.io/signup )
本地服务启动慢问题及dubbo测试方法记录_第4张图片

docker常用命令

# 基础命令
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

本地启动dubbo服务 (service 为例)

# 项目配置
    # 注册服务到本地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调用dubbo接口

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

step1 安装(解压后)

本地服务启动慢问题及dubbo测试方法记录_第5张图片

step2 安装插件

step3 启动jmeter

step4 添加配置调用本地接口

3.1 本地服务启动慢问题及dubbo测试方法记录_第6张图片

3.2 本地服务启动慢问题及dubbo测试方法记录_第7张图片

3.3 本地服务启动慢问题及dubbo测试方法记录_第8张图片

3.4

3.5 本地服务启动慢问题及dubbo测试方法记录_第9张图片

dubbo接口invoke常用参数demo

# 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])

你可能感兴趣的:(java,dubbo,运维,java,学习)