Package org.agrona.concurrent.broadcast
Class BroadcastReceiver
java.lang.Object
org.agrona.concurrent.broadcast.BroadcastReceiver
Receive messages broadcast from a
BroadcastTransmitter via an underlying buffer. Receivers can join
a transmission stream at any point by consuming the latest message at the point of joining and forward.
If a Receiver cannot keep up with the transmission stream then loss will be experienced. Loss is not an error condition.
Note: Each Receiver is not threadsafe but there can be zero or many receivers to a transmission stream.
-
Constructor Summary
ConstructorsConstructorDescriptionBroadcastReceiver(AtomicBuffer buffer) Construct a new broadcast receiver based on an underlyingAtomicBuffer. -
Method Summary
Modifier and TypeMethodDescriptionbuffer()The underlying buffer containing the broadcast message stream.intcapacity()Get the capacity of the underlying broadcast buffer.longGet the number of times the transmitter has lapped this receiver around the buffer.intlength()The length of the next message in the transmission stream.intoffset()The offset for the beginning of the next message in the transmission stream.booleanNon-blocking receive of next message from the transmission stream.inttypeId()Type of the message received.booleanvalidate()Validate that the current received record is still valid and has not been overwritten.
-
Constructor Details
-
BroadcastReceiver
Construct a new broadcast receiver based on an underlyingAtomicBuffer. The underlying buffer must a power of 2 in size plus sufficient space for theBroadcastBufferDescriptor.TRAILER_LENGTH.- Parameters:
buffer- via which messages will be exchanged.- Throws:
IllegalStateException- if the buffer capacity is not a power of 2 plusBroadcastBufferDescriptor.TRAILER_LENGTHin capacity.
-
-
Method Details
-
capacity
public int capacity()Get the capacity of the underlying broadcast buffer.- Returns:
- the capacity of the underlying broadcast buffer.
-
lappedCount
public long lappedCount()Get the number of times the transmitter has lapped this receiver around the buffer. On each lap as least a buffer's worth of loss will be experienced.Note: This method is threadsafe for calling from an external monitoring thread. It will not provide any ordering guarantees with respect to loads/stores to other addresses.
- Returns:
- the capacity of the underlying broadcast buffer.
-
typeId
public int typeId()Type of the message received.- Returns:
- typeId of the message received.
-
offset
public int offset()The offset for the beginning of the next message in the transmission stream.- Returns:
- offset for the beginning of the next message in the transmission stream.
-
length
public int length()The length of the next message in the transmission stream.- Returns:
- length of the next message in the transmission stream.
-
buffer
The underlying buffer containing the broadcast message stream.- Returns:
- the underlying buffer containing the broadcast message stream.
-
receiveNext
public boolean receiveNext()Non-blocking receive of next message from the transmission stream.If loss has occurred then
lappedCount()will be incremented. -
validate
public boolean validate()Validate that the current received record is still valid and has not been overwritten.If the receiver is not consuming messages fast enough to keep up with the transmitter then loss can be experienced resulting in messages being overwritten thus making them no longer valid.
- Returns:
- true if still valid otherwise false.
-