首页 > 解决方案 > fabric-sdk-go 拨号连接超时

问题描述

我想使用fabric-sdk-go连接到fabric,我查询了chaincode,它是正确的,但是当我调用chaincode时,它是错误的。日志爆炸:

 ```
    $ go run main.go 
    100
    Failed to invoke: CreateAndSendTransaction failed: SendTransaction failed: calling orderer 'orderer0.1530081632652.svc.cluster.local:32567' failed: Orderer Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection timed out [orderer0.1530081632652.svc.cluster.local:32567]
 ```

我尝试将 orderer0.1530081632652.svc.cluster.local 更改为 9.115.76.16,但这也是同样的问题。

打击是我关于订购者的 congig.yaml :

```
orderers:
  orderer0.1530081632652.svc.cluster.local:
    url: orderer0.1530081632652.svc.cluster.local:32567

    # these are standard properties defined by the gRPC library
    # they will be passed in as-is to gRPC client constructor
    grpcOptions:
      ssl-target-name-override: orderer0.1530081632652.svc.cluster.local
      # These parameters should be set in coordination with the keepalive policy on the server,
      # as incompatible settings can result in closing of connection.
      # When duration of the 'keep-alive-time' is set to 0 or less the keep alive client parameters are disabled
      keep-alive-time: 20s
      keep-alive-timeout: 400s
      keep-alive-permit: false
      fail-fast: false
      # allow-insecure will be taken into consideration if address has no protocol defined, if true then grpc or else grpcs
      allow-insecure: false

    tlsCACerts:
      # Certificate location absolute path
      path: /Users/zhangyulong/Documents/gopath/src/github.com/hyperledger/DevOps/crypto-config/ordererOrganizations/1530081632652.svc.cluster.local/tlsca/tlsca.1530081632652.svc.cluster.local-cert.pem
```

```
orderer:
    - pattern: (\w*)orderer0.1530081632652.svc.cluster.local(\w*)
      urlSubstitutionExp: orderer0.1530081632652.svc.cluster.local:32567
      sslTargetOverrideUrlSubstitutionExp: orderer0.1530081632652.svc.cluster.local
      mappedHost: orderer0.1530081632652.svc.cluster.local
```

我的 main.go 关于调用是:

```
package main

import (
    "fmt"

    "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
    "github.com/hyperledger/fabric-sdk-go/pkg/core/config"
    "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
)

const (
    channelID      = "devopschannel"
    orgName        = "org1"
    orgAdmin       = "Admin"
    ordererOrgName = "Orderer"
    ccID           = "devopschannel-example_cc2"
)

func main() {
    configPath := "./config1.yaml"
    configOpt := config.FromFile(configPath)

    sdk, err := fabsdk.New(configOpt)
    if err != nil {
        fmt.Println("Failed to create new SDK: %s", err)
    }
    defer sdk.Close()

    org1ChannelClientContext := sdk.ChannelContext(channelID, fabsdk.WithUser("Admin"), fabsdk.WithOrg("Org1"))
    channelClient, err := channel.New(org1ChannelClientContext)
    if err != nil {
        fmt.Printf("Failed to create new channel client: %s\n", err)
    }

    var args = [][]byte{[]byte("query"),
        []byte("a"),
    }
    res, err := channelClient.Query(channel.Request{
        ChaincodeID: ccID,
        Fcn:         "invoke",
        Args:        args,
    })

    if err != nil {
        fmt.Printf("Failed to query: %s\n", err)

    }
    fmt.Println(string(res.Payload))

    // eventID := ".*"

    // // // Register chaincode event (pass in channel which receives event details when the event is complete)
    // reg, notifier, err := channelClient.RegisterChaincodeEvent(ccID, eventID)
    // if err != nil {
    //  fmt.Printf("Failed to register cc event: %s", err)
    // }
    //  defer channelClient.UnregisterChaincodeEvent(reg)

    res, err = channelClient.Execute(channel.Request{
        ChaincodeID: ccID,
        Fcn:         "invoke",
        Args: [][]byte{
            []byte("move"),
            []byte("a"),
            []byte("b"),
            []byte("100"),
        },
    })

    if err != nil {
        fmt.Printf("Failed to invoke: %s\n", err)

    }
    fmt.Println(string(res.Payload))

    // select {
    // case ccEvent := <-notifier:
    //  log.Printf("Received CC event: %#v\n", ccEvent)
    // case <-time.After(time.Second * 20):
    //  log.Printf("Did NOT receive CC event for eventId(%s)\n", eventID)
    // }

}
```

标签: hyperledger-fabric

解决方案


您需要将订购者的IP放入config.yamlorderer0.1530081632652.svc.cluster.local未知):

orderers:
  orderer0.1530081632652.svc.cluster.local:
    url: 9.115.76.16:32567

    # these are standard properties defined by the gRPC library
    # they will be passed in as-is to gRPC client constructor
    grpcOptions:
      ssl-target-name-override: orderer0.1530081632652.svc.cluster.local
      # These parameters should be set in coordination with the keepalive policy on the server,
      # as incompatible settings can result in closing of connection.
      # When duration of the 'keep-alive-time' is set to 0 or less the keep alive client parameters are disabled
      keep-alive-time: 20s
      keep-alive-timeout: 400s
      keep-alive-permit: false
      fail-fast: false
      # allow-insecure will be taken into consideration if address has no protocol defined, if true then grpc or else grpcs
      allow-insecure: false

    tlsCACerts:
      # Certificate location absolute path
      path: /Users/zhangyulong/Documents/gopath/src/github.com/hyperledger/DevOps/crypto-config/ordererOrganizations/1530081632652.svc.cluster.local/tlsca/tlsca.1530081632652.svc.cluster.local-cert.pem

并覆盖配置中的主机名,如下所示:

orderer:
    - pattern: (\w*)orderer0.1530081632652.svc.cluster.local(\w*)
      urlSubstitutionExp: 9.115.76.16:32567
      sslTargetOverrideUrlSubstitutionExp: orderer0.1530081632652.svc.cluster.local
      mappedHost: orderer0.1530081632652.svc.cluster.local

推荐阅读