分组

分组: group

当你在服务器端注册服务的时候,你可能注意到第三个参数我们一般设置它为空的字符串,事实上你可以为服务增加一些元数据。

你可以通过UI管理器查看服务的元数据 rpcx-ui),或者增删一些元数据。

group 就是一个元数据。如果你为服务设置了设置group, 只有在这个group的客户端才能访问这些服务(这个限制是在路由的时候限制的, 当然你在客户端绕过这个限制)。

  1. // server.go
  2. func main() {
  3. flag.Parse()
  4. go createServer1(*addr1, "")
  5. go createServer2(*addr2, "group=test")
  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. }

客户端通过 option.Group 设置组。

如果在客户端你没有设置 option.Group, 客户端可以访问这些服务, 无论服务是否设置了组还是没设置。

  1. // client.go
  2. option := client.DefaultOption
  3. option.Group = "test"
  4. xclient := client.NewXClient("Arith", client.Failover, client.RoundRobin, d, option)
  5. defer xclient.Close()
  6. args := &example.Args{
  7. A: 10,
  8. B: 20,
  9. }
  10. for {
  11. reply := &example.Reply{}
  12. err := xclient.Call(context.Background(), "Mul", args, reply)
  13. if err != nil {
  14. log.Fatalf("failed to call: %v", err)
  15. }
  16. log.Printf("%d * %d = %d", args.A, args.B, reply.C)
  17. time.Sleep(1e9)
  18. }