72 lines
1.2 KiB
Go
72 lines
1.2 KiB
Go
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)
|
||
}
|
||
}()
|
||
}
|