ApacheKafka—为什么SpringKafkaTemplate不将其示例变量“messageconverter”设置为volatile?

dw1jzc5e  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(379)

我在阅读SpringKafkaTemplate(org.springframework.kafka.core)的源代码时遇到了以下代码:

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;

private volatile ProducerListener<K, V> producerListener = new LoggingProducerListener<K, V>();

如您所见,像defaulttopic和producerlistener这样的变量被设置为volatile,我认为这会使它们在被更改时在内存中可见。
所以我很困惑为什么meesageconverter没有设置为相同的值。

js4nwp54

js4nwp541#

我们通常不希望配置属性(例如消息转换器)在运行时发生更改,因此不需要使其变得易变。如果您有这样的需求,那么可以对模板进行子类化,并使用 synchronized 方法(调用 super.set...() ).
您正在查看代码的旧版本;这些变量不再是 volatile .

相关问题