public interface ConsumerInterceptor<T> extends AutoCloseable
A primary use case is to hook into consumer applications for custom monitoring, logging, etc.
Exceptions thrown by interceptor methods will be caught, logged, but not propagated further.
Modifier and Type | Method and Description |
---|---|
Message<T> |
beforeConsume(Consumer<T> consumer,
Message<T> message)
This is called just before the message is returned by
Consumer.receive() , MessageListener.received(Consumer,
Message) or the CompletableFuture returned by
Consumer.receiveAsync() completes. |
void |
close()
Close the interceptor.
|
void |
onAcknowledge(Consumer<T> consumer,
MessageId messageId,
Throwable exception)
This is called consumer sends the acknowledgment to the broker.
|
void |
onAcknowledgeCumulative(Consumer<T> consumer,
MessageId messageId,
Throwable exception)
This is called consumer send the cumulative acknowledgment to the broker.
|
void |
onAckTimeoutSend(Consumer<T> consumer,
Set<MessageId> messageIds)
This method will be called when a redelivery from an acknowledge timeout occurs.
|
void |
onNegativeAcksSend(Consumer<T> consumer,
Set<MessageId> messageIds)
This method will be called when a redelivery from a negative acknowledge occurs.
|
void close()
close
in interface AutoCloseable
Message<T> beforeConsume(Consumer<T> consumer, Message<T> message)
Consumer.receive()
, MessageListener.received(Consumer,
Message)
or the CompletableFuture
returned by
Consumer.receiveAsync()
completes.
This method is allowed to modify message, in which case the new message will be returned.
Any exception thrown by this method will be caught by the caller, logged, but not propagated to client.
Since the consumer may run multiple interceptors, a particular
interceptor's
beforeConsume callback will be called in the order specified by
ConsumerBuilder.intercept(ConsumerInterceptor[])
. The first
interceptor in the list gets the consumed message, the following
interceptor will be passed
the message returned by the previous interceptor, and so on. Since
interceptors are allowed to modify message, interceptors may potentially
get the messages already modified by other interceptors. However building a
pipeline of mutable
interceptors that depend on the output of the previous interceptor is
discouraged, because of potential side-effects caused by interceptors
potentially failing to modify the message and throwing an exception.
if one of interceptors in the list throws an exception from
beforeConsume, the exception is caught, logged,
and the next interceptor is called with the message returned by the last
successful interceptor in the list, or otherwise the original consumed
message.
consumer
- the consumer which contains the interceptormessage
- the message to be consumed by the client.void onAcknowledge(Consumer<T> consumer, MessageId messageId, Throwable exception)
Any exception thrown by this method will be ignored by the caller.
consumer
- the consumer which contains the interceptormessageId
- message to ack, null if acknowledge fail.exception
- the exception on acknowledge.void onAcknowledgeCumulative(Consumer<T> consumer, MessageId messageId, Throwable exception)
Any exception thrown by this method will be ignored by the caller.
consumer
- the consumer which contains the interceptormessageId
- message to ack, null if acknowledge fail.exception
- the exception on acknowledge.void onNegativeAcksSend(Consumer<T> consumer, Set<MessageId> messageIds)
Any exception thrown by this method will be ignored by the caller.
consumer
- the consumer which contains the interceptormessageIds
- message to ack, null if acknowledge fail.void onAckTimeoutSend(Consumer<T> consumer, Set<MessageId> messageIds)
Any exception thrown by this method will be ignored by the caller.
consumer
- the consumer which contains the interceptormessageIds
- message to ack, null if acknowledge fail.Copyright © 2017–2020 Apache Software Foundation. All rights reserved.