HyperledgerファブリックでJavaチェーンコードとノードチェーンコードをインスタンス化すると、時間がかかり、場合によってはタイムアウトになるこの問題の解決方法
Javaの記事
調査の結果、Javaチェーンコードをインスタンス化するノードが遅い理由は、Javaが通常GradleプロジェクトまたはMavenプロジェクトを使用し、これら2つのプロジェクトがインスタンス化時に関連する依存JARをダウンロードする必要があるためであることがわかりました。主な理由は、このステップの実行が比較的遅いためです。遅い、問題を改善するための鍵は、jarのダウンロードが遅いという問題の解決方法にあります。ローカルのjarを使用するようにプロジェクトの依存関係を変更すると、この問題を効果的に解決できます。
1ローカルjarに切り替え
起動時に依存ファイルをダウンロードする必要がないように、jarをプロジェクトにパッケージ化します。これにより、効果的にスピードアップできます。私の実際の測定によると、この方法を使用すると、javaチェーンコードのインスタンス化を約40秒にスピードアップできます。もちろん、コンピューターの構成にも関係しています
ここでは、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 Aliミラーなどの国内ミラーを構成する
国内のMavenウェアハウスミラーリングの構成でも高速化を実現できます。デモではなく、多くのチュートリアルがあります。
node篇
遅いノードのインスタンス化は、主にnpmインストールステップでスタックします。解決策はjavaに似ています。ノードチェーンコードのルートディレクトリで、npm installコマンドを実行して、node_modulesをチェーンコードに事前にインストールします。これにより、インストールを高速化できます。欠点は、チェーンコードにつながることです。ファイルが大きすぎます