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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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