没有弹簧靴的春天卡夫卡消费者不消费信息 [英] Spring Kafka Without spring boot consumer not consuming messages
本文介绍了没有弹簧靴的春天卡夫卡消费者不消费信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用Spring的Java Configer类的消费者如下:
@Configuration
@EnableKafka
public class KafkaConfig {
public static final String TOPIC = "test-1";
private String bootstrapServers = "localhost:9092";
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
@Bean
public ConsumerFactory<String, String> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ConsumerConfig.GROUP_ID_CONFIG, "group");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
return props;
}
使用@KafkaListener注释的Kafka主题监听器如下:
@Component
public class MessageListener {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageListener.class);
@KafkaListener(topics = KafkaConfig.TOPIC)
public void handle(ConsumerRecord<?, ?> cr) {
LOGGER.info("Message: "+cr.key()+"="+cr.value());
}
}
我的POM包含依赖关系:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
现在,当我打包到WAR并部署到Tomcat时,它不会显示任何错误,甚至在调试模式下也不会显示任何错误,只是部署WAR而不部署任何东西。
请帮助我了解是否缺少触发kafkalistner的某些配置。
谢谢Gary我添加了context.xml和web.xml,但我收到了以下注释中提到的Bean错误
Web.XML
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring Web MVC Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
Conext.XML
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<context:component-scan base-package="com.mkyong.common.controller.*" />
<context:annotation-config></context:annotation-config>
</beans>
推荐答案
问题是,Spring默认使用XmlWebApplicationContext,所以我不得不显式地告诉Spring通过使用Java类作为Bean定义的输入而不是XML文件来为Web应用程序创建应用程序上下文。
下面是对context.xml所做的更改。这对我很管用。`
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.test.common.controller.KafkaConfig</param-value>
</context-param>`
这篇关于没有弹簧靴的春天卡夫卡消费者不消费信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文