package main import ( "log" "net/http" "github.com/darkit/goproxy" "github.com/darkit/goproxy/pkg/loadbalance" ) // LoadBalanceDelegate 负载均衡委托 type LoadBalanceDelegate struct { goproxy.DefaultDelegate lb loadbalance.LoadBalancer } // ResolveBackend 解析后端服务器 func (d *LoadBalanceDelegate) ResolveBackend(req *http.Request) (string, error) { backend, err := d.lb.Next(req.URL.Host) if err != nil { return "", err } if backend == nil { return "", nil } return backend.String(), nil } // 运行负载均衡代理服务器 func main() { // 创建后端服务器列表 backends := []string{ "http://backend1:8081", "http://backend2:8082", "http://backend3:8083", } // 创建负载均衡器 lb := loadbalance.NewRoundRobinBalancer() // 添加后端服务器 for _, backend := range backends { if err := lb.Add(backend, 1); err != nil { log.Fatalf("Error: %v", err) return } } // 创建负载均衡委托 delegate := &LoadBalanceDelegate{ lb: lb, } // 创建代理实例 proxy := goproxy.NewProxy( goproxy.WithDelegate(delegate), goproxy.WithLoadBalancer(lb), ) // 启动代理服务器 log.Println("负载均衡代理服务器启动在 :8080") log.Println("后端服务器列表:") for _, backend := range backends { log.Printf("- %s\n", backend) } http.ListenAndServe(":8080", proxy) }