package discovery import ( "log" "os" "os/signal" ) // 服务的类型接口 type Service interface { Name() string Addr() string } // orderService type OrderService struct { name string addr string } func (s OrderService) Name() string { return s.name } func (s OrderService) Addr() string { return s.addr } func ServiceOrder(addr string) { // 一:初始化orderService orderService := OrderService{ name: "order", addr: addr, } // 二:获取RegistrarEtcd re, err := NewRegistrarEtcd([]string{"localhost:2379"}) // redis(6379) if err != nil { log.Fatalln(err) } // 三:将初始化orderService注册到RegistrarEtcd中 if err := re.Register(orderService); err != nil { log.Fatalln(err) } // 四:阻塞执行 log.Printf("service %s(%s) is running", orderService.Name(), orderService.Addr()) // 监控系统的终止信号,来撤销租约 chInt := make(chan os.Signal, 1) signal.Notify(chInt, os.Interrupt) // 监控终止ctrl+c(interrupt)的信号 // 多路复用channel监控语句 select { case <-chInt: if err := re.DeRegister(); err != nil { log.Fatalln(err) } log.Printf("service %s(%s) was deregisted", orderService.Name(), orderService.Addr()) } } func ServiceDriver() { // 初始化服务发现中间件 de, err := NewDiscoveryEtcd([]string{"localhost:2379"}) if err != nil { log.Fatalln(err) } // 发现order服务 servcieName := "order" addr, err := de.GetServiceAddr(servcieName) if err != nil { log.Fatalln(err) } log.Printf("servie %s was discoveried on %s\n", servcieName, addr) // 连接到目标服务,在微服务架构中,是grpc // 调用(请求)目标服务的资源 }