123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /**
- 服务提供者样例
- */
- package main
- import (
- "app.yhyue.com/BP/servicerd/proto"
- "context"
- "flag"
- "fmt"
- "google.golang.org/grpc"
- "log"
- "net"
- "os"
- "os/signal"
- "time"
- )
- //服务地址配置
- var (
- ip = flag.String("ip", "192.168.20.100", "本机ip")
- port = flag.Int("port", 20153, "服务端口")
- rdserver = flag.String("rd", "127.0.0.1:10021", "服务治理地址")
- serviceName = flag.String("name", "demo", "服务名称")
- )
- type DemoService struct {
- }
- //
- func (s *DemoService) Say(ctx context.Context, in *proto.DemoReq) (*proto.DemoRep, error) {
- 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() {
- flag.Parse()
- }
- func main() {
- go startServer()
- go heartbeat() //心跳
- registe()
- c := make(chan os.Signal, 1)
- signal.Notify(c, os.Interrupt, os.Kill)
- <-c
- log.Println("服务注销")
- destory()
- }
|