如何使用Golang和LabStack回显处理到多个服务的代理

Cha*_*tte 5 go

我是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")

    但是我找不到如何使用此工具将代理作为参数传递。

Cha*_*tte 6

感谢我在 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)