KafkaTemplate是否在Spring引导线程中是安全的。我可以创建一个KafkaTemplate并使用它将信息发送到我的Web服务中的多个请求的相同kafka主题。
是的,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
变量定义来判断,你可以推断它被设计为从多个线程使用,因此它必须是线程安全的(如果不是,那么你应该提交一个bug报告)。
如果设计师用信息@ThreadSafe
注释它或者至少在类的JavaDoc注释中指出这一点会更好。