解决hyperledger fabric java node chaincode 实例化慢 容易超时问题

hyperledger fabric instantiate java chaincode 、node chaincode用时较久, 有时会超时, 如何解决这个问题呢?

java 篇

经过我的研究发现,节点之所以实例化 java chaincode比较慢,是因为java一般用gradle项目或是maven项目, 而这两种项目在实例化时需要下载相关的依赖jar,主要是这一步执行较慢,改善问题的关键就在于如何解决下载jar慢的问题,将项目依赖改成使用本地jar的方式,可以有效解决此问题

1 切换成本地jar

将jar打包到项目当中, 这样启动时就无需下载依赖文件 , 可有效实现提速 , 本人实测, 使用此方式可使实例化java chaincode提速到40s左右, 当然跟电脑配置也有关系

这里将演示gradle如何使用本地jar的方式,maven原理相同(参考原博客链接:https://www.cnblogs.com/adderhuang/p/12155834.html)将build.gralde改成如下,

plugins {
    id 'com.github.johnrengelman.shadow' version '2.0.3'
    id 'java'
}
group 'org.hyperledger.fabric-chaincode-java'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    //chaincode需要的依赖
    compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.4.1'
//    https://mvnrepository.com/artifact/com.alibaba/fastjson
    compile group: 'com.alibaba', name: 'fastjson', version: '1.2.62'
    testCompile group: 'junit', name: 'junit', version: '4.12'
    //从项目的libs目录加载依赖的jar包
//    compile fileTree(dir:'libs',includes:['*.jar'])
}
shadowJar {
    baseName = 'chaincode'
    version = null
    classifier = null

    manifest {
        attributes 'Main-Class': 'org.hyperledger.fabric.example.SimpleChaincode'
    }
}
//将依赖的jar包导入到项目的libs目录下
task copyJars(type: Copy) {
    from configurations.runtime
    into 'libs' // 目标位置
}

手动创建libs文件夹

执行

gradle build copyJars

然后将build.gradle修改为如下:

plugins {
    id 'com.github.johnrengelman.shadow' version '2.0.3'
    id 'java'
}
group 'org.hyperledger.fabric-chaincode-java'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    //chaincode需要的依赖
/*    compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.4.1'

    compile group: 'com.alibaba', name: 'fastjson', version: '1.2.62'
    testCompile group: 'junit', name: 'junit', version: '4.12'*/
//    从项目的libs目录加载依赖的jar包
    compile fileTree(dir:'libs',includes:['*.jar'])
}
shadowJar {
    baseName = 'chaincode'
    version = null
    classifier = null

    manifest {
        attributes 'Main-Class': 'org.hyperledger.fabric.example.SimpleChaincode'
    }
}
//将依赖的jar包导入到项目的libs目录下
task copyJars(type: Copy) {
    from configurations.runtime
    into 'libs' // 目标位置
}

即可

2 配置国内镜像, 如阿里镜像

配置国内maven仓库镜像也可实现加速 , 这个教程很多 , 不在演示, 可自行查找 . 

node篇

node实例化慢主要卡在了npm install这一步, 解决思路与java相当, 在node chaincode根目录下, 执行npm install命令, 提前将node_modules安装到该chaincode里面, 可以实现安装的提速, 缺点是导致chaincode文件过大

猜你喜欢

转载自blog.csdn.net/qq_27348837/article/details/108052520