|
@@ -5,25 +5,24 @@ package main
|
|
|
|
|
|
import (
|
|
import (
|
|
"app.yhyue.com/BP/servicerd/proto"
|
|
"app.yhyue.com/BP/servicerd/proto"
|
|
|
|
+ "app.yhyue.com/BP/servicerd/util"
|
|
"context"
|
|
"context"
|
|
"flag"
|
|
"flag"
|
|
- "fmt"
|
|
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc"
|
|
"log"
|
|
"log"
|
|
- "net"
|
|
|
|
"os"
|
|
"os"
|
|
"os/signal"
|
|
"os/signal"
|
|
- "time"
|
|
|
|
)
|
|
)
|
|
|
|
|
|
//服务地址配置
|
|
//服务地址配置
|
|
var (
|
|
var (
|
|
ip = flag.String("ip", "192.168.20.100", "本机ip")
|
|
ip = flag.String("ip", "192.168.20.100", "本机ip")
|
|
port = flag.Int("port", 20153, "服务端口")
|
|
port = flag.Int("port", 20153, "服务端口")
|
|
- rdserver = flag.String("rd", "127.0.0.1:10021", "服务治理地址")
|
|
|
|
|
|
+ rdserver = flag.String("rd", "192.168.3.240:10021", "服务治理地址")
|
|
serviceName = flag.String("name", "demo", "服务名称")
|
|
serviceName = flag.String("name", "demo", "服务名称")
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+//实际业务实现
|
|
type DemoService struct {
|
|
type DemoService struct {
|
|
}
|
|
}
|
|
|
|
|
|
@@ -32,98 +31,23 @@ func (s *DemoService) Say(ctx context.Context, in *proto.DemoReq) (*proto.DemoRe
|
|
return &proto.DemoRep{Data: in.Name}, nil
|
|
return &proto.DemoRep{Data: in.Name}, nil
|
|
}
|
|
}
|
|
|
|
|
|
-//
|
|
|
|
-func heartbeat() {
|
|
|
|
- conn, err := grpc.Dial(*rdserver, grpc.WithInsecure())
|
|
|
|
- if err != nil {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- defer conn.Close()
|
|
|
|
- client := proto.NewHeartBeatClient(conn)
|
|
|
|
- //调用服务端推送流
|
|
|
|
- resp, _ := client.PutStream(context.Background())
|
|
|
|
- tm := time.NewTicker(20 * time.Second)
|
|
|
|
- for {
|
|
|
|
- select {
|
|
|
|
- case <-tm.C:
|
|
|
|
- reqstreamData := &proto.StreamReqData{ServiceName: *serviceName, ServiceAddr: fmt.Sprintf("%s:%d", *ip, *port)}
|
|
|
|
- _ = resp.Send(reqstreamData)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-//服务注册
|
|
|
|
-func registe() {
|
|
|
|
- conn, err := grpc.Dial(*rdserver, grpc.WithInsecure())
|
|
|
|
- if err != nil {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- defer conn.Close()
|
|
|
|
- client := proto.NewServiceClient(conn)
|
|
|
|
- ret, err := client.Registe(context.TODO(), &proto.ServiceMeta{
|
|
|
|
- Name: *serviceName,
|
|
|
|
- Ip: *ip,
|
|
|
|
- Port: int32(*port),
|
|
|
|
- Balance: 0,
|
|
|
|
- Workers: 5,
|
|
|
|
- })
|
|
|
|
- if err != nil {
|
|
|
|
- log.Println(err.Error())
|
|
|
|
- } else {
|
|
|
|
- log.Println(ret)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-//服务注销
|
|
|
|
-func destory() {
|
|
|
|
- conn, err := grpc.Dial(*rdserver, grpc.WithInsecure())
|
|
|
|
- if err != nil {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- defer conn.Close()
|
|
|
|
- client := proto.NewServiceClient(conn)
|
|
|
|
- ret, err := client.Destory(context.TODO(), &proto.ServiceMeta{
|
|
|
|
- Name: *serviceName,
|
|
|
|
- Ip: *ip,
|
|
|
|
- Port: int32(*port),
|
|
|
|
- Balance: 0,
|
|
|
|
- Workers: 5,
|
|
|
|
- })
|
|
|
|
- if err != nil {
|
|
|
|
- log.Println(err.Error())
|
|
|
|
- } else {
|
|
|
|
- log.Println(ret)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-//服务启动
|
|
|
|
-func startServer() {
|
|
|
|
- //监听端口
|
|
|
|
- lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
|
|
|
|
- if err != nil {
|
|
|
|
- log.Fatalln(err.Error())
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- //创建一个grpc 服务器
|
|
|
|
- s := grpc.NewServer()
|
|
|
|
- //注册事件
|
|
|
|
- proto.RegisterDemoServiceServer(s, &DemoService{})
|
|
|
|
- //处理链接
|
|
|
|
- _ = s.Serve(lis)
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
func init() {
|
|
func init() {
|
|
flag.Parse()
|
|
flag.Parse()
|
|
}
|
|
}
|
|
|
|
|
|
func main() {
|
|
func main() {
|
|
- go startServer()
|
|
|
|
- go heartbeat() //心跳
|
|
|
|
- registe()
|
|
|
|
|
|
+ bs := util.NewService(*rdserver, *serviceName,
|
|
|
|
+ *ip, *port,
|
|
|
|
+ 20, 10)
|
|
|
|
+ bs.Run(func(s *grpc.Server) error { //服务注册,服务心跳,都在这个里边维护
|
|
|
|
+ //TODO 服务注册 ,当然,这里可以注册多个协议实现
|
|
|
|
+ proto.RegisterDemoServiceServer(s, new(DemoService))
|
|
|
|
+ return nil
|
|
|
|
+ })
|
|
c := make(chan os.Signal, 1)
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, os.Interrupt, os.Kill)
|
|
signal.Notify(c, os.Interrupt, os.Kill)
|
|
<-c
|
|
<-c
|
|
|
|
+ //执行清理操作
|
|
log.Println("服务注销")
|
|
log.Println("服务注销")
|
|
- destory()
|
|
|
|
|
|
+ bs.Destory()
|
|
}
|
|
}
|