Class DefaultRequestHandler
- All Implemented Interfaces:
Namespaced<RequestHandler>, RequestHandler, AutoCloseable
RequestHandler interface.
This handler supports both single and batch request dispatching, tracking responses using an internal
ConcurrentHashMap keyed by requestId. When a request is sent, the handler
subscribes to a corresponding result log (e.g., result or web response) via a
TrackingClient, which listens for responses targeted at this client only.
Each request is assigned a unique requestId and tagged with the client's source identifier.
When a response with a matching requestId is received, the corresponding CompletableFuture is
completed.
If no response is received within the configured timeout (default: 200 seconds), the future is completed exceptionally.
This request handle supports chunked responses. Request senders that can deal with chunked responses should use
sendRequest(SerializedMessage, Consumer, Duration, Consumer)}. If a chunked response is received, but the
request sender expected a single response, the intermediate responses are aggregated before completing the request.
Features:
- Supports both single and batch request dispatching.
- Tracks responses via the configured
MessageTypeand filters usingfilterMessageTarget = true. - Ensures startup of the underlying result tracker on first request dispatch.
- Cleans up subscriptions and pending futures on
close().
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
Fields inherited from interface RequestHandler
REQUEST_TIMEOUT_METADATA_KEY -
Constructor Summary
ConstructorsConstructorDescriptionDefaultRequestHandler(Client client, MessageType resultType) Constructs a DefaultRequestHandler with the specified client and message type, and a default timeout of 200 seconds.DefaultRequestHandler(Client client, MessageType resultType, Duration timeout, String responseConsumerName) Constructs a DefaultRequestHandler with the specified client, message type, timeout, and response consumer name. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Releases all resources associated with this handler.protected booleancompleteRequestExceptionally(int requestId, Throwable error) Completes a pending request exceptionally and removes its response callback.protected voidforNamespace(String namespace) Creates and returns the resource scoped to the specified namespace.protected voidhandleResults(List<SerializedMessage> messages) protected CompletableFuture<SerializedMessage> prepareRequest(SerializedMessage request, Duration timeout, Consumer<SerializedMessage> intermediateCallback) sendRequest(SerializedMessage request, Consumer<SerializedMessage> requestSender, Duration timeout) Sends a request and processes the response, combining intermediate responses (if any) with the final response data.sendRequest(SerializedMessage request, Consumer<SerializedMessage> requestSender, Duration timeout, Consumer<SerializedMessage> intermediateCallback) sendRequests(List<SerializedMessage> requests, Consumer<List<SerializedMessage>> requestSender) Sends multiple requests and returns a list of futures for their corresponding responses.sendRequests(List<SerializedMessage> requests, Consumer<List<SerializedMessage>> requestSender, Duration timeout) Sends multiple requests with a custom timeout and returns a list of futures for their responses.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Namespaced
forDefaultNamespaceMethods inherited from interface RequestHandler
sendRequest, sendRequest
-
Constructor Details
-
DefaultRequestHandler
public DefaultRequestHandler(Client client, MessageType resultType, Duration timeout, String responseConsumerName) Constructs a DefaultRequestHandler with the specified client, message type, timeout, and response consumer name. This constructor creates an internal worker pool for handling requests and responses.- Parameters:
client- the client responsible for sending and receiving messagesresultType- the type of message expected as a resulttimeout- the maximum duration to wait for a responseresponseConsumerName- the name of the consumer responsible for handling the response
-
DefaultRequestHandler
Constructs a DefaultRequestHandler with the specified client and message type, and a default timeout of 200 seconds. This constructor creates an internal worker pool for handling requests and responses.Uses a default name for the result consumer based on the application name.
- Parameters:
client- the client responsible for sending and receiving messagesresultType- the type of message expected as a result
-
-
Method Details
-
sendRequest
public CompletableFuture<SerializedMessage> sendRequest(SerializedMessage request, Consumer<SerializedMessage> requestSender, Duration timeout) Sends a request and processes the response, combining intermediate responses (if any) with the final response data. This method ensures intermediate results are aggregated and included in the final output.- Specified by:
sendRequestin interfaceRequestHandler- Parameters:
request- The request message to be sent.requestSender- A callback used to dispatch the request.timeout- The timeout for this request;nulluses the handler default and a negative value disables the timeout.- Returns:
- A
CompletableFuturethat completes with the response or fails on timeout.
-
sendRequest
public CompletableFuture<SerializedMessage> sendRequest(SerializedMessage request, Consumer<SerializedMessage> requestSender, Duration timeout, Consumer<SerializedMessage> intermediateCallback) - Specified by:
sendRequestin interfaceRequestHandler
-
forNamespace
Description copied from interface:NamespacedCreates and returns the resource scoped to the specified namespace.- Specified by:
forNamespacein interfaceNamespaced<RequestHandler>- Parameters:
namespace- the namespace to which the returned resource is scoped- Returns:
- the resource associated with the specified namespace
-
sendRequests
public List<CompletableFuture<SerializedMessage>> sendRequests(List<SerializedMessage> requests, Consumer<List<SerializedMessage>> requestSender) Description copied from interface:RequestHandlerSends multiple requests and returns a list of futures for their corresponding responses.Each request is assigned a unique
requestIdand dispatched using the given sender. The returned list preserves the order of the input requests.- Specified by:
sendRequestsin interfaceRequestHandler- Parameters:
requests- The requests to send.requestSender- A callback used to dispatch the requests (e.g. batch publisher).- Returns:
- A list of
CompletableFutureinstances, one for each request.
-
sendRequests
public List<CompletableFuture<SerializedMessage>> sendRequests(List<SerializedMessage> requests, Consumer<List<SerializedMessage>> requestSender, Duration timeout) Description copied from interface:RequestHandlerSends multiple requests with a custom timeout and returns a list of futures for their responses.A non-negative timeout is also written to
RequestHandler.REQUEST_TIMEOUT_METADATA_KEYon each request so downstream request handlers can recognize stale requests during tracking. Anulltimeout falls back to this handler's configured default.- Specified by:
sendRequestsin interfaceRequestHandler- Parameters:
requests- The requests to send.requestSender- A callback used to dispatch the requests.timeout- The timeout to apply per request;nulluses the handler default and a negative value disables the timeout.- Returns:
- A list of
CompletableFutureinstances, one for each request.
-
prepareRequest
protected CompletableFuture<SerializedMessage> prepareRequest(SerializedMessage request, Duration timeout, Consumer<SerializedMessage> intermediateCallback) -
ensureStarted
protected void ensureStarted() -
handleResults
-
completeRequestExceptionally
Completes a pending request exceptionally and removes its response callback.- Parameters:
requestId- the request id assigned byprepareRequest(SerializedMessage, Duration, Consumer)error- the error that should complete the pending request- Returns:
truewhen a pending request was found and completed
-
close
public void close()Description copied from interface:RequestHandlerReleases all resources associated with this handler.This typically shuts down any underlying
TrackingClientsubscriptions, and may cancel or complete any outstanding requests.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceRequestHandler
-