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


    文章目录


    tips

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

    hosts文件内添加行

        127.0.0.1   ${hostname}
        ::1   		${hostname}
    
    • 1
    • 2

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

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

    在这里插入图片描述
    在这里插入图片描述

    2: 两种本地测试dubbo思路

    # 第一种 服务端只消费不注册, 消费端指定消费本地服务  
        优点: 使用简单且无侵入;
    
    # 第二种 服务端将服务注册到本地, 如需远程服务支持需指定远端服务地址, 然后使用jmeter调用 
        优点: 单项目即可测试;
        缺点: 有代码侵入; 依赖本地zk; 配置及构建参数繁琐;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    第一种(推荐使用)

    以 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.完成以上步骤即可启动项目,进行本地测试
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    用 -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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    第二种 (太繁琐而且有代码侵入, 不建议使用)

    本地启动zk服务, 并将服务注册到本地zk。

    安装zk服务( 本地安装 )

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

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

    Mac安装

    在这里插入图片描述

    # 直接解压即可
    # 常用命令
    ./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  	//启动客户端时指定服务地址及超时时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    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 )
    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    本地启动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 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    使用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 安装(解压后)

    在这里插入图片描述

    step2 安装插件

    在这里插入图片描述

    step3 启动jmeter

    在这里插入图片描述

    step4 添加配置调用本地接口

    3.1 在这里插入图片描述

    3.2 在这里插入图片描述

    3.3 在这里插入图片描述

    3.4 在这里插入图片描述

    3.5 在这里插入图片描述

    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])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    好用的办公软件有哪些
    vmware安装centos7并制作多副本
    es6_Promise
    【Spring】SpringBoot配置文件
    【解惑】时间规划,Linq的Aggregate函数在计算会议重叠时间中的应用
    全志R128应用开发案例——点亮一颗 LED 灯
    MyBatis--获取参数值
    linux优点和缺点有哪些?
    rails 常量自动加载和重新加载机制
    深度剖析商业智能BI中的多维分析
  • 原文地址:https://blog.csdn.net/nana1253431195/article/details/126601091