Ошибка обнаружения сервиса Hyperledger Fabric 1.2

Я использую Hyperledger Fabric 1.2 для создания кластера блокчейнов, который содержит 3 пира и 3 заказчика. Я могу успешно развернуть и вызвать цепной код через CLI и Java SDK. Все отлично работает Однако, когда я заметил функцию обнаружения службы и попытался ее использовать, я столкнулся с двумя проблемами. Во-первых, после того, как я собрал инструмент обнаружения и попытался использовать его для получения некоторой обнаруженной информации, я не могу получить доступ к узлу и получить сообщение следующим образом

"не удалось подключиться к службе обнаружения: не удалось создать новое подключение: превышен крайний срок контекста"

Команда config

Откройте для себя --configFile conf.yaml --userKey ./crypto-config/peerOrganizations/org1.forchain.com/peers/peer0.org1.forchain.com/msp/keystore/7458b29b1fb6a89768585430dbf0e522a40ff4aeconerfefeffecp_p0p0p0p0p0p0cp0 org1.forchain.com/peers/peer0.org1.forchain.com/msp/signcerts/peer0.org1.forchain.com-cert.pem --MSP Org1MSP saveConfig

Команда запроса

Откройте для себя --configFile conf.yaml peers --channel lajiao --server localhost:6051

Я думаю, это может быть вызвано конфигурацией TLS, поэтому я отменил TLS и попытался снова. На этот раз я успешно получил доступ к узлу и получил несколько сообщений, но столкнулся с другой проблемой. Когда я использую команду "Discover peers xxx", я всегда получаю null результат, на самом деле есть два партнера в этом канале. Когда я использую 'discover endorsers xxx' команда, я всегда получаю следующее сообщение об ошибке

'не удалось создать дескриптор для цепных кодов:'

Тем временем одноранговый журнал выводит следующее сообщение:

'Ошибка вычисления основного набора: цепной код не установлен в достаточном количестве организаций, требуемых политикой одобрения 2018-08-01 10:21:50.860 UTC [обнаружение] chaincodeQuery -> ERRO 1441 Не удалось создать дескриптор для цепных кодов цепочек::: chaincode isn' установлен на достаточное количество организаций, требуемых политикой одобрения

Я могу заверить, что цепной код успешно установлен во всех пирах. И я не использовал политику одобрения, когда создавал цепной код. Я думаю, что это не проблема политики, потому что я все еще могу вызвать цепной код и предложить транзакцию. Я также попытался использовать Java SDK и обнаружил, что могу получить информацию об узлах-заказчиках, но не могу получить информацию о других одноранговых узлах или информацию о коде цепи. В журнале всегда выводится: "Обнаружение имен цепных кодов было пустым". Но цепной код определенно создается и может быть вызван через SDK. Я ссылался на тестовый код в "org.hyperledger.fabric.sdkintegration.ServiceDiscoveryIT", и некоторые ключевые Java-коды выглядят следующим образом:

channel.addPeer(peer, createPeerOptions().setPeerRoles(EnumSet.of(Peer.PeerRole.SERVICE_DISCOVERY,Peer.PeerRole.LEDGER_QUERY, Peer.PeerRole.EVENT_SOURCE,Peer.PeerRole.CHAINCODE_QUERY)));
channel.initialize();
System.out.println("================ orderer ===============");
for (Orderer orderer : channel.getOrderers()) {
    System.out.println(orderer.getName());
}
System.out.println("================ peer ===============");
for (Peer p: channel.getPeers()) {
    System.out.println(p.getName());
}
System.out.println("================ chaincode ===============");
for (String s: channel.getDiscoveredChaincodeNames()) {
    System.out.println(s);
}

Итак, как я могу использовать команду "Discover" в конфигурации TLS и как я могу получить обнаруженную информацию?

1 ответ

Вы должны добавить одноранговый одноранговый узел от каждой организации в канале, это решило проблему для меня. Для обнаружения службы требуются одноранговые одноранговые узлы, поскольку при обнаружении службы используется протокол сплетен - спасибо @yacovm

Для команды config - вам нужно передать корневой CA TLS через --peerTLSCA. Пожалуйста, посмотрите на примеры в документации и действуйте соответственно.

Теперь - для второй проблемы, я думаю, что коллеги могут не знать друг друга в канале.

  1. Убедитесь, что в канале определены привязанные одноранговые узлы и что для обоих одноранговых узлов настроены внешние конечные точки.
  2. Не стесняйтесь задавать мне (yacovm) на chat.hyperledger.org, если вы боретесь слишком долго и не можете решить проблему.

Я наткнулся на аналогичную ошибку (в отношении обнаружения службы), как показано ниже.

Журналы Go Fabric Client:

Failed to get endorsing peers: error getting channel response for channel [myc]:
Discovery status Code: (11) UNKNOWN. Description: error received from Discovery Server: 
failed constructing descriptor for chaincodes:<name:"mycc"> 

Одноранговые журналы:

Failed constructing descriptor for chaincode chaincodes:<name:"mycc" > ,: 
cannot satisfy any principal combination

Это исправлено, когда я предоставляю CORE_PEER_GOSSIP_EXTERNALENDPOINT Атрибут окружения с правильным значением в конфигурации однорангового узла (в моем случае в файле Docker yaml).

Как я понял, поскольку этот атрибут отсутствует, службы обнаружения, работающие на одноранговых узлах, не смогли связаться друг с другом, чтобы получить заключение о том, как выглядит текущая сеть.

Другие вопросы по тегам