У меня есть 2 слушателя Kafka ежедневно / еженедельно. Ежедневно имеет autoStartup = true, а Weekly - autoStartup = false. У меня есть конечная точка, чтобы остановить ежедневный запуск и начать еженедельно. После того, как еженедельно закончил прием сообщений, я жду запуска события простоя (установленного на 1 минуту), где останавливаю еженедельно. Теперь я слушаю событие STOP на Weekly, где я начинаю Daily. Проблема в том, что у меня для параллелизма установлено значение 6. Таким образом, я получаю 6 событий простоя и 6 событий остановки. Я поступил так, как показано ниже. Я хотел бы знать, хорошая ли это практика или есть что-нибудь получше?

Я собираю все события остановки Daily в ConcurrentHashMap. Когда он достигает счетчика параллелизма, это означает, что все 6 потоков ежедневного прослушивателя останавливаются и могут запускать еженедельный прослушиватель.

private void processDailyStopEvent(ConsumerStoppedEvent event)
    {
        LOGGER.info("Processing DAILY Stop events");
        KafkaMessageListenerContainer source = (KafkaMessageListenerContainer) event.getSource();
        ConcurrentMessageListenerContainer container = (ConcurrentMessageListenerContainer) event.getContainer(ConcurrentMessageListenerContainer.class);

        eventMap.get(“dailyStop”).add(source.getListenerId());
        LOGGER.info("Added ListenerId {} to Map<dailyStop>", source.getListenerId());

        if (eventMap.get(“dailyStop”).size() == container.getConcurrency()) {
            LOGGER.info("All DAILY Stop events are captured. Clearing the Map<dailyStop>");
            eventMap.get(“dailyStop”).clear();

            LOGGER.info("Starting WEEKLY Consumer now.");
            kafkaService.startWeeklyConsumer();
        }
    }


0
iluvgarden 16 Апр 2020 в 08:12

1 ответ

Лучший ответ

У вас есть разумный подход.

В качестве альтернативы вы можете просто дождаться события остановки параллельного контейнера (где источник равен контейнеру) - оно публикуется после остановки всех дочерних контейнеров.

0
Gary Russell 16 Апр 2020 в 13:53