Package nl.colorize.util
Class Subscribable<T>
java.lang.Object
nl.colorize.util.Subscribable<T>
- Type Parameters:
T
- The type of event that can be subscribed to.
Acts as a message broker for publish/subscribe workflows, where producers
publish (possibly asynchronous) events, which are then consumed by
subscribers. These subscribers can be notified for events, for errors, or
for both.
Subscribable
instances are thread-safe and can be accessed from
multiple threads. This allows for workflows where publishers and
subscribers operate on different threads.
This class is part of a portable framework for
publish/subscribe
communication. This framework can be used across different platforms,
including platforms where java.util.concurrent
is not available,
such as TeaVM.
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
complete()
Marks thisSubscribable
as completed, meaning that no new events or errors will be published to subscribers.Returns a newSubscribable
that will forward events to its own subscribers, but only if the event matches the specified predicate.<S> Subscribable
<S> Returns a newSubscribable
that will forward events to its own subscribers, but first uses the specified mapping function on each event.void
Performs the specified operation and publishes the resulting event to subscribers.void
Publishes the next event to all event subscribers.void
Publishes the next error to all error subscribers.static <T> Subscribable
<T> Creates aSubscribable
that will publish the specified values to its subscribers.static <T> Subscribable
<T> of
(T... values) Creates aSubscribable
that will publish the specified values to its subscribers.void
Attempts to perform an operation for the specified number of attempts, automatically retrying the operation if the initial attempt(s) failed.void
Attempts to perform an operation for the specified number of attempts, automatically retrying the operation if the initial attempt(s) failed.static <T> Subscribable
<T> Performs the specified operation and returns aSubscribable
that can be used to subscribe to the results.static <T> Subscribable
<T> runBackground
(Callable<T> operation) Performs the specified operation in a new background thread, and returns aSubscribable
that can be used to subscribe to the background operation.Registers the specified callback functions as event and error subscribers.subscribe
(Subscribable<T> subscriber) Subscribes the specified otherSubscribable
to listen for both events and errors generated by thisSubscribable
.subscribe
(Subscriber<T> subscriber) Registers the specified subscriber to receive published events and errors.subscribeErrors
(Consumer<Exception> onError) Registers the specified callback function as an error subscriber.void
unsubscribe
(Subscriber<T> subscriber) Removes a previously registered subscriber.
-
Constructor Details
-
Subscribable
public Subscribable()
-
-
Method Details
-
next
Publishes the next event to all event subscribers. This method does nothing if thisSubscribable
has already been marked as completed. -
nextError
Publishes the next error to all error subscribers. If no error subscribers have been registered, this will invoke the default error handler that will print a log messsage describing the unhandled error. This method does nothing if thisSubscribable
has already been marked as completed. -
next
Performs the specified operation and publishes the resulting event to subscribers. If the operation completes normally, the return value is published to subscribers as an event. If an exception occurs during the operation, this exception is published to error subscribers. Does nothing if thisSubscribable
has already been marked as completed. -
retry
Attempts to perform an operation for the specified number of attempts, automatically retrying the operation if the initial attempt(s) failed. Noteattempts
includes the original attempt, so the number of retries is basicallyattempts - 1
.If the operation is not successful, an error is sent to subscribers based on the last failed attempt.
-
retry
Attempts to perform an operation for the specified number of attempts, automatically retrying the operation if the initial attempt(s) failed. The specified time delay (in milliseconds) is applied in between attempts. Noteattempts
includes the original attempt, so the number of retries is basicallyattempts - 1
.If the operation is not successful, an error is sent to subscribers based on the last failed attempt.
-
subscribe
Registers the specified subscriber to receive published events and errors. The subscriber will immediately be notified of previously published events.- Returns:
- This
Subscribable
, for method chaining.
-
subscribe
Registers the specified callback functions as event and error subscribers. The subscribers will immediately be notified of previously published events and/or errors.- Returns:
- This
Subscribable
, for method chaining.
-
subscribeErrors
Registers the specified callback function as an error subscriber. The subscriber will immediately be notified of previously published errors.- Returns:
- This
Subscribable
, for method chaining.
-
subscribe
Subscribes the specified otherSubscribable
to listen for both events and errors generated by thisSubscribable
. This effectively means that events published by this instance will be forwarded tosubscriber
's subscribers.- Returns:
- This
Subscribable
, for method chaining.
-
unsubscribe
Removes a previously registered subscriber. If the subscriber is not currently registered with thisSubscribable
, this method does nothing. -
complete
public void complete()Marks thisSubscribable
as completed, meaning that no new events or errors will be published to subscribers. However, old events might still be published when additional subscribers are registered. -
map
Returns a newSubscribable
that will forward events to its own subscribers, but first uses the specified mapping function on each event. Errors will be forwarded as-is. -
filter
Returns a newSubscribable
that will forward events to its own subscribers, but only if the event matches the specified predicate. Errors will be forwarded as-is. -
of
Creates aSubscribable
that will publish the specified values to its subscribers. -
of
Creates aSubscribable
that will publish the specified values to its subscribers. -
run
Performs the specified operation and returns aSubscribable
that can be used to subscribe to the results. -
runBackground
Performs the specified operation in a new background thread, and returns aSubscribable
that can be used to subscribe to the background operation.
-