Kafka生产者在使用Spring Boot启动时出现错误。

huangapple 未分类评论50阅读模式
英文:

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());
    }
}

Kafka 控制器:

@Controller
public class KafkaController {
    
    @Autowired
    private KafkaTemplate<String, PriceRangeModel> kafkaTemplate;
    
    public void publish() {
        System.out.println("在发布方法中!!!");
        kafkaTemplate.send("kafkaTopic", new PriceRangeModel(100, 90, 100, 115));
        System.out.println("已发布!!!");
    }
}

错误日志:

Exception in thread "main" org.apache.kafka.common.KafkaException: 构造 Kafka 生产者失败
    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>
英文:

My code is working properly if I send string but when I tried with JSON I am getting error message.

Config File :

@Configuration
public class KakfaConfiguration {

	@Bean
	public ProducerFactory&lt;String, PriceRangeModel&gt; produceConofig() {

		Map&lt;String, Object&gt; configs = new HashMap&lt;&gt;();

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

		return new DefaultKafkaProducerFactory&lt;String, PriceRangeModel&gt;(configs);
	}
	
	
	@Bean
	public KafkaTemplate&lt;String, PriceRangeModel&gt; kafkaTemplate(){
		return new KafkaTemplate&lt;String, PriceRangeModel&gt;(produceConofig());
	}
}

Kafka Controller :

@Controller
public class KafkaController {
	
	@Autowired
	private KafkaTemplate&lt;String, PriceRangeModel&gt; kafkaTemplate;
	
	public void publish() {
		System.out.println(&quot;In publish method !!!&quot;);
		kafkaTemplate.send(&quot;kafkaTopic&quot;, new PriceRangeModel(100, 90, 100, 115));
		System.out.println(&quot;Published !!!!!&quot;);
	}

}

Error Log :

Exception in thread &quot;main&quot; org.apache.kafka.common.KafkaException: Failed to construct kafka producer
	at org.apache.kafka.clients.producer.KafkaProducer.&lt;init&gt;(KafkaProducer.java:433)
	at org.apache.kafka.clients.producer.KafkaProducer.&lt;init&gt;(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.&lt;init&gt;(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

&lt;properties&gt;
		&lt;java.version&gt;1.8&lt;/java.version&gt;
	&lt;/properties&gt;

	&lt;dependencies&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
			&lt;artifactId&gt;spring-boot-starter&lt;/artifactId&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.springframework.kafka&lt;/groupId&gt;
			&lt;artifactId&gt;spring-kafka&lt;/artifactId&gt;
		&lt;/dependency&gt;

		&lt;dependency&gt;
			&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
			&lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
			&lt;scope&gt;test&lt;/scope&gt;
			&lt;exclusions&gt;
				&lt;exclusion&gt;
					&lt;groupId&gt;org.junit.vintage&lt;/groupId&gt;
					&lt;artifactId&gt;junit-vintage-engine&lt;/artifactId&gt;
				&lt;/exclusion&gt;
			&lt;/exclusions&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.springframework.kafka&lt;/groupId&gt;
			&lt;artifactId&gt;spring-kafka-test&lt;/artifactId&gt;
			&lt;scope&gt;test&lt;/scope&gt;
		&lt;/dependency&gt;
	&lt;/dependencies&gt;

	&lt;build&gt;
		&lt;plugins&gt;
			&lt;plugin&gt;
				&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
				&lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
			&lt;/plugin&gt;
		&lt;/plugins&gt;
	&lt;/build&gt;

答案1

得分: 0

Got Answer :

我的错误:我使用了"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>
    
英文:

Got Answer :

My mistake : I used "spring-boot-starter" artifactId instead if "spring-boot-starter-web"

  1. In pom.xml, add one of the following dependencies

     &lt;dependency&gt;
         &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
         &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
     &lt;/dependency&gt;
    

OR

    &lt;dependency&gt;
		&lt;groupId&gt;com.fasterxml.jackson.dataformat&lt;/groupId&gt;
		&lt;artifactId&gt;jackson-dataformat-xml&lt;/artifactId&gt;
	&lt;/dependency&gt;

huangapple
  • 本文由 发表于 2020年5月5日 16:57:54
  • 转载请务必保留本文链接:https://java.coder-hub.com/61609406.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定