状态
例程:state
state
是另外一种元数据。如果你在一些服务中设置state=inactive
元数据,那么客户端就不能访问那些服务,即便那些服务是存活的。
你可以使用它来临时失能一个服务而不需要关闭服务器。
你可以通过rpcx-ui来管理rpcx服务。
// go server.go
func main() {
flag.Parse()
go createServer1(*addr1, "")
go createServer2(*addr2, "state=inactive")
select {}
}
func createServer1(addr, meta string) {
s := server.NewServer()
s.RegisterName("Arith", new(example.Arith), meta)
s.Serve("tcp", addr)
}
func createServer2(addr, meta string) {
s := server.NewServer()
s.RegisterName("Arith", new(Arith), meta)
s.Serve("tcp", addr)
}
// go client.go
xclient := client.NewXClient("Arith", client.Failover, client.RoundRobin, d, client.DefaultOption)
defer xclient.Close()
args := &example.Args{
A: 10,
B: 20,
}
for {
reply := &example.Reply{}
err := xclient.Call(context.Background(), "Mul", args, reply)
if err != nil {
log.Fatalf("failed to call: %v", err)
}
log.Printf("%d * %d = %d", args.A, args.B, reply.C)
time.Sleep(1e9)
}