Annotation Type Acknowledgment


  • @Retention(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