Vin*_*Vin 4 apache-kafka kafka-consumer-api spring-kafka
我知道要使方法成为 Kafka 消息侦听器的目标,我必须使用 @KafkaListener 注释标记此方法。此注释允许通过 containerFactory 元素指定 KafkaListenerContainerFactory。
下面是 Baeldung Spring Kafka 教程的一些片段。
KafkaConsumerConfig.java
private ConsumerFactory<String, String> consumerFactory(String groupId) {
Map<String, Object> props = new HashMap<>();
...
return new DefaultKafkaConsumerFactory<>(props);
}
private ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory(String groupId) {
ConcurrentKafkaListenerContainerFactory<String, String> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory(groupId));
return factory;
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> fooKafkaListenerContainerFactory() {
return kafkaListenerContainerFactory("foo");
}
Run Code Online (Sandbox Code Playgroud)
消息监听器.java
@KafkaListener(
topics = "${message.topic.name}",
groupId = "foo",
containerFactory = "fooKafkaListenerContainerFactory")
public void listenGroupFoo(String message) {
System.out.println("Received Message in group 'foo': " + message);
...
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么我们需要一个监听器容器工厂。什么是侦听器容器?当以这种方式注释方法时会发生什么?
侦听器“容器”是跨多种技术(JMS、RabbitMQ、Kafka、AWS 等)的 Spring 概念。
监听器被定义为一个 POJO bean 方法并且是容器的一个属性(容器“包含”监听器)。
容器负责与代理交互以接收消息并根据侦听器类型对每条消息或一批消息调用您的侦听器方法。
这意味着您的应用程序代码不必处理与代理交互的机制,您可以只专注于您的业务逻辑。
该框架发现任何@KafkaListener方法并使用工厂为每个方法创建一个容器。
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |