Class NameResolver
- Direct Known Subclasses:
DnsNameResolver
URI
and return addresses to the caller.
A NameResolver
uses the URI's scheme to determine whether it can resolve it, and uses
the components after the scheme for actual resolution.
The addresses and attributes of a target may be changed over time, thus the caller registers a
NameResolver.Listener
to receive continuous updates.
A NameResolver
does not need to automatically re-resolve on failure. Instead, the
NameResolver.Listener
is responsible for eventually (after an appropriate backoff period) invoking
refresh()
.
Implementations don't need to be thread-safe. All methods are guaranteed to
be called sequentially. Additionally, all methods that have side-effects, i.e.,
start(Listener2)
, shutdown()
and refresh()
are called from the same
SynchronizationContext
as returned by NameResolver.Args.getSynchronizationContext()
. Do
not block within the synchronization context; blocking I/O and time-consuming tasks
should be offloaded to a separate thread, generally NameResolver.Args.getOffloadExecutor()
.
- Since:
- 1.0.0
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class
Information that aNameResolver.Factory
uses to create aNameResolver
.static final class
Represents either a successfully parsed service config, containing all necessary parts to be later applied by the channel, or a Status containing the error encountered while parsing.static class
Factory that createsNameResolver
instances.static interface
Receives address updates.static class
Receives address updates.static final class
Represents the results from a Name Resolver.static @interface
Annotation for name resolution result attributes.static class
Parses and validates service configuration. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract String
Returns the authority used to authenticate connections to servers.void
refresh()
Re-resolve the name.abstract void
shutdown()
Stops the resolution.void
start
(NameResolver.Listener listener) Starts the resolution.void
start
(NameResolver.Listener2 listener) Starts the resolution.
-
Constructor Details
-
NameResolver
public NameResolver()
-
-
Method Details
-
getServiceAuthority
Returns the authority used to authenticate connections to servers. It must be from a trusted source, because if the authority is tampered with, RPCs may be sent to the attackers which may leak sensitive user data.An implementation must generate it without blocking, typically in line, and must keep it unchanged.
NameResolver
s created from the same factory with the same argument must return the same authority.- Since:
- 1.0.0
-
start
Starts the resolution. The method is not supposed to throw any exceptions. That might cause the Channel that the name resolver is serving to crash. Errors should be propagated throughNameResolver.Listener.onError(io.grpc.Status)
.An instance may not be started more than once, by any overload of this method, even after an intervening call to
shutdown()
.- Parameters:
listener
- used to receive updates on the target- Since:
- 1.0.0
-
start
Starts the resolution. The method is not supposed to throw any exceptions. That might cause the Channel that the name resolver is serving to crash. Errors should be propagated throughNameResolver.Listener2.onError(io.grpc.Status)
.An instance may not be started more than once, by any overload of this method, even after an intervening call to
shutdown()
.- Parameters:
listener
- used to receive updates on the target- Since:
- 1.21.0
-
shutdown
public abstract void shutdown()Stops the resolution. Updates to the Listener will stop.- Since:
- 1.0.0
-
refresh
public void refresh()Re-resolve the name.Can only be called after
start(io.grpc.NameResolver.Listener)
has been called.This is only a hint. Implementation takes it as a signal but may not start resolution immediately. It should never throw.
The default implementation is no-op.
- Since:
- 1.0.0
-