我有一个基于动态cahce的配置创建Kafka生产者的类。配置几乎是固定的,但是现在我们正在研究如果运行时更改了配置的重新初始化 Kafka生产者的可能性。 缓存基本上是一个HashMap,可从数据库中定期刷新。
我现在要做的是在发送消息之前检查Cache,如果值更改了,请调用具有双重检查锁定的init()方法。
private volatile String config;
init(){
...
}
sendMessage(String message, String topic){
if(config != Cahce.config())
synchronized(){
if(config != Cahce.config())
init();
}
}
我已经在开发环境中对其进行了测试,它似乎可以正常工作,并且单元测试是一件痛苦的事情(很多模拟)。我目前也在修改它,以便将init()部分移至Factory。
我想检查实施是否可以做得更好?
我也在这一行看到一个声纳警告:
private volatile String config;