【问题标题】:Error while staring Kafka producer with Spring Boot使用 Spring Boot 盯着 Kafka 生产者时出错
【发布时间】:2020-05-05 08:57:54
【问题描述】:

如果我发送字符串,我的代码可以正常工作,但是当我尝试使用 JSON 时,我收到了错误消息。

配置文件:

@Configuration
public class KakfaConfiguration {

    @Bean
    public ProducerFactory<String, PriceRangeModel> produceConofig() {

        Map<String, Object> configs = new HashMap<>();

        configs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");
        configs.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        configs.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);

        return new DefaultKafkaProducerFactory<String, PriceRangeModel>(configs);
    }


    @Bean
    public KafkaTemplate<String, PriceRangeModel> kafkaTemplate(){
        return new KafkaTemplate<String, PriceRangeModel>(produceConofig());
    }
}

卡夫卡控制器:

@Controller
public class KafkaController {

    @Autowired
    private KafkaTemplate<String, PriceRangeModel> kafkaTemplate;

    public void publish() {
        System.out.println("In publish method !!!");
        kafkaTemplate.send("kafkaTopic", new PriceRangeModel(100, 90, 100, 115));
        System.out.println("Published !!!!!");
    }

}

错误日志:

Exception in thread "main" org.apache.kafka.common.KafkaException: Failed to construct kafka producer
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:433)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:287)
    at org.springframework.kafka.core.DefaultKafkaProducerFactory.createRawProducer(DefaultKafkaProducerFactory.java:489)
    at org.springframework.kafka.core.DefaultKafkaProducerFactory.createKafkaProducer(DefaultKafkaProducerFactory.java:404)
    at org.springframework.kafka.core.DefaultKafkaProducerFactory.createProducer(DefaultKafkaProducerFactory.java:391)
    at org.springframework.kafka.core.KafkaTemplate.getTheProducer(KafkaTemplate.java:463)
    at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:401)
    at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:216)
    at com.example.demo.KafkaController.publish(KafkaController.java:15)
    at com.example.demo.JsonProducerApplication.main(JsonProducerApplication.java:14)
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
    at java.lang.Class.getConstructor0(Class.java:3075)
    at java.lang.Class.getDeclaredConstructor(Class.java:2178)
    at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:321)
    at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:370)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:368)
    ... 9 more
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 16 more

Pom.xml

<properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

【问题讨论】:

  • 您使用的是 java 9 或更高版本吗?
  • 尝试将 jackson-databind 添加到您的类路径。
  • 是的,通过添加 jackson-dabind 来工作。

标签: java spring-boot apache-kafka spring-kafka


【解决方案1】:

得到答案:

我的错误:我使用“spring-boot-starter” artifactId 代替“spring-boot-starter-web”

  1. 在 pom.xml 中,添加以下依赖项之一

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2021-09-22
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2018-12-15
    • 2018-05-27
    • 2019-05-09
    相关资源
    最近更新 更多