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