在使用kafka的时候,要动态指定topic,如果没有指定,就读取默认的值。这边使用“:”就可以了。autoStartup 是否开启,默认关闭;需要的时候,设置为true。
yml的配置
kafka:
topic: SERVICE_DATA_ERRAND_TEST
autostartup: false
consumer:
bootstrap-servers: xxx
group-id: DATA_GROUP
max-poll-records: 5
listener:
concurrency: 1
代码:
@Configuration
public class KafkaDataListener {
private static Logger LOGGER = LoggerFactory.getLogger(KafkaDataListener.class);
@KafkaListener(topics = {
"${kafka.topic:SERVICE_DATA_ERRAND}"}, autoStartup = "${kafka.autoStartup:false}")
public void listen(ConsumerRecord<?, ?> consumerRecord, Acknowledgment ack) {
Optional<?> kafkaMessage = Optional.ofNullable(consumerRecord.value());
LOGGER.info("kafkaMessage.isPresent() = " + kafkaMessage.isPresent());
if (kafkaMessage.isPresent()) {
String message = (String) kafkaMessage.get();
LOGGER.info("kafkaMessage accept:" + message);
try {
// 处理数据
LOGGER.info("kafkaMessage acknowledge finished");
ack.acknowledge();
LOGGER.info("kafkaMessage handle finished");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
kafka.topic:SERVICE_DATA_ERRAND 优先读取kafka.topic 的配置,如果yml没有对应kafka的配置topic为SERVICE_DATA_ERRAND。同理autoStartup也一样
总结:
时间久了,会忘记,借此记录下。