摘要:建立 RESTful API:建立 Golang 項目,使用 http 套件並定義路由處理函數。實現負載平衡:使用 fasthttp 套件建立代理中間件,將請求轉送至多個後端伺服器。實戰:啟動後端伺服器,使用 fasthttp 代理請求,觀察負載平衡結果。
使用Golang 建立RESTful API 並實作負載平衡
#建立一個新的Golang 項目,並新增HTTP 套件:
package main import ( "fmt" "log" "net/http" ) func main() { // 创建 HTTP 路由器 mux := http.NewServeMux() // 定义路由处理函数 mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) //启动 HTTP 服务器 log.Fatal(http.ListenAndServe(":8080", mux)) }
使用http.NewServeMux()
建立HTTP 路由器,並使用HandleFunc()
定義處理函數。這些處理函數將處理特定的 HTTP 路徑和方法。
為了實現負載平衡,我們需要使用中間件或反向代理伺服器。下面使用 fasthttp
套件作為中間件。
首先,安裝fasthttp
:
go get -u github.com/valyala/fasthttp
然後,匯入fasthttp
並使用fasthttp.Director()
定義代理功能:
package main import ( "fmt" "log" "net/http" "github.com/valyala/fasthttp" ) func main() { // 创建 fasthttp 代理中间件 director := fasthttp.Director{ // 定义要代理到后端服务器的地址 Addrs: []string{"localhost:8081"}, } // 创建 HTTP 路由器 mux := http.NewServeMux() // 将代理中间件作为全局处理器添加到路由器 mux.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { director.ServeHTTP(w, r) return }) }) // 定义路由处理函数,处理 HTTP 请求后 mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) // 启动 HTTP 服务器 log.Fatal(http.ListenAndServe(":8080", mux)) }
為了演示,您可以啟動多個後端伺服器(例如,在不同的連接埠上),並使用fasthttp 代理請求到這些伺服器。
後端伺服器1
package main import ( "fmt" "log" "net/http" ) func main() { // 在端口 8081 上启动一个 HTTP 服务器 log.Fatal(http.ListenAndServe(":8081", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Backend Server 1") }))) }
後端伺服器2
package main import ( "fmt" "log" "net/http" ) func main() { // 在端口 8082 上启动另一个 HTTP 服务器 log.Fatal(http.ListenAndServe(":8082", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Backend Server 2") }))) }
然後,使用以下命令啟動API 伺服器:
go run main.go
最後,向API 伺服器發送HTTP 請求,它將負載平衡到後端伺服器:
curl http://localhost:8080
輸出將交替顯示"Backend Server 1" 和"Backend Server 2",表示負載平衡正在運作。
以上是如何使用 Golang 建立 RESTful API 並實現負載平衡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!