首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通道未配置任何具有“”discover“”角色的对等方

通道未配置任何具有“”discover“”角色的对等方
EN

Stack Overflow用户
提问于 2019-11-05 18:24:56
回答 3查看 886关注 0票数 4

我正在尝试从java fabric SDK进行事务处理。我可以从节点正确地查询数据,但在进行事务时,我得到了以下错误:

代码语言:javascript
复制
org.hyperledger.fabric.sdk.exception.ServiceDiscoveryException: The channel is not configured with any peers with the 'discover' role
    at org.hyperledger.fabric.sdk.Channel.sendTransactionProposalToEndorsers(Channel.java:3955) ~[fabric-sdk-java-1.4.5.jar:na]
    at org.hyperledger.fabric.gateway.impl.TransactionImpl.sendTransactionProposal(TransactionImpl.java:155) ~[fabric-gateway-java-1.4.0.jar:na]
    at org.hyperledger.fabric.gateway.impl.TransactionImpl.submit(TransactionImpl.java:91) ~[fabric-gateway-java-1.4.0.jar:na]
    at org.hyperledger.fabric.gateway.impl.ContractImpl.submitTransaction(ContractImpl.java:50) ~[fabric-gateway-java-1.4.0.jar:na]

如何为对等项配置“发现”角色?

EN

回答 3

Stack Overflow用户

发布于 2019-11-06 15:44:31

虽然我一直在使用node SDK,但根据我浏览过的java资源,您一定是使用了一个' network -config'(.yaml/.json)文件来将您的应用程序(通过sdk)连接到您的网络。其中将出现一个对等部分,其定义为:https://github.com/hyperledger/fabric-sdk-java/blob/master/src/test/fixture/sdkintegration/network_configs/network-config.yaml#L76,您应该尝试在其中添加discover: true

然而,这里的要点是,此发现属性在默认情况下为真,因此也可能是您在网络配置文件中遗漏了对等部分(尽管这是必需的部分,因此发生这种情况的可能性也很小),或者您可能遗漏了在docker文件中配置CORE_PEER_GOSSIP_EXTERNALENDPOINT

票数 0
EN

Stack Overflow用户

发布于 2020-02-25 19:10:22

遵循这些步骤将有助于从客户端应用程序访问服务发现。

在运行网络(对等)之前,将CORE_PEER_GOSSIP_EXTERNALENDPOINT信息添加到docker-compose.yml 的对等服务中。如果我们为每个组织至少设置一个锚点对等体,这将是有帮助的。

代码语言:javascript
复制
services:
  peer1.org1.example.com:
     environment:
        - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:5051
        # Need to change the peer domain and port with your desired value 
        - CORE_PEER_GOSSIP_USELEADERELECTION=true
        - CORE_PEER_GOSSIP_ORGLEADER=false

外部终结点将帮助来自其他组织的对等点查找对等点。

2.使用discover更新networkConnection.yml文件中的对等体信息:用于将应用程序与网络连接的真正。

代码语言:javascript
复制
channels:
  testchannel:
    peers:
      peer1.org1.example.com:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
        discover: true

3.在从应用程序创建网关的过程中启用发现

代码语言:javascript
复制
Gateway.Builder builder = Gateway.createBuilder();
...     
builder.discovery(true).identity(wallet, userName).networkConfig(connectionProfile);
// Connect to gateway using application specified parameters
gateway = builder.connect();

运行应用程序后,它将使用来自peer1.org1.example.com同级的发现服务,并将从通道中获取其他组织同级信息(例如,peer2.org2.example.com、peer1.org2.example.com)。

希望它能解决你的问题。

但它不会与域名(peer1.org1.example.com,peer1.org2.example.com,peer2.org2.example.com)一起运行,因为域名与实际IP没有绑定。您需要在/etc/hosts文件中添加路由以测试应用程序(使用所需的IP更新127.0.0.1 )。

代码语言:javascript
复制
127.0.0.1 peer1.org1.example.com
127.0.0.1 peer1.org2.example.com
127.0.0.1 peer2.org2.example.com

再次运行客户端应用程序并检查其是否正常工作。

票数 0
EN

Stack Overflow用户

发布于 2020-07-09 00:30:47

如果以编程方式添加了对等项,则可以在添加对等项时设置对等项的角色。这是一段代码片段

代码语言:javascript
复制
newChannel.joinPeer(peer, Channel.PeerOptions.createPeerOptions().setPeerRoles(EnumSet.of(Peer.PeerRole.EVENT_SOURCE, Peer.PeerRole.SERVICE_DISCOVERY))); //Add more roles as you see if

然后,当您使用newChannel.initialize()初始化通道时,它将重新启动完整的网络发现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58709303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档