以下(我认为是正确的): 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不会根据这些请求将任何内容记录到标准输出中,并且管理控制台也没有任何(明显的)解释。
谢谢!
答案 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