配置文件
monitor:
alarm-topics:
topics:
- topic: alarm-test
name: 1
- topic: alarm-test1
name: 2
配置类
@Configuration
@ConfigurationProperties(prefix = "monitor.alarm-topics")
public class KafkaTopicConfig {
private List<TopicConfig> topics;
private List<String> topicList;
private Map<String, String> topicMap;
@PostConstruct
public void init() {
topicMap = topics.stream().collect(Collectors.toMap(TopicConfig::getTopic, TopicConfig::getSystemNo));
topicList = new ArrayList<>(topicMap.keySet());
}
public String getSystemNo(String topic){
return topicMap.getOrDefault(topic,"");
}
public List<TopicConfig> getTopics() {
return topics;
}
public void setTopics(List<TopicConfig> topics) {
this.topics = topics;
}
public List<String> getTopicList() {
return topicList;
}
public void setTopicList(List<String> topicList) {
this.topicList = topicList;
}
public Map<String, String> getTopicMap() {
return topicMap;
}
public void setTopicMap(Map<String, String> topicMap) {
this.topicMap = topicMap;
}
}
kafka监听
@KafkaListener(topics = "#{kafkaTopicConfig.topicList}", groupId = "${.....}", clientIdPrefix = "")
public void listen(List<ConsumerRecord<String, String>> records, Acknowledgment acknowledgment) {
List<KafkaStringMessage> messages = new ArrayList<>();
LOGGER.info("指标消费Listener收到一条消息,本批次共[{}]条", records.size());
for (ConsumerRecord<String, String> record : records) {
KafkaStringMessage kafkaStringMessage = new KafkaStringMessage();
kafkaStringMessage.setTopic(record.topic());
kafkaStringMessage.setPartition(record.partition());
kafkaStringMessage.setOffset(record.offset());
kafkaStringMessage.setValue(record.value());
messages.add(kafkaStringMessage);
}
commonHandler.onMsg(messages);
//自动提交确认
acknowledgment.acknowledge();
}