Class PulsarTransactionsImpl<T>

All Implemented Interfaces:
io.smallrye.reactive.messaging.EmitterType, io.smallrye.reactive.messaging.MessagePublisherProvider<T>, io.smallrye.reactive.messaging.MutinyEmitter<T>, PulsarTransactions<T>

public class PulsarTransactionsImpl<T> extends MutinyEmitterImpl<T> implements PulsarTransactions<T>
  • Constructor Details

    • PulsarTransactionsImpl

      public PulsarTransactionsImpl(io.smallrye.reactive.messaging.EmitterConfiguration config, long defaultBufferSize, PulsarClientService pulsarClientService)
  • Method Details

    • withTransaction

      public <R> io.smallrye.mutiny.Uni<R> withTransaction(Function<TransactionalEmitter<T>,io.smallrye.mutiny.Uni<R>> work)
      Description copied from interface: PulsarTransactions
      Produce records in a Pulsar transaction.

      The given processing function receives a TransactionalEmitter for producing records, and returns a Uni that will provide the result for a successful transaction.

      If this method is called on a Vert.x context, the processing function is also called on that context. Otherwise, it is called on the sending thread of the producer.

      If the processing completes successfully, the producer is flushed and the transaction is committed. If the processing throws an exception, returns a failing Uni, or marks the TransactionalEmitter for abort, the transaction is aborted.

      Specified by:
      withTransaction in interface PulsarTransactions<T>
      Type Parameters:
      R - the return type
      Parameters:
      work - the processing function for producing records.
      Returns:
      the Uni representing the result of the transaction. If the transaction completes successfully, it will complete with the item returned from the work function. If the transaction completes with failure, it will fail with the reason.
    • withTransaction

      public <R> io.smallrye.mutiny.Uni<R> withTransaction(Duration txnTimeout, Function<TransactionalEmitter<T>,io.smallrye.mutiny.Uni<R>> work)
      Description copied from interface: PulsarTransactions
      Produce records in a Pulsar transaction.

      The given processing function receives a TransactionalEmitter for producing records, and returns a Uni that will provide the result for a successful transaction.

      If this method is called on a Vert.x context, the processing function is also called on that context. Otherwise, it is called on the sending thread of the producer.

      If the processing completes successfully, the producer is flushed and the transaction is committed. If the processing throws an exception, returns a failing Uni, or marks the TransactionalEmitter for abort, the transaction is aborted.

      Specified by:
      withTransaction in interface PulsarTransactions<T>
      Type Parameters:
      R - the return type
      Parameters:
      txnTimeout - the timeout of the transaction
      work - the processing function for producing records.
      Returns:
      the Uni representing the result of the transaction. If the transaction completes successfully, it will complete with the item returned from the work function. If the transaction completes with failure, it will fail with the reason.
    • withTransaction

      public <R> io.smallrye.mutiny.Uni<R> withTransaction(org.eclipse.microprofile.reactive.messaging.Message<?> message, Function<TransactionalEmitter<T>,io.smallrye.mutiny.Uni<R>> work)
      Description copied from interface: PulsarTransactions
      Produce records in a Pulsar transaction, by processing the given message exactly-once.

      If the processing completes successfully, before committing the transaction, the topic partition offsets of the given message will be committed to the transaction. If the processing needs to abort, after aborting the transaction, the consumer's position is reset to the last committed offset, effectively resuming the consumption from that offset.

      Specified by:
      withTransaction in interface PulsarTransactions<T>
      Parameters:
      message - the incoming Pulsar message.
      work - the processing function for producing records.
      Returns:
      the Uni representing the result of the transaction. If the transaction completes successfully, it will complete with the item returned from the work function. If the transaction completes with failure, it will fail with the reason.
    • withTransaction

      public <R> io.smallrye.mutiny.Uni<R> withTransaction(Duration txnTimeout, org.eclipse.microprofile.reactive.messaging.Message<?> message, Function<TransactionalEmitter<T>,io.smallrye.mutiny.Uni<R>> work)
      Description copied from interface: PulsarTransactions
      Produce records in a Pulsar transaction, by processing the given message exactly-once.

      If the processing completes successfully, before committing the transaction, the topic partition offsets of the given message will be committed to the transaction. If the processing needs to abort, after aborting the transaction, the consumer's position is reset to the last committed offset, effectively resuming the consumption from that offset.

      Specified by:
      withTransaction in interface PulsarTransactions<T>
      Type Parameters:
      R - type of the return
      Parameters:
      txnTimeout - the timeout of the transaction
      message - the incoming Pulsar message.
      work - function for producing records.
      Returns:
      the Uni representing the result of the transaction. If the transaction completes successfully, it will complete with the item returned from the work function. If the transaction completes with failure, it will fail with the reason.
    • send

      public <M extends org.eclipse.microprofile.reactive.messaging.Message<? extends T>> void send(TransactionalEmitter<?> emitter, M msg)
      Description copied from interface: PulsarTransactions
      Send message to an already started transaction
      Specified by:
      send in interface PulsarTransactions<T>
      Type Parameters:
      M - the type of the message to send
      Parameters:
      emitter - the emitter which holds the transaction
      msg - the message to send
    • send

      public void send(TransactionalEmitter<?> emitter, T payload)
      Description copied from interface: PulsarTransactions
      Send message to an already started transaction
      Specified by:
      send in interface PulsarTransactions<T>
      Parameters:
      emitter - the emitter which holds the transaction
      payload - the payload to send
    • isTransactionInProgress

      public boolean isTransactionInProgress()
      Specified by:
      isTransactionInProgress in interface PulsarTransactions<T>
      Returns:
      true if a transaction is in progress.