Class MessageBatch<T>

java.lang.Object
io.helidon.messaging.MessageBatch<T>
Type Parameters:
T - payload type
All Implemented Interfaces:
Iterable<Message<T>>

public final class MessageBatch<T> extends Object implements Iterable<Message<T>>
Immutable ordered delivery batch.

Every messaging delivery is a batch. Single-message APIs create a singleton batch at their boundary, while the runtime, routes, processors, failure policies, and connectors retain the batch abstraction. A batch is a delivery and performance boundary, not a transaction.

Framework-derived batches preserve the opaque delivery identity and stable item lineage. This lets retry and dead-letter outcomes be mapped without relying on message-envelope object identity.

See Also:
  • Field Details

    • MAX_ID_LENGTH

      public static final int MAX_ID_LENGTH
      Maximum opaque identity length.
      See Also:
  • Method Details

    • create

      public static <T> MessageBatch<T> create(List<? extends Message<? extends T>> messages)
      Create an immutable batch by copying the supplied message list.
      Type Parameters:
      T - payload type
      Parameters:
      messages - ordered, non-empty messages
      Returns:
      immutable batch
    • create

      public static <T> MessageBatch<T> create(Message<? extends T> message)
      Create an immutable singleton batch.
      Type Parameters:
      T - payload type
      Parameters:
      message - message
      Returns:
      singleton batch
    • builder

      public static <T> MessageBatchConfig.Builder<T> builder()
      Create a batch builder.
      Type Parameters:
      T - payload type
      Returns:
      builder for batch construction options
    • id

      public String id()
      Opaque delivery correlation ID shared by framework-derived batches.

      ID equality alone does not establish common delivery lineage.

      Returns:
      stable, non-blank identity no longer than MAX_ID_LENGTH
    • messages

      public List<Message<T>> messages()
      Ordered immutable message snapshot.
      Returns:
      messages
    • payloads

      public List<T> payloads()
      Ordered immutable payload snapshot, materialized lazily.

      Concurrent initial callers may each read the message entities. The first successfully published snapshot is retained, and every successful caller returns that same snapshot. A failed materialization is not retained.

      Returns:
      payloads
      Throws:
      MessagingException - if any message cannot expose its payload
      NullPointerException - if any message returns a null payload
    • size

      public int size()
      Number of messages.
      Returns:
      message count
    • get

      public Message<T> get(int index)
      Message at an index.
      Parameters:
      index - message index
      Returns:
      message
    • subset

      public MessageBatch<T> subset(List<Integer> indexes)
      Create an ordered retry or routing subset while preserving delivery identity and item lineage.
      Parameters:
      indexes - strictly increasing local indexes
      Returns:
      derived subset
    • derive

      public <R> MessageBatch<R> derive(List<? extends Message<? extends R>> derivedMessages)
      Internal generated-code operation that creates a one-to-one transformed batch while preserving delivery identity and item lineage.
      Type Parameters:
      R - derived payload type
      Parameters:
      derivedMessages - one derived message for every current item
      Returns:
      derived batch
    • iterator

      public Iterator<Message<T>> iterator()
      Specified by:
      iterator in interface Iterable<T>