如何使用golang和labstack echo处理多个服务的代理

时间:2017-02-26 12:34:21

标签: 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)

但有两件事困扰着我:

  • 我想如何处理多个微服务的调度?我希望有一个条件,例如:“如果客户请求localhost:8080/users,它应该转到用户的服务。如果他请求localhost:8080/events,它应该转到活动的服务。(请随意告诉我这种方法是否错误)

  • 正如我在标题中所提到的,我正在使用labstack / echo路由器,因此我不想使用http.ListenAndServe(":8080", proxy)启动我的服务器,而是使用

    之类的东西

    e := echo.New() e.Start(":8080")

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

1 个答案:

答案 0 :(得分:3)

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