2

从休息客户端调用 gRPC 服务时,我收到 http 错误代码 405。

我尝试使用 gRPC 客户端调用删除方法,它工作正常(即得到 200)。

休息客户端

req, err = http.NewRequest("DELETE", fmt.Sprintf("%s%s", *address, "/v1/todo"), nil)
    resp, err = http.DefaultClient.Do(req)
    if err != nil {
        log.Fatalf("failed to call DeleteAll method: %v", err)
    }
    bodyBytes, err = ioutil.ReadAll(resp.Body)
    resp.Body.Close()
    if err != nil {
        body = fmt.Sprintf("failed read Delete response body: %v", err)
    } else {
        body = string(bodyBytes)
    }
    log.Printf("Delete response: Code=%d, Body=%s\n\n", resp.StatusCode, body)

gRPC 客户端

req6 := v1.DeleteAllRequest{
        Api: apiVersion,
    }
    res6, err := c.DeleteAll(ctx, &req6)
    if err != nil {
        log.Fatalf("Delete failed: %v", err)
    }
    log.Printf("Delete all result: <%+v>\n\n", res6)

预计删除功能正确执行并获得 200 个 http 响应。

4

1 回答 1

0

当前浏览器本身不支持 grpc。所以我尝试使用来自 envoy(lyft 的 envoy)的 sidecar 代理,它充当我的 grpc 后端的接口。

...
static_resources:
cluster:
- name: local_service
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    load_assignment:
      cluster_name: local_service
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: 127.0.0.1
                port_value: 8080
...

这就是我在特使配置中编写服务的方式,有关此的更多详细信息可以在特使的 Github 存储库中找到,他们有多个示例可以更好地理解该过程。

于 2019-05-16T08:59:09.650 回答