Name resolving
This examples shows how ClientConn
can pick different name resolvers.
What is a name resolver
A name resolver can be seen as a map[service-name][]backend-ip
. It takes a
service name, and returns a list of IPs of the backends. A common used name
resolver is DNS.
In this example, a resolver is created to resolve resolver.example.grpc.io
to
localhost:50051
.
Try it
go run server/main.go
go run client/main.go
Explanation
The echo server is serving on ":50051". Two clients are created, one is dialing
to passthrough:///localhost:50051
, while the other is dialing to
example:///resolver.example.grpc.io
. Both of them can connect the server.
Name resolver is picked based on the scheme
in the target string. See
https://github.com/grpc/grpc/blob/master/doc/naming.md for the target syntax.
The first client picks the passthrough
resolver, which takes the input, and
use it as the backend addresses.
The second is connecting to service name resolver.example.grpc.io
. Without a
proper name resolver, this would fail. In the example it picks the example
resolver that we installed. The example
resolver can handle
resolver.example.grpc.io
correctly by returning the backend address. So even
though the backend IP is not set when ClientConn is created, the connection will
be created to the correct backend.