Class DefaultRequestHandler
- All Implemented Interfaces:
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
MessageType
and 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 ClassesModifier and TypeClassDescriptionprotected static final record
Encapsulates a callback mechanism to handle both intermediate and final responses when processing requests. -
Constructor Summary
ConstructorsConstructorDescriptionDefaultRequestHandler
(Client client, MessageType resultType) Constructs a DefaultRequestHandler with the specified client and message type, and a default timeout of 200 seconds. -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Releases all resources associated with this handler.protected void
protected void
handleResults
(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 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface io.fluxcapacitor.javaclient.publishing.RequestHandler
sendRequest, sendRequest
-
Constructor Details
-
DefaultRequestHandler
Constructs a DefaultRequestHandler with the specified client and message type, and a default timeout of 200 seconds.- 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:
sendRequest
in interfaceRequestHandler
- Parameters:
request
- The request message to be sent.requestSender
- A callback used to dispatch the request.timeout
- The timeout for this request. A negative value indicates no timeout.- Returns:
- A
CompletableFuture
that 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:
sendRequest
in interfaceRequestHandler
-
sendRequests
public List<CompletableFuture<SerializedMessage>> sendRequests(List<SerializedMessage> requests, Consumer<List<SerializedMessage>> requestSender) Description copied from interface:RequestHandler
Sends multiple requests and returns a list of futures for their corresponding responses.Each request is assigned a unique
requestId
and dispatched using the given sender. The returned list preserves the order of the input requests.- Specified by:
sendRequests
in interfaceRequestHandler
- Parameters:
requests
- The requests to send.requestSender
- A callback used to dispatch the requests (e.g. batch publisher).- Returns:
- A list of
CompletableFuture
instances, one for each request.
-
sendRequests
public List<CompletableFuture<SerializedMessage>> sendRequests(List<SerializedMessage> requests, Consumer<List<SerializedMessage>> requestSender, Duration timeout) Description copied from interface:RequestHandler
Sends multiple requests with a custom timeout and returns a list of futures for their responses.- Specified by:
sendRequests
in interfaceRequestHandler
- Parameters:
requests
- The requests to send.requestSender
- A callback used to dispatch the requests.timeout
- The timeout to apply per request. A negative value disables the timeout.- Returns:
- A list of
CompletableFuture
instances, one for each request.
-
prepareRequest
protected CompletableFuture<SerializedMessage> prepareRequest(SerializedMessage request, Duration timeout, Consumer<SerializedMessage> intermediateCallback) -
ensureStarted
protected void ensureStarted() -
handleResults
-
close
public void close()Description copied from interface:RequestHandler
Releases all resources associated with this handler.This typically shuts down any underlying
TrackingClient
subscriptions, and may cancel or complete any outstanding requests.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceRequestHandler
-