Тайм-аут соединения при установке цепного кода с использованием fabric-sdk-go
У меня проблема в том, что при установке цепного кода с использованием fabric-sdk-go всегда есть тайм-аут grpcs. Запрос GRCPS выполняется с локального компьютера в его док-контейнеры.
ErrorMsg:
Сбой lscc.getinstalledchaincodes: Сбой SendProposal: Обработка транзакции для индоссанта [localhost:7051]: Код статуса клиента индоссанта: (2) CONNECTION_FAILED. Описание: истекло время ожидания соединения [localhost: 7051]
ENV:
Mac OS X
версия докера: 18.03.1-ce
docker-compose версия 1.21.1, сборка 5a3f1a3
ткань-SDK-го: мастер
Локальная сеть фабрики основана на официальном примере фабрики.
docker-compose.yaml: Гист
локальная сеть-config.yaml: Gist
приложение клиента go: Gist
Что-то не так с моим network-config.yaml???
Что я пробовал:
Попытался отключить CORE_PEER_TLS_CLIENTAUTHREQUIRED в docker-compose.yaml, не удалось..
Отредактированный файл /etc/hosts со строкой 127.0.0.1 peer1-xiaoyudian..., не удалось..
Не удалось увеличить параметры peer.timeout.connections и других таймаутов в network-config.yaml.
Увеличил grpcOptions.keep-alive-time в network-config.yaml, не удалось.
Поменял хост peers.xxxx.url с локального на домен в network-config.yaml, не удалось...
Добавлен entityMathcers в network-config.yaml, не удалось...
Не удалось....
Ответ: кто-то из rocket.chat сказал мне:
- выполнить: экспорт GRPC_GO_LOG_SEVERITY_LEVEL= ошибка
- выполнить: экспортировать GRPC_GO_LOG_VERBOSITY_LEVEL=2
- в коде клиента добавьте эту строку: grpclog.SetLogger(logger)
И журнал говорит, что это проблема сертификата для рукопожатия со сверстниками.
2 ответа
Обратитесь к https://github.com/hyperledger/fabric-sdk-go/tree/master/test/fixtures/config/overrides чтобы узнать, как URL-адреса переопределяются для использования localhost. В вашем случае вы должны использовать local_entity_matchers.yaml
& local_orderers_peers_ca.yaml
объединены в предоставленных образцах.
Еще одна вещь, которую я заметил в вашем network-config.yaml
сопоставленное имя хоста совпадает с фактическим именем узла. Entity Matcher не пинает здесь. Обратитесь к сопоставителям сущностей, использованным в приведенном выше примере.
Вы можете попробовать изменить localhost на домен в сети. Пример: с peer: localhost -> peer1-xiaoyudian... с orderer: localhost -> orderer1-themis... то же самое с ca, и использовать сопоставление сущностей для сопоставления имени peer, orderer, ca с вашим ip-адресом.