Class DefaultPartitionedClientGroup<U,R,Client extends ListenableAsyncCloseable>
- java.lang.Object
-
- io.servicetalk.client.api.internal.DefaultPartitionedClientGroup<U,R,Client>
-
- Type Parameters:
U- the type of address before resolution (unresolved address)R- the type of address after resolution (resolved address)Client- the type of client to connect to the partitions
- All Implemented Interfaces:
ClientGroup<PartitionAttributes,Client>,AsyncCloseable,ListenableAsyncCloseable
public final class DefaultPartitionedClientGroup<U,R,Client extends ListenableAsyncCloseable> extends java.lang.Object implements ClientGroup<PartitionAttributes,Client>
An implementation ofClientGroupthat can be used for partitioned client use-cases wherePartitionAttributesare discovered throughPartitionedServiceDiscovererEvents.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceDefaultPartitionedClientGroup.PartitionedClientFactory<U,R,Client>Factory for building partitioned clients.
-
Constructor Summary
Constructors Constructor Description DefaultPartitionedClientGroup(java.util.function.Function<PartitionAttributes,Client> closedPartitionClient, java.util.function.Function<PartitionAttributes,Client> unknownPartitionClient, DefaultPartitionedClientGroup.PartitionedClientFactory<U,R,Client> clientFactory, PartitionMapFactory partitionMapFactory, Publisher<PartitionedServiceDiscovererEvent<R>> psdEvents, int psdMaxQueueSize)Creates a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description CompletablecloseAsync()Used to close/shutdown a resource.CompletablecloseAsyncGracefully()Used to close/shutdown a resource, similar toAsyncCloseable.closeAsync(), but attempts to cleanup state before abruptly closing.Clientget(PartitionAttributes partitionAttributes)Return theClientGroupidentified by the providedkeyor create a new one when none exists.CompletableonClose()Returns aCompletablethat is notified once theListenableAsyncCloseablewas closed.
-
-
-
Constructor Detail
-
DefaultPartitionedClientGroup
public DefaultPartitionedClientGroup(java.util.function.Function<PartitionAttributes,Client> closedPartitionClient, java.util.function.Function<PartitionAttributes,Client> unknownPartitionClient, DefaultPartitionedClientGroup.PartitionedClientFactory<U,R,Client> clientFactory, PartitionMapFactory partitionMapFactory, Publisher<PartitionedServiceDiscovererEvent<R>> psdEvents, int psdMaxQueueSize)
Creates a new instance.- Parameters:
closedPartitionClient- factory for clients that handle requests for a closed partitionunknownPartitionClient- factory for clients that handles requests for an unknown partitionclientFactory- used to create clients for newly discovered partitionspartitionMapFactory- factory to provide aPartitionMapimplementation appropriate for the use-casepsdEvents- the stream ofPartitionedServiceDiscovererEventspsdMaxQueueSize- max number of new partitions to queue up
-
-
Method Detail
-
onClose
public Completable onClose()
Description copied from interface:ListenableAsyncCloseableReturns aCompletablethat is notified once theListenableAsyncCloseablewas closed.- Specified by:
onClosein interfaceListenableAsyncCloseable- Returns:
- the
Completablethat is notified on close.
-
closeAsync
public Completable closeAsync()
Description copied from interface:AsyncCloseableUsed to close/shutdown a resource.- Specified by:
closeAsyncin interfaceAsyncCloseable- Returns:
- A
Completablethat is notified once the close is complete.
-
closeAsyncGracefully
public Completable closeAsyncGracefully()
Description copied from interface:AsyncCloseableUsed to close/shutdown a resource, similar toAsyncCloseable.closeAsync(), but attempts to cleanup state before abruptly closing. This provides a hint that implementations can use to stop accepting new work and finish in flight work. This method is implemented on a "best effort" basis and may be equivalent toAsyncCloseable.closeAsync().Note: Implementations may or may not apply a timeout for this operation to complete, if a caller does not want to wait indefinitely, and are unsure if the implementation applies a timeout, it is advisable to apply a timeout and force a call to
AsyncCloseable.closeAsync().- Specified by:
closeAsyncGracefullyin interfaceAsyncCloseable- Returns:
- A
Completablethat is notified once the close is complete.
-
get
public Client get(PartitionAttributes partitionAttributes)
Description copied from interface:ClientGroupReturn theClientGroupidentified by the providedkeyor create a new one when none exists.- Specified by:
getin interfaceClientGroup<U,R>- Parameters:
partitionAttributes- the key identifying the client to return or create, this key may contain attributes about the requested client in order to create new instances- Returns:
- a client assigned to the provided
key, either by looking up an existing or creating a new instance if non-existent
-
-