Posion小鹏 2023-01-18 18:37 采纳率: 22.2%
浏览 86
已结题

关于Kafka的poll()方法的使用时为什么要用while(true),换成if(true)就没法消费数据的问题

项目中有个短信发送的功能,从客户提供的Kafka中消费数据,拿到这数据后按业务需求进行处理,把处理后的内容以短信的方式发送给客户
这个功能是同事写的,最近项目上线,客户做了个代码评审,发现从Kafka中获取数据(poll方法),使用while循环来实现的,觉得这是死循环,要求整改,查了很多资料都是这么写的,客户说什么也要整改,现在同事离职了,问不到他了

下面是代码

//下面两段代码在同一个类里
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {

        while (true) {
            //启动
            initDedz(khjl, glz);
            //设置当前状态为启动
            is_star = true;
        }
}

void initDedz(BigDecimal khjl, BigDecimal glz){
        // Kafka 获取的流水数据
        List<String> listStr =  KafkaApi.getDEYDJsonList();
        // 处理报文
        List< HashMap> listMap = getJyMap(listStr);
        yyyy=DateUtil.format(new Date(),"yyyy年");
        for(Map map :listMap){
            // 具体的业务处理逻辑,这里就不放了,主要是getDEYDJsonList()这个方法
        }
}

// 这段代码和上面两段代码不在一个Java类里,这段代码在一个叫KafkaApi的类里,kafkaConsumer在这个类里有定义,这里没有贴代码,上面是调用
// 以下就是消费Kafka的逻辑
public static List<String> getDEYDJsonList() {
        List<String> reList = new ArrayList<>();

        try {
            if (kafkaConsumer == null) {
                kafkaConsumer = getKafkaConsumer();
                kafkaConsumer.subscribe(Arrays.asList(HX_KAFKA_TOPCI));
                kafkaConsumer.poll(Duration.ofSeconds(2));
                kafkaConsumer.seekToEnd(kafkaConsumer.assignment());
            }

            ConsumerRecords<String, String> records = kafkaConsumer.poll(Duration.ofMillis(0));
            for (ConsumerRecord<String, String> record : records) {
                reList.add(record.value());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return reList;
    }

Kafka之前没怎么接触过,而且上线的计划给的时间很紧,所以想请教一下社区的朋友;我想要的就是:1:为什么要用while循环,通过poll方法来拉取数据,把while改掉,就消费不到数据了;2:有没有其他方式也可以从Kafka中消费数据
  • 写回答

9条回答 默认 最新

  • 阳光宅男xxb 2023-01-18 18:57
    关注

    我的理解是while循环一直在等待消息,如果不用while消息,消息没有这么快来,就执行完了,后面数据来了,就接不到数据了。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月26日
  • 创建了问题 1月18日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度