服务状态

示例: state

state 是另外一个元数据。 如果你在元数据中设置了state=inactive, 客户端将不能访问这些服务,即使这些服务是”活”着的。

你可以使用临时禁用一些服务,而不是杀掉它们, 这样就实现了服务的降级。 server.

你可以通过 rpcx-ui)来时实现禁用和启用的功能。

  1. // server.go
  2. func main() {
  3. flag.Parse()
  4. go createServer1(*addr1, "")
  5. go createServer2(*addr2, "state=inactive")
  6. select {}
  7. }
  8. func createServer1(addr, meta string) {
  9. s := server.NewServer()
  10. s.RegisterName("Arith", new(example.Arith), meta)
  11. s.Serve("tcp", addr)
  12. }
  13. func createServer2(addr, meta string) {
  14. s := server.NewServer()
  15. s.RegisterName("Arith", new(Arith), meta)
  16. s.Serve("tcp", addr)
  17. }
  1. // client.go
  2. xclient := client.NewXClient("Arith", client.Failover, client.RoundRobin, d, client.DefaultOption)
  3. defer xclient.Close()
  4. args := &example.Args{
  5. A: 10,
  6. B: 20,
  7. }
  8. for {
  9. reply := &example.Reply{}
  10. err := xclient.Call(context.Background(), "Mul", args, reply)
  11. if err != nil {
  12. log.Fatalf("failed to call: %v", err)
  13. }
  14. log.Printf("%d * %d = %d", args.A, args.B, reply.C)
  15. time.Sleep(1e9)
  16. }