@Target(value={TYPE,METHOD,ANNOTATION_TYPE})
@Retention(value=RUNTIME)
@MessageMapping
@Documented
@Repeatable(value=KafkaListeners.class)
public @interface KafkaListener
Annotation that marks a method to be the target of a Kafka message listener on the specified topics.
The containerFactory()
identifies the KafkaListenerContainerFactory
to use to build the Kafka listener container. If not set, a default container factory is assumed to be available with a bean name of kafkaListenerContainerFactory
unless an explicit default has been provided through configuration.
Processing of @KafkaListener
annotations is performed by registering a KafkaListenerAnnotationBeanPostProcessor
. This can be done manually or, more conveniently, through EnableKafka
annotation.
Annotated methods are allowed to have flexible signatures similar to what MessageMapping
provides, that is
ConsumerRecord
to access to the raw Kafka messageAcknowledgment
to manually ack@Payload
-annotated method arguments including the support of validation@Header
-annotated method arguments to extract a specific header value, defined byKafkaHeaders
@Headers
-annotated argument that must also be assignable toMap
for getting access to all headers.MessageHeaders
arguments for getting access to all headers.MessageHeaderAccessor
for convenient access to all method arguments.
When defined at the method level, a listener container is created for each method. The MessageListener
is a MessagingMessageListenerAdapter
, configured with a MethodKafkaListenerEndpoint
.
When defined at the class level, a single message listener container is used to service all methods annotated with @KafkaHandler
. Method signatures of such annotated methods must not cause any ambiguity such that a single method can be resolved for a particular inbound message. The MessagingMessageListenerAdapter
is configured with a MultiMethodKafkaListenerEndpoint
.
Author:Gary Russell, Venil NoronhaSee Also:EnableKafka
, KafkaListenerAnnotationBeanPostProcessor
, KafkaListeners