春天启动线程中的KafkaTemplate是否安全。我是否可以创建一个KafkaTemplate并使用它将信息发送到我的Web服务中的多个请求的相同kafka主题。
答案 0 :(得分: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;
根据ThreadLocal
和volatile
变量定义来判断,你可以推断它被设计为从多个线程使用,因此它必须是线程安全的(如果不是,那么你应该提交错误报告)。
如果设计师使用信息@ThreadSafe
对其进行注释,或者至少在课堂上的JavaDoc评论中指出这一点,那就更好了。
答案 1 :(得分:0)
与DefaultKafkaProducerFactory一起使用时,KafkaTemplate完全是线程安全的(请参见KafkaTemplate doc)。
KafkaProducer本身是线程安全的(请参见KafkaProducer doc)。