Bluemix Blockchain service error with Fabric Compo

2019-09-15 05:53发布

问题:

Using fabric composer v0.7.0 I have deployed a business network to a Blockchain service on Bluemix (v0.6).

After the app runs for a while I get the following error:

throw er; // Unhandled 'error' event
^

Error
at ClientDuplexStream._emitStatusIfDone (/home/vcap/app/node_modules/grpc/src/node/src/client.js:189:19)
at ClientDuplexStream._receiveStatus (/home/vcap/app/node_modules/grpc/src/node/src/client.js:169:8)

This sometimes happens when executing the composer network deploy command as well.

回答1:

This problem occurs because of the way the event hub works in Hyperledger Fabric v0.6. The Node.js client for Fabric hfc maintains a persistent connection to the event hub but does not cope well with network blips/disconnects etc (it just kills the client). Persistent connections aren't really cloud friendly as the network/routing will just terminate idle connections after a while. https://stackoverflow.com/users/7512977/simon-stone

Ways to deal with this:

  1. You could (probably should) have multiple instances of your application running so when one crashes another is still running to take over.
  2. Calling BusinessNetworkConnection.connect() before every chaincode invoke to recreate the event hub connection. Please note that this is not very efficient, as making the connection takes a while

If the error occurs when deploying with the composer-cli you may want to try executing the command again after a minute or so.

Calling BusinessNetworkConnection.ping() during a set interval will not help with the issue because the problem is caused by the event hub, and events are only published on actual transactions. ping() is a read-only chaincode query that does not create a transaction.