2017-02-26 74 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")