Hyperledger Fabric自定义链码实例化:如何解决“超出上下文期限”

时间:2019-04-11 03:13:22

标签: docker-compose hyperledger-fabric hyperledger

我正在使用here中Hyperledger Fabric框架的“第一个网络”示例,但是我无法成功实例化自定义Java链码文件。这是我正在运行的命令,它是成功启动脚本运行的命令的稍作修改的版本:

peer chaincode instantiate -o orderer.example.com:7050 --tls false --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n javacc -l java -v 1.4 -c '{"Args":["init","a","{10}","b","{20}"]}' --connTimeout 600s -P 'AND ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

运行此命令时,出现以下错误:

Error: error getting broadcast client: orderer client failed to connect to orderer.example.com:7050: failed to create new connection: context deadline exceeded

经过一段时间的Google搜索后,该错误似乎非常简单:由于某种原因,我正在使用的客户端容器无法连接到我的订购者容器。但是,由于以下原因,这对我来说没有意义:

首先:我能够成功运行./byfn.sh up -v -c mychannel -s couchdb,它最初使用以下命令从客户端容器中安装并实例化了一些golang链代码(-v 1.0之后进行了升级通过byfn.sh脚本升级到1.4版):

peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/
peer chaincode instantiate -o orderer.example.com:7050 --tls false --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -l golang -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P 'AND ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

第二:我能够从同一客户端容器内成功安装(尽管没有实例化)我的自定义Java链代码:peer chaincode install -n javacc -v 1.4 -l java -p /chaincode-application/chaincode-application是我的位置Java chaincode源代码)

到目前为止,我已经研究了几种可能的方法。上面提到的网站确实有关于时间长度的注释:“请注意,Java链代码实例化可能会花费一些时间,因为它会在Java环境中编译链代码并下载docker容器。” 因此,我使用了{ {1}}(600秒= 10分钟)作为我的命令的一部分,但是在等待指定的时间后仍然出现错误。此外,在我的本地IntelliJ中花费大约3秒的时间,对等容器内部真的需要那么长时间吗?

我还尝试从客户端容器--connTimeout 600s内击中订购者节点,但失败,并显示以下消息:root@7bbadf11e755:/opt/gopath/src/github.com/hyperledger/fabric/peer# curl orderer.example.com:7050。这似乎表明我的客户容器可以连接到订购者容器,但是订购者容器不知道如何处理空的请求路径。据我所知,这可能意味着该问题不在我的Docker Compose设置中。我在Docker Compose文件中唯一更改的就是关闭TLS。

最后,我还遵循了示例Maven项目设置程序,该示例程序用于位于客户端内部的自定义Java链码文件。我有一个pom.xml文件,该文件指定了我的主类名称,并且在'src'目录中包含了一些Java源文件,其中包括一个Java类,该类curl: (56) Recv failure: Connection reset by peer是Hyperledger中指定的正确implements接口Fabric的文档。当我在容器外部使用Maven运行构建时,这些文件的构建就很好。

有趣的是,我仅在一个对等节点上看到以下消息:

Chaincode

另一个对等节点从今天开始没有任何条目,订购者节点也没有,我觉得很好。

我已经尝试使用Google搜索来查找错误。我确实发现了this问题,这似乎完全是我的问题,但是只有一个答案不能解决问题,因此我无法发表评论或投票。我还发现了this,但是由于我在本地运行所有Hyperledger Fabric节点,因此无法收集到有关我自己的问题的任何见解。我没有解决此问题的想法。有谁知道为什么我仍然收到“超出上下文截止日期”消息?

1 个答案:

答案 0 :(得分:0)

我在网络中重新启用了TLS,该错误消失了(发生了另一个错误,但这不在我的问题范围内:))。似乎我没有像我想的那样禁用所有TLS设置。

感谢@Gari Singh将我带入正确的轨道!