Узел фабрики SDK использует функцию обнаружения службы - PullRequest
0 голосов
/ 12 декабря 2018

Я пытался использовать фабричный узел sdk для вызова функции обнаружения служб Fabric v1.2, но я получил следующие ошибки:

2018-12-12 11:51:26.413 UTC [endorser] callChaincode -> INFO 05d [mychannel][16a59ced] Entry chaincode: name:"mycc" 
2018-12-12 11:51:30.138 UTC [chaincode] ProcessStream -> ERRO 05e handling chaincode support stream: rpc error: code = Canceled desc = context canceled
receive failed
github.com/hyperledger/fabric/core/chaincode.(*Handler).ProcessStream
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/handler.go:408
github.com/hyperledger/fabric/core/chaincode.(*ChaincodeSupport).HandleChaincodeStream
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/chaincode_support.go:182
github.com/hyperledger/fabric/core/chaincode.(*ChaincodeSupport).Register
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/chaincode_support.go:187
github.com/hyperledger/fabric/core/chaincode/accesscontrol.(*interceptor).Register
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/accesscontrol/interceptor.go:57
github.com/hyperledger/fabric/protos/peer._ChaincodeSupport_Register_Handler
    /opt/gopath/src/github.com/hyperledger/fabric/protos/peer/chaincode_shim.pb.go:1066
github.com/hyperledger/fabric/vendor/google.golang.org/grpc.(*Server).processStreamingRPC
    /opt/gopath/src/github.com/hyperledger/fabric/vendor/google.golang.org/grpc/server.go:1160
github.com/hyperledger/fabric/vendor/google.golang.org/grpc.(*Server).handleStream
    /opt/gopath/src/github.com/hyperledger/fabric/vendor/google.golang.org/grpc/server.go:1253
github.com/hyperledger/fabric/vendor/google.golang.org/grpc.(*Server).serveStreams.func1.1
    /opt/gopath/src/github.com/hyperledger/fabric/vendor/google.golang.org/grpc/server.go:680
runtime.goexit
    /opt/go/src/runtime/asm_amd64.s:2361
2018-12-12 11:52:00.041 UTC [endorser] callChaincode -> INFO 05f [mychannel][16a59ced] Exit chaincode: name:"mycc"  (33628ms)

Однако я могу полностью убедиться, что уже создал экземпляр моего цепного кода, и я обычно могу вызвать его, если я не использую service discovery.

А вот мой код для обнаружения службы:

let client = await helper.getClientForOrg(orgName);
let channel = client.newChannel(channelName);
channel.addPeer(client.getPeer("peer0.org1.example.com"));
await channel.initialize({discover:true, asLocalhost:true});

let request = {
  chaincodeId: chaincodeName,
  fcn: functionName,
  args: args,
  transientMap: transient
};
logger.debug("Make query");
let response_payloads = await channel.queryByChaincode(request);

Где я ошибаюсь?И есть коды, прежде чем я использую service discovery:

let client = await helper.getClientForOrg(orgName);

let channel = client.newChannel(channelName);
// assign orderer to channel
channel.addOrderer(client.getOrderer(ordererName));
// assign peers to channel
peers.forEach(function (peerName) {
  channel.addPeer(client.getPeer(peerName));
});

let request = {
  targets: peers,
  chaincodeId: chaincodeName,
  fcn: functionName,
  args: args,
  transientMap: transient
};
logger.debug("Make query");
let response_payloads = await channel.queryByChaincode(request);

1 Ответ

0 голосов
/ 15 декабря 2018

Я просто решил это сам.Это может быть какая-то сетевая ошибка.

Теперь я изменил порт peer1.org1.example.com, peer0.org2.example.com, peer1.org2.example.com на 8051, 9051, 10051, 11051. Согласно узлу sdk officialdoc , я установил asLocalhost = true.

И вот мои коды, которые могут работать на меня:

let channel = client.newChannel(channelName);
channel.addPeer(client.getPeer("peer0.org1.example.com"));
await channel.initialize({discover: true, asLocalhost: true});

let tx_id = client.newTransactionID();
tx_id_string = tx_id.getTransactionID();
let request = {
  args: args,
  chaincodeId: chaincodeName,
  chainId: channelName,
  fcn: functionName,
  txId: tx_id,
  transientMap: transient
};
let results = await channel.sendTransactionProposal(request);

надеюсь, что это может помочь другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...