KafkaTemplate线程安全吗?

问题描述 投票:2回答:1

KafkaTemplate是否在Spring引导线程中是安全的。我可以创建一个KafkaTemplate并使用它将信息发送到我的Web服务中的多个请求的相同kafka主题。

spring-boot apache-kafka kafka-producer-api
1个回答
3
投票

是的,KafkaTemplate的设计是线程安全的。如果你查看它的source code,你会看到以下成员变量声明:

protected final Log logger = LogFactory.getLog(this.getClass()); //NOSONAR

private final ProducerFactory<K, V> producerFactory;

private final boolean autoFlush;

private final boolean transactional;

private final ThreadLocal<Producer<K, V>> producers = new ThreadLocal<>();

private RecordMessageConverter messageConverter = new MessagingMessageConverter();

private volatile String defaultTopic;

根据ThreadLocalvolatile变量定义来判断,你可以推断它被设计为从多个线程使用,因此它必须是线程安全的(如果不是,那么你应该提交一个bug报告)。

如果设计师用信息@ThreadSafe注释它或者至少在类的JavaDoc注释中指出这一点会更好。

© www.soinside.com 2019 - 2024. All rights reserved.