【问题标题】:How to call the Properties Method and set it into the main class?如何调用属性方法并将其设置到主类中?
【发布时间】:2021-09-30 06:06:42
【问题描述】:

已经没有错误,但是当我运行程序时,它无法识别另一个类中的序列化程序。这是它的样子。

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());
        // The code above should run and call the PropConfigs (properties of kafka)

        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);
                        e.printStackTrace();
                    }
                }
            });
        }

        logger.info("Finished - Closing Kafka Producer.");
        producer.flush();
        producer.close();

    }
}

这是 PropConfigs 类,我将要从主类 Producer 调用的属性放在其中。

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);
    }

}

每当我运行它时,就像我说的那样,它无法识别我设置的属性。

【问题讨论】:

  • 您是否在主应用程序类中使用@EnableConfiguration 注解。它无法识别这些属性,因为您已经设置了它们并且没有告诉 spring 它需要选择这些配置。
  • 怎么做?你在上面看到的是代码
  • 需要设置 props.put(ProducerConfig.ACKS_CONFIG, "all");
  • 如果可以的话,请将整个项目push到github,我也可以帮你调试。
  • @GurkiratSinghGuliani 这不是春天

标签: java apache-kafka properties kafka-producer-api


【解决方案1】:

你的意思是它无法识别prodProps方法? (这里没有自定义序列化程序)。注意:你可以有这个return props

您没有显示导入语句,但请确保类在同一个包中(而不是默认包,或者没有包)


如果你真的想外化属性,Spring-Boot / Spring-Kafka 是常用的

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 2021-12-27
    • 2014-09-27
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多