2017-02-26 71 views
3

我是新来的快去微服务发展,但我希望我的问题才有意义:如何处理代理多种服务与golang和labstack呼应

比方说,我有一个微型的服务中处理用户诸如创建,更新用户的&等动作,可在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 /回声路由器,所以我不想开始我服务器http.ListenAndServe(":8080", proxy),但像

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

    但我找不到如何通过此工具传递代理作为参数。

回答

1

由于上一个问题我张贴在回答lab​​stack /回声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")