You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.6 KiB

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
// 调用(请求)目标服务的资源
}