org.eclipse.microprofile.reactive.messaging

## Annotation Type Acknowledgment

    @Retention(value=RUNTIME)
    public @interface Acknowledgment

Configure the acknowledgement policy for the given `@Incoming`. Reactive Messaging proposes four acknowledgement strategies:

- `MANUAL`: the acknowledgement (positive or negative) is up to the user. This is the default strategy for methods ingesting or producing `Message`.
- `POST_PROCESSING`: acknowledges the incoming message once the produced message is acknowledged. This is the default strategy for methods ingesting or producing single payloads.
- `PRE_PROCESSING`: acknowledges the incoming messages before calling the method.
- `NONE`: do not apply any acknowledgement.

The set of supported acknowledgment policies depends on the method signature. The following list gives the supported strategies for some common use cases.

- `@Incoming("channel") void method(I payload)`: Post-processing (default), Pre-processing, None
- `@Incoming("channel") CompletionStage<?> method(I payload)`: Post-processing (default), Pre-processing, None
- `@Incoming("in") @Outgoing("out") Message<O> method(Message<I> msg)`: , Manual (default), Pre-processing, None
- `@Incoming("in") @Outgoing("out") O method(I payload)`: Post-Processing (default), Pre-processing, None

Note that all messages must be acknowledged. An absence of acknowledgment is considered as a failure. The following table lists the supported strategies (and the default) for each supported signature:

Signature | Default Acknowledgement Strategy | Supported Strategies
--- | --- | ---

     @Incoming("channel")
     Subscriber<Message<I>> method()

Manual

None, Pre-Processing, Post-Processing (when the `onNext` method returns), Manual

     @Incoming("channel")
     Subscriber<I> method()

Post-Processing

None, Pre-Processing, Post-Processing (when the `onNext` method returns)

     @Incoming("channel")
     SubscriberBuilder<Message<I>, Void> method()

Manual

None, Pre-Processing, Post-Processing (when the `onNext` method returns), Manual

     @Incoming("channel")
     SubscriberBuilder<I, Void> method()

Post-Processing

None, Pre-Processing, Post-Processing (when the `onNext` method returns)

     @Incoming("channel")
     void method(I payload)

Post-Processing

None, Pre-Processing, Post-Processing (when the method returns)

     @Incoming("channel")
     CompletionStage<?> method(Message<I> msg)

Manual

None, Pre-Processing, Post-Processing (when the returned `CompletionStage` is completed), Manual

     @Incoming("channel")
     CompletionStage<?> method(I payload)

Post-Processing

None, Pre-Processing, Post-Processing (when the returned `CompletionStage` is completed)

     @Incoming("in")
     @Outgoing("out")
     Processor<Message<I>, Message<O>> method()

Manual

None, Pre-Processing, Manual

     @Incoming("in")
     @Outgoing("out")
     Processor<I, O> method();

Pre-Processing

None, Pre-Processing Post-Processing can be optionally supported by implementations, however it requires a 1:1 mapping between the incoming element and the outgoing element.

     @Incoming("in")
     @Outgoing("out")
     ProcessorBuilder<Message<I>, Message<O>> method();

Manual

None, Pre-Processing, Manual

     @Incoming("in")
     @Outgoing("out")
     ProcessorBuilder<I, O> method();

Pre-Processing

None, Pre-Processing Post-Processing can be optionally supported by implementations, however it requires a 1:1 mapping the incoming element and the outgoing element.

     @Incoming("in")
     @Outgoing("out")
     Publisher<Message<O>> method(Message<I> msg)

Manual

None, Manual, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     Publisher<O> method(I payload)

Pre-Processing

None, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     PublisherBuilder<Message<O>> method(Message<I> msg)

Manual

None, Manual, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     PublisherBuilder<O> method(I payload)

Pre-Processing

None, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     Message<O> method(Message<I> msg)

Manual

None, Manual, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     O method(I payload)

Post-Processing

None, Pre-Processing, Post-Processing (when the message wrapping the produced payload is acknowledged)

     @Incoming("in")
     @Outgoing("out")
     CompletionStage<Message<O>> method(Message<I> msg)

Manual

None, Manual, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     CompletionStage<O> method(I payload)

Post-Processing

None, Pre-Processing, Post-Processing (when the message wrapping the produced payload is acknowledged)

     @Incoming("in")
     @Outgoing("out")
     Publisher<Message<O>> method(Publisher<Message<I>> pub)

Manual

None, Manual, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     PublisherBuilder<Message<O>> method(PublisherBuilder<Message<I>> pub)

Manual

None, Manual, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     Publisher<O> method(Publisher<I> pub)

Pre-Processing

None, Pre-Processing

     @Incoming("in")
     @Outgoing("out")
     PublisherBuilder<O> method(PublisherBuilder<I> pub)

Pre-Processing

None, Pre-Processing

### Required Element Summary

Required Elements
`Acknowledgment.Strategy` `value`

### Element Detail

#### value

    public abstract Acknowledgment.Strategy value

Returns:
  the acknowledgement policy.