我是Go和Micro-services开发的新手,但我希望我的问题会有意义:
假设我有一个微服务,可处理用户操作,例如创建,显示和更新用户,可在访问localhost:8081/users。
除此之外,我还可以在微服务处理事件的创建,显示和更新localhost:8082/events。
而且,在此之上,还有一个网关,该网关可以localhost:8080用作代理,将传入的请求分派到正确的服务。
我发现这段代码可以很好地从网关重定向到用户的服务:
proxy := httputil.NewSingleHostReverseProxy(&url.URL{
Scheme: "http",
Host: "localhost:8081",
})
http.ListenAndServe(":8080", proxy)
Run Code Online (Sandbox Code Playgroud)
但是有两件事困扰着我:
我应该如何处理多个微服务上的调度?我想要一个条件,例如:“如果客户要求localhost:8080/users,则应转到用户的服务。如果客户要求,则应转到localhost:8080/events事件的服务。(请随时告诉我这种方法是否错误)
就像我在标题中提到的那样,我正在使用labstack / echo路由器,所以我不想使用来启动服务器http.ListenAndServe(":8080", proxy),而是使用类似
e := echo.New()
e.Start(":8080")
但是我找不到如何使用此工具将代理作为参数传递。
感谢我在 labstack/echo github 上发布的问题的答案,这里是解决方案:
httputil.ReverseProxy实现http.Handler,所以你可以做类似的事情:
e := echo.New()
proxy := httputil.NewSingleHostReverseProxy(&url.URL{
Scheme: "http",
Host: "localhost:8081",
})
e.Any("/users", echo.WrapHandler(proxy))
e.Start(":8080")
Run Code Online (Sandbox Code Playgroud)