【发布时间】:2021-09-30 05:03:38
【问题描述】:
我一直在尝试使用抽象 OOP 来外部化属性代码,这样我就可以将它调用到生产者类,但我似乎无法调用它。这是代码,任何帮助将不胜感激。
public class Producer{
private static final Logger logger = LogManager.getLogger(Producer.class);
public static void main(String[] args) {
logger.info("Creating Kafka Producer...");
KafkaProducer<Integer, String> producer = new KafkaProducer<>(PropConfigs().prodProps());
logger.info("Start sending messages...");
for (int i = 1; i <= AppConfigs.numEvents; i++) {
producer.send(new ProducerRecord<>(AppConfigs.topicName, i, "Message " + i + " Test"), new Callback() {
@Override
public void onCompletion(RecordMetadata recordMetadata, Exception e) {
if(e == null){
logger.info("\nReceived metadata" + " Topic:" + recordMetadata.topic() + " Partition: " + recordMetadata.partition() + " Offset: " + recordMetadata.offset() + " Time: " + recordMetadata.timestamp() + "\n");
} else {
logger.error("Error", e);
}
}
});
}
logger.info("Finished - Closing Kafka Producer.");
producer.flush();
producer.close();
}
}
我想将所有 props.setProperty 转移到不同的类,然后将其调用到生产者类。这就是我想做的:
package org.timothy.producer.common;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.IntegerSerializer;
import org.apache.kafka.common.serialization.StringSerializer;
import java.util.Properties;
public class PropConfigs {
public static Properties prodProps(){
Properties props = new Properties();
props.setProperty(ProducerConfig.CLIENT_ID_CONFIG, AppConfigs.applicationID);
props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, AppConfigs.bootstrapServers);
props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, IntegerSerializer.class.getName());
props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.setProperty(ProducerConfig.ACKS_CONFIG, "all");
props.setProperty(ProducerConfig.RETRIES_CONFIG, "3");
props.setProperty(ProducerConfig.MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION, "5");
return new Properties(props);
}
}
我怎样才能把它称为主类?或者也许将其应用于:
属性 props = new Properties();
KafkaProducer
【问题讨论】:
-
你只需要让
ProdProps()创建一个新的Properties实例并返回它,如果我理解你想要做的正确的话。 -
我试过了,但是 KafkaProducer
producer = new KafkaProducer(props);从主类无法识别道具。既然已经外化了
标签: java oop intellij-idea apache-kafka abstraction