Skip to content

Fabric Go SDK DeliverResponse_Status 404错误解决

问题描述

在使用Fabric Go SDK安装链码之后,通过LifecycleApproveCC批准链码时,终端会快速输出错误如下

bash
 [fabsdk/fab] 2022/02/08 13:16:18 UTC - dispatcher.(*Dispatcher).handleDeliverResponseStatus -> WARN Got deliver response status event: &peer.DeliverResponse_Status{Status:404}. Disconnecting...
 [fabsdk/fab] 2022/02/08 13:16:18 UTC - client.(*Client).monitorConnection -> WARN Event client has disconnected. Details: got error status from deliver server: NOT_FOUND
 [fabsdk/fab] 2022/02/08 13:16:18 UTC - client.(*Client).monitorConnection -> WARN Attempting to reconnect...
 [fabsdk/fab] 2022/02/08 13:16:18 UTC - client.(*Client).reconnect -> INFO Event client has reconnected

环境描述

fabric network通过docker compose部署,使用桥接网络与主机网络隔离,节点容器均监听自身7051和7053端口,每个容器将此两个端口映射至主机的独立未使用端口。

fabric sdk app运行在主机网络中,需要修改各节点endpoint至127.0.0.1。

通过LifecycleApproveCC批准链码时,便会导致错误。

问题解决

fabric sdk app位于主机网络,无法通过7051端口访问节点,需重定向至其7051映射的主机端口。

在fabric sdk app的config.yaml配置文件中,需要指定entityMatchers中urlSubstitutionExp的端口。

例:

yaml
    - pattern: (\w+).org2.flxdu.cn:(\d+)
      urlSubstitutionExp: ${1}.org2.flxdu.cn:${2}
      sslTargetOverrideUrlSubstitutionExp: ${1}.org2.flxdu.cn
      mappedHost: peer0.org2.flxdu.cn

将第二行${2}修改为指定端口:

yaml
    - pattern: (\w+).org2.flxdu.cn:(\d+)
      urlSubstitutionExp: ${1}.org2.flxdu.cn:7091
      sslTargetOverrideUrlSubstitutionExp: ${1}.org2.flxdu.cn
      mappedHost: peer0.org2.flxdu.cn

修改完成后再批准链码即可。

总结

花了8个小时解决此BUG,其中玩了一小会儿游戏,上了不少分hhhhh

screenshot