Тайм-аут соединения при установке цепного кода с использованием 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???

Что я пробовал:

  1. Попытался отключить CORE_PEER_TLS_CLIENTAUTHREQUIRED в docker-compose.yaml, не удалось..

  2. Отредактированный файл /etc/hosts со строкой 127.0.0.1 peer1-xiaoyudian..., не удалось..

  3. Не удалось увеличить параметры peer.timeout.connections и других таймаутов в network-config.yaml.

  4. Увеличил grpcOptions.keep-alive-time в network-config.yaml, не удалось.

  5. Поменял хост peers.xxxx.url с локального на домен в network-config.yaml, не удалось...

  6. Добавлен entityMathcers в network-config.yaml, не удалось...

  7. Не удалось....

Ответ: кто-то из rocket.chat сказал мне:

  1. выполнить: экспорт GRPC_GO_LOG_SEVERITY_LEVEL= ошибка
  2. выполнить: экспортировать GRPC_GO_LOG_VERBOSITY_LEVEL=2
  3. в коде клиента добавьте эту строку: 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-адресом.

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