Golang——gRPC gateway网关
package main
import (
"context"
"log"
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"google.golang.org/grpc"
)
func run() error {
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
defer cancel()
mux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithInsecure()}
err := mux.HandlePath(http.MethodGet, "/example.ExampleService/ExampleMethod", handler(opts))
if err != nil {
return err
}
err = mux.HandlePath(http.MethodPost, "/example.ExampleService/ExampleMethod", handler(opts))
if err != nil {
return err
}
// 假设 gRPC 服务运行在 localhost:50051
err = http.ListenAndServe(":8080", mux)
if err != nil {
return err
}
return nil
}
func handler(opts []grpc.DialOption) runtime.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
// 这里可以添加自定义的处理逻辑
log.Printf("Forwarding %s %s to gRPC server\n", r.Method, r.URL.Path)
}
}
func main() {
if err := run(); err != nil {
log.Fatal(err)
}
}
这个代码示例展示了如何使用grpc-gateway库创建一个简单的gRPC网关服务器。它定义了一个处理函数handler
,该函数用于处理转发到gRPC服务的HTTP请求。然后,使用runtime.NewServeMux
创建一个服务多路复用器,并通过HandlePath
函数将特定的HTTP请求路径映射到gRPC服务方法。最后,使用http.ListenAndServe
启动HTTP服务器来监听并处理进入的HTTP请求。
评论已关闭