我是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")
但我找不到如何使用此工具将代理作为参数传递。
答案 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")