如何触发和处理这些Spring Kafka事件

时间:2019-05-06 21:45:43

标签: spring-kafka spring-kafka-test

在我有许多Spring Kafka使用者的Spring Boot项目中,我添加了许多事件监听器来监视这些使用者的健康状况。这是代码:

@Component
public class ApplicationContextListeningService {

    @EventListener
    public void handleConsumerPausedEvent(ConsumerPausedEvent event) {
        LOGGER_ERROR.warn(WARNING_KAFKA_CONSUMERPAUSEDEVENT + event.getSource() + LOG_MSG_DELIMITER + event.toString());
    }

    @EventListener
    public void handleConsumerResumedEvent(ConsumerResumedEvent event) {
        LOGGER_ERROR.warn(WARNING_KAFKA_CONSUMERRESUMEDEVENT + event.getSource() + LOG_MSG_DELIMITER + event.toString());
    }

    @EventListener
    public void handleConsumerStoppedEvent(ConsumerStoppedEvent event) {
        LOGGER_ERROR.error(ERROR_KAFKA_CONSUMERSTOPPEDEVENT + event.getSource() + LOG_MSG_DELIMITER + event.toString());
    }

    @EventListener
    public void handleListenerContainerIdleEvent(ListenerContainerIdleEvent event) {
        LOGGER_ERROR.error(ERROR_KAFKA_LISTENERCONTAINERIDLEEVENT + event.getListenerId() + LOG_MSG_DELIMITER + event.toString());
    }

    @EventListener
    public void handleNonResponsiveConsumerEvent(NonResponsiveConsumerEvent event) {
        LOGGER_ERROR.error(ERROR_KAFKA_NONRESPONSIVECONSUMEREVENT + event.getListenerId() + LOG_MSG_DELIMITER + event.toString());
    }

}

有人知道在什么情况下会抛出这些事件(也许我可以手动触发这些事件以进行测试)吗?而且对于最后三个事件(ConsumerStoppedEvent,ListenerContainerIdleEvent和NonResponsiveConsumerEvent),当我得到其中一个事件时,是否需要人为干预以解决该问题(例如重新启动服务器以重新创建使用者)? 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以通过将Mock消费工厂注入容器中来模拟它们。

    当您ConsumerStoppedEvent容器时,会发出
  • stop()
  • ListenerContainerIdleEvent只是意味着idleEventInterval中未收到任何记录,因此通常并不意味着有问题。
  • NonResponsiveConsumerEvent-很难说;对于较旧的客户端,poll()会在服务器关闭时阻塞,因此我们无法发出空闲事件(或执行任何操作)。

我不知道您是否仍然可以与更多的近期客户取得联系;但是要对其进行仿真,您只需要在模拟使用者poll()方法中阻塞足够长的时间,以使监视任务可以检测到问题并发出事件。