kafka@KafkaListener动态监听多topic

配置文件

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值