消费者应该接收与生产者发送的消息类型相同的消息,在Spring Kafka中,需要通过设置消费者的反序列化器(Deserializer)与生产者保持一致。
示例代码:
@Configuration @EnableKafka public class KafkaConsumerConfig {
@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;
@Value("${spring.kafka.consumer.group-id}")
private String groupId;
@Bean
public ConsumerFactory consumerFactory() {
Map props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props, new StringDeserializer(),
new JsonDeserializer<>(User.class));
}
@Bean
public ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
@Service public class KafkaConsumer {
@KafkaListener(topics = "user-topic", groupId = "user-group", containerFactory = "kafkaListenerContainerFactory")
public void consume(User user) {
System.out.println("Received user from kafka: " + user);
}
}
在该示例代码中,我们定义了一个名为“user-topic”的Kafka主题,它的消息类型为“User”。通过在Consumer的@KafkaListener注释中指定“user-topic”作为主题,同时设置反序列化器为JsonDeserializer,可以确保消费者将接收到与生产者发送的相同类型的消息。
上一篇:BestPracticesJavaTrustStore
下一篇:BestPracticetocreateTaurusymlforJMeterscriptcontainingseveralthreadgroups