@ThreadSafe public abstract class ManagedChannel extends Channel
Channel
that provides lifecycle management.Constructor and Description |
---|
ManagedChannel() |
Modifier and Type | Method and Description |
---|---|
abstract boolean |
awaitTermination(long timeout,
TimeUnit unit)
Waits for the channel to become terminated, giving up if the timeout is reached.
|
void |
enterIdle()
Invoking this method moves the channel into the IDLE state and triggers tear-down of the
channel's name resolver and load balancer, while still allowing on-going RPCs on the channel to
continue.
|
ConnectivityState |
getState(boolean requestConnection)
Gets the current connectivity state.
|
abstract boolean |
isShutdown()
Returns whether the channel is shutdown.
|
abstract boolean |
isTerminated()
Returns whether the channel is terminated.
|
void |
notifyWhenStateChanged(ConnectivityState source,
Runnable callback)
Registers a one-off callback that will be run if the connectivity state of the channel diverges
from the given
source , which is typically what has just been returned by getState(boolean) . |
void |
resetConnectBackoff()
For subchannels that are in TRANSIENT_FAILURE state, short-circuit the backoff timer and make
them reconnect immediately.
|
abstract ManagedChannel |
shutdown()
Initiates an orderly shutdown in which preexisting calls continue but new calls are immediately
cancelled.
|
abstract ManagedChannel |
shutdownNow()
Initiates a forceful shutdown in which preexisting and new calls are cancelled.
|
public abstract ManagedChannel shutdown()
public abstract boolean isShutdown()
shutdown()
,
isTerminated()
public abstract boolean isTerminated()
isShutdown()
public abstract ManagedChannel shutdownNow()
isTerminated()
will likely
return false
immediately after this method returns.public abstract boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
isTerminated()
.InterruptedException
@ExperimentalApi(value="https://github.com/grpc/grpc-java/issues/4359") public ConnectivityState getState(boolean requestConnection)
Note that the core library did not provide an implementation of this method until v1.6.1.
requestConnection
- if true
, the channel will try to make a connection if it is
currently IDLEUnsupportedOperationException
- if not supported by implementation@ExperimentalApi(value="https://github.com/grpc/grpc-java/issues/4359") public void notifyWhenStateChanged(ConnectivityState source, Runnable callback)
source
, which is typically what has just been returned by getState(boolean)
. If the states are already different, the callback will be called immediately. The
callback is run in the same executor that runs Call listeners.
There is an inherent race between the notification to callback
and any call to
getState()
. There is a similar race between getState()
and a call to notifyWhenStateChanged()
. The state can change during those races, so there is not a way to
see every state transition. "Transitions" to the same state are possible, because intermediate
states may not have been observed. The API is only reliable in tracking the current
state.
Note that the core library did not provide an implementation of this method until v1.6.1.
source
- the assumed current state, typically just returned by getState(boolean)
callback
- the one-off callbackUnsupportedOperationException
- if not supported by implementation@ExperimentalApi(value="https://github.com/grpc/grpc-java/issues/4056") public void resetConnectBackoff()
NameResolver.refresh()
.
This is primarily intended for Android users, where the network may experience frequent temporary drops. Rather than waiting for gRPC's name resolution and reconnect timers to elapse before reconnecting, the app may use this method as a mechanism to notify gRPC that the network is now available and a reconnection attempt may occur immediately.
No-op if not supported by the implementation.
@ExperimentalApi(value="https://github.com/grpc/grpc-java/issues/4056") public void enterIdle()
This is primarily intended for Android users when a device is transitioning from a cellular to a wifi connection. The OS will issue a notification that a new network (wifi) has been made the default, but for approximately 30 seconds the device will maintain both the cellular and wifi connections. Apps may invoke this method to ensure that new RPCs are created using the new default wifi network, rather than the soon-to-be-disconnected cellular network.
No-op if not supported by implementation.