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文件过大
扫描二维码关注公众号,回复:
11798607 查看本文章