我正在使用 Krakend 构建一个 API 网关来连接三个后端服务。网关总是从一个或两个后端服务返回,并且X-Krakend-Completed header
总是设置为 false。
http: invalid Read on closed Body
日志中的错误可能是什么原因?
预期行为
GET localhost:8000
回复
{
"user-id": 1,
"payments-id": 1,
"loans-id": 1,
}
实际行为
GET localhost:8000
回复
{
"payment-id": 1
}
海妖日志
[GIN] 2022/03/01 - 16:29:41 | 200 | 801.319µs | ::1 | GET "/"
Error #01: Get "http://localhost:5000/users": http: invalid Read on closed Body
Get "http://localhost:6000/loans": http: invalid Read on closed Body
[GIN] 2022/03/01 - 16:29:55 | 200 | 851.735µs | ::1 | GET "/"
Error #01: Get "http://localhost:6000/loans": http: invalid Read on closed Body
Get "http://localhost:5000/users": http: invalid Read on closed Body
服务1
type Payment struct {
Id int32 `json:"payment-id"`
}
var payments = []Payment{
{
Id: 0,
},
{
Id: 1,
}
}
func main() {
app := fiber.New()
app.Get("/payments", func(c *fiber.Ctx) error {
return c.JSON(payments[1])
})
app.Listen(":7000")
}
服务 2
func main() {
app := fiber.New()
app.Get("/loans", func(c *fiber.Ctx) error {
return c.JSON(loans[1])
})
app.Listen(":6000")
}
服务 3
func main() {
app := fiber.New()
app.Get("/users", func(c *fiber.Ctx) error {
return c.JSON(users[1])
})
app.Listen(":5000")
}
Krakend.json
{
"version": 2,
"timeout": "3000ms",
"cache_ttl": "300s",
"output_encoding": "json",
"name": "users",
"port": 8000,
"read_timeout": "2s",
"write_timeout": "2s",
"idle_timeout": "2s",
"read_header_timeout": "2s",
"endpoints": [
{
"endpoint": "/",
"method": "GET",
"output_encoding": "json",
"backend": [
{
"url_pattern": "/users",
"encoding": "json",
"method": "GET",
"host": [
"http://localhost:5000"
]
},
{
"url_pattern": "/loans",
"encoding": "json",
"method": "GET",
"host": [
"http://localhost:6000"
]
},
{
"url_pattern": "/payments",
"encoding": "json",
"method": "GET",
"host": [
"http://localhost:7000"
]
}
]
}
]
}