我有一个使用echo的概念验证 http 服务器,它接受带有 JSON 正文的 POST 请求。我正在尝试使用管道和多写入器将请求主体流式传输到多个 POST 请求,但它无法正常工作。
在下面的示例中,我可以看到数据被发送到 2 个 POST 端点,我可以看到来自这些请求的日志,但我从未收到回复,似乎代码挂起等待功能完成http.Post(...)
。
如果我直接调用这两个端点,它们可以正常工作并给出有效的 json 响应,所以我相信问题出在这段代码上,它是我的路由处理程序。
func ImportAggregate(c echo.Context) error {
oneR, oneW := io.Pipe()
twoR, twoW := io.Pipe()
done := make(chan bool, 2)
go func() {
fmt.Println("Product Starting")
response, err := http.Post("http://localhost:1323/products/import", "application/json", oneR)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(response.Body)
}
done <- true
}()
go func() {
fmt.Println("Import Starting")
response, err := http.Post("http://localhost:1323/discounts/import", "application/json", twoR)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(response.Body)
}
done <- true
}()
mw := io.MultiWriter(oneW, twoW)
io.Copy(mw, c.Request().Body)
<-done
<-done
return c.String(200, "Imported")
}
控制台中的输出是:
Product Starting
Import Starting
心有法竹
相关分类