在我有许多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),当我得到其中一个事件时,是否需要人为干预以解决该问题(例如重新启动服务器以重新创建使用者)? 谢谢!
答案 0 :(得分:1)
您可以通过将Mock消费工厂注入容器中来模拟它们。
ConsumerStoppedEvent
容器时,会发出stop()
。ListenerContainerIdleEvent
只是意味着idleEventInterval
中未收到任何记录,因此通常并不意味着有问题。NonResponsiveConsumerEvent
-很难说;对于较旧的客户端,poll()
会在服务器关闭时阻塞,因此我们无法发出空闲事件(或执行任何操作)。我不知道您是否仍然可以与更多的近期客户取得联系;但是要对其进行仿真,您只需要在模拟使用者poll()
方法中阻塞足够长的时间,以使监视任务可以检测到问题并发出事件。