如何向gRPC-JSON Transcoder端点提交请求?

时间:2019-05-18 21:47:01

标签: grpc envoyproxy

以下(我认为是正确的): https://www.envoyproxy.io/docs/envoy/latest/configuration/http_filters/grpc_json_transcoder_filter

我正在按照文档中的配置进行操作,并且我的gRPC服务在:50051上,而gRPC-JSON Transcoder在:51051上进行监听。

我能够针对转码器提交gRPC请求:

grpcurl \
--plaintext \
--import-path=${HELLOWORLD} \
--import-path=${GOOGLEAPIS} \
--proto=helloworld/helloworld.proto \
-d '{"name":"Freddie"}' \
:51051 \
helloworld.Greeter/SayHello
{
  "message": "Hello Freddie"
}

但是我无法确定如何正确向其提交REST请求:

curl \
--request GET \
--header "Content-Type: application/json" \
--data '{"name":"Freddie"}' \
http://0.0.0.0:51051/helloworld.Greeter/SayHello

curl \
--header "Content-Type: application/json" \
--data '{"name":"Freddie"}' \
http://0.0.0.0:51051/say

curl \
--request GET \
--header "Content-Type: application/json" \
http://0.0.0.0:51051/say?name=Freddie

我尝试了不带标题的||,--insecure和https,--request POST--request GET,但都没有成功。

所有结果:

upstream connect error or disconnect/reset before headers. reset reason: remote reset

也将感谢您提供调试此类问题的指南。 Envoy不会根据这些请求将任何内容记录到标准输出中,并且管理控制台也没有任何(明显的)解释。

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯...我在另一台机器上复制了该解决方案,它可以正常工作:

工作版本:

curl \
--header "Content-Type: application/json" \
http://localhost:51051/say?name=Frederik
{
 "message": "Hello Frederik"
}

curl http://localhost:51051/say?name=Frederik
{
 "message": "Hello Frederik"
}

无效(错误)的变体:

curl \
--header "Content-Type: application/grpc" \
http://localhost:51051/say

curl \
--data '{"name":"Henry"}' \
http://localhost:51051/say
upstream connect error or disconnect/reset before headers. reset reason: remote reset