snippet/grpc/grpc.go

72 lines
1.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package grpc
import (
"fmt"
"log"
"net"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
type GrpcService interface {
Register(srv *grpc.Server)
}
type Config struct {
Address string
Port int
AppName string
}
var rpc *grpc.Server
var conf *Config
func Init(config *Config) *grpc.Server {
if config == nil {
config = &Config{
Address: "0.0.0.0",
Port: 0,
AppName: "unknown",
}
}
conf = config
if rpc == nil {
rpc = grpc.NewServer(grpc.MaxRecvMsgSize(1024*1024), grpc.MaxSendMsgSize(1024*1024))
}
return rpc
}
func IPAddress() string {
return conf.Address
}
func Port() int {
return conf.Port
}
func Start() {
//注册反射 用于grpcurl调试
reflection.Register(rpc)
// grpc服务启动本局IP支持
go func() {
addr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", conf.Address, conf.Port))
if err != nil {
log.Fatal("net.ResolveTCPAddr", err)
}
lis, err := net.ListenTCP("tcp", addr)
if err != nil {
log.Fatal("fail to open port: ", err)
}
defer lis.Close()
conf.Port = lis.Addr().(*net.TCPAddr).Port
log.Printf("starting grpc service on %s:%d", addr.IP, conf.Port)
err = rpc.Serve(lis)
if err != nil {
log.Fatal("fail to open microservice: ", err)
}
}()
}