public interface SseBroadcaster
extends java.lang.AutoCloseable
Server broadcaster can be used to manage multiple server sinks
. It enables sending events to all
registered event outputs and provides facility to effectively handle exceptions and closures of individual registered
event outputs.
Instance of this interface is thread safe, meaning that it can be shared and its method invoked from different threads without causing inconsistent internal state.
Modifier and Type | Method and Description |
---|---|
java.util.concurrent.CompletionStage<?> |
broadcast(OutboundSseEvent event)
Publish an SSE event to all registered
SseEventSink instances. |
void |
close()
Close the broadcaster and all registered
SseEventSink instances. |
void |
close(boolean cascading)
Close the broadcaster and release any resources associated with it.
|
void |
onClose(java.util.function.Consumer<SseEventSink> onClose)
Register a listener, which will be called when this SseBroadcaster closes a given event
SseEventSink or
tries to write to a given SseEventSink that is already closed (either by client closing the connection
or by calling SseEventSink.close() on the server side. |
void |
onError(java.util.function.BiConsumer<SseEventSink,java.lang.Throwable> onError)
Register a listener, which will be called when an exception is thrown by a given
SseEventSink
when this SseBroadcaster tries to write to it or close it. |
void |
register(SseEventSink sseEventSink)
Register provided
SseEventSink instance to this SseBroadcaster . |
void onError(java.util.function.BiConsumer<SseEventSink,java.lang.Throwable> onError)
SseEventSink
when this SseBroadcaster tries to write to it or close it.
This operation is potentially slow, especially if large number of listeners get registered in the broadcaster. The
SseBroadcaster
implementation is optimized to efficiently handle small amounts of concurrent listener
registrations and removals and large amounts of registered listener notifications.
onError
- bi-consumer, taking two parameters: SseEventSink
, which is the source of the error and the
actual Throwable
instance.void onClose(java.util.function.Consumer<SseEventSink> onClose)
SseEventSink
or
tries to write to a given SseEventSink
that is already closed (either by client closing the connection
or by calling SseEventSink.close()
on the server side.
This operation is potentially slow, especially if large number of listeners get registered in the broadcaster. The
SseBroadcaster
implementation is optimized to efficiently handle small amounts of concurrent listener
registrations and removals and large amounts of registered listener notifications.
onClose
- consumer taking single parameter, a SseEventSink
, which was closed.void register(SseEventSink sseEventSink)
SseEventSink
instance to this SseBroadcaster
.sseEventSink
- to be registered.java.util.concurrent.CompletionStage<?> broadcast(OutboundSseEvent event)
SseEventSink
instances.event
- SSE event to be published.void close()
SseEventSink
instances. Any other resources associated with the
SseBroadcaster
should be released. This method is equivalent to calling close(true)
.
Subsequent calls have no effect and are ignored. Once the SseBroadcaster
is closed, invoking any other method
on the broadcaster instance would result in an IllegalStateException
being thrown.
close
in interface java.lang.AutoCloseable
void close(boolean cascading)
SseEventSink
is
controlled by the cascading
parameter.
Subsequent calls have no effect and are ignored. Once the SseBroadcaster
is closed, invoking any other method
on the broadcaster instance would result in an IllegalStateException
being thrown.
cascading
- Boolean value that controls closing of registered SseEventSink
instances.