从同行加入频道时如何启用发现角色

How to enable discover role when joining a channel from a peer

我在尝试使用来自 Fabric Java SDK

的 Discovery 服务执行事务时遇到以下错误
org.hyperledger.fabric.sdk.exception.ServiceDiscoveryException: The channel is not configured with any peers with the 'discover' role

我使用 peer shell 命令加入频道,而不是 Fabric Java SDK。一旦已加入频道,我如何配置该发现角色?

谢谢

discover 角色的概念是 Fabric Java SDK 的概念。当您使用 SDK 创建通道定义并向其添加对等点时,您需要将该对等点定义为具有发现角色。

如果您使用 fabric-gateway-java SDK 包而不是 fabric-sdk-java 包,这一切都会为您处理。 fabric-gateway-java 包提供了在 java 中编写 fabric 客户端应用程序的更简单入口,尽管不如使用 fabric-sdk-java.

强大

我想出了代码的确切缺失部分。希望它能帮助有类似问题的人。这只是将所需的 peerRoles 添加为 @david_k 评论的问题:

我有:

channel.addPeer(peer);

并用这个替换它解决了问题:

channel.addPeer(peer, createPeerOptions().setPeerRoles(EnumSet.of(PeerRole.SERVICE_DISCOVERY, PeerRole.LEDGER_QUERY, PeerRole.EVENT_SOURCE, PeerRole.CHAINCODE_QUERY)));