分组

例程group

当你注册一个服务的时候,你可能已经注意到有第三个参数,而我们在大部分的示例里都设置为空字符串。实际上你可以为这些服务添加一些数据。

你可以通过rpcx-ui管理rpcx服务。

group是一个元数据。如果你为一些服务设置了group数据,那么只有该group内的客户端才能访问这些服务。

// go server.go

func main() {
    flag.Parse()
    go createServer1(*addr1, "")
    go createServer2(*addr2, "group=test")

    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)
}

服务发现可以找到该分组。客户端可以使用option.Group设置分组。

如果你没有设置option.Group,客户端可以访问任何服务,不论服务是否设置分组。

// go client.go

option := client.DefaultOption
option.Group = "test"
xclient := client.NewXClient("Arith", client.Failover, client.RoundRobin, d, option)
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)
}

results matching ""

    No results matching ""