簡體   English   中英

使用 Spring Boot 啟動 Kafka 生產者時出錯

[英]Error while staring Kafka producer with Spring Boot

如果我發送字符串,我的代碼可以正常工作,但是當我嘗試使用 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:

@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

密碼.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>

得到答案:

我的錯誤:如果使用“spring-boot-starter-web”,我使用“spring-boot-starter”artifactId

  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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM