#hyperledger-fabric #hyperledger-fabric-sdk-go
Вопрос:
Я создаю клиентский сервер для подключения к сети Hyperledger Fabric с помощью fabric-go-sdk
. Чтобы использовать пользовательскую систему ведения журнала, я получаю FabricSDK
объект с помощью fabsdk.New()
, а затем внедряю его в Gateway
объект с помощью gateway.WithSDK
функции. Проверьте код ниже:
ccpPath := getPath("connection-profile.json", staticPath)
sdk, err := fabsdk.New(config.FromFile(ccpPath),
fabsdk.WithLoggerPkg(amp;FabSDKLoggerProvider{}), // using my custom logging system
)
if err != nil {
return nil, errors.Wrap(err, "failed to create a new fabsdk")
}
gw, err := gateway.Connect(
gateway.WithSDK(sdk),
gateway.WithIdentity(wallet, "admin"),
)
if err != nil {
return nil, errors.Wrap(err, "failed to connect the network via a fabric gateway")
}
Когда я запускаю тест, я получаю сообщение об ошибке:
Failed to submit: error registering for TxStatus event: could not create client conn: could not connect to peer0.test.bpl:7051: dialing connection on target [peer0.test.bpl:7051]: connection is in TRANSIENT_FAILURE
Тест, который я провел, — это тест на отправку транзакции с использованием Gateway
объекта и его Submit
метода.
Когда я определил Gateway
объект без FabricSDK
, он работает нормально. То есть, если я использую приведенный ниже код, тест проходит хорошо. Однако в этом случае я не могу использовать свою пользовательскую систему ведения журнала. (Я просто хочу отключить систему ведения журнала Fabric SDK.)
ccpPath := getPath("connection-profile.json", staticPath)
gw, err := gateway.Connect(
gateway.WithConfig(config.FromFile(ccpPath)),
gateway.WithIdentity(wallet, "admin"),
)
if err != nil {
return nil, errors.Wrap(err, "failed to connect the network via a fabric gateway")
}
Согласно моему исследованию, разница между FabricSDK
объектами, инициализированными fabsdk.New()
и gateway.Connect(gateway.WithConfig())
, заключается в том, что у FabricSDK
объекта, который создается, gateway.Connect(gateway.WithConfig())
есть опция fabsdk.WithMSPPkg(gw.mspfactory)
, а у другого ее нет. Я пытаюсь дать такой же вариант своему fabsdk.New()
коду, но не смог найти, как это сделать.
Итак, мой вопрос таков:
- Как я могу справиться с ошибкой «TRANSIENT_FAILURE» или
- Как я могу отключить систему ведения журнала Fabric SDK по умолчанию?
Спасибо.
Ответ №1:
У меня просто были точно такие же два вопроса, когда я писал небольшой пример интерфейса командной строки, чтобы получить метаданные цепного кода
Как я могу справиться с ошибкой «TRANSIENT_FAILURE»
В моем случае dialing connection on target [peer0.org1.example.com:7051]: connection is in TRANSIENT_FAILURE
ошибка произошла из-за того, что я использовал среду настройки тестовой сети Fabric, но не установил переменную среды DISCOVERY_AS_LOCALHOST. DISCOVERY_AS_LOCALHOST определяет, переводятся ли IP-адреса, найденные во время обнаружения службы, из сети docker на локальный хост, что описано в документации по параметрам подключения для разработки приложений.
Как я могу отключить систему ведения журнала Fabric SDK по умолчанию?
Я все еще хотел видеть сообщения об ошибках, но мне удалось изменить уровень ведения журнала, чтобы избавиться от нежелательных информационных сообщений с помощью logging.SetLevel("", logging.ERROR)
Образец ccmetadata находится на GitHub, если это вам поможет