如何使用 Spring Kafka 清除测试中的主题

How to clear topics in tests with Spring Kafka

我正在用 Spring Kafka 2.4 编写单元测试来证明我的 Spring 启动设置是正确的。我正在验证 SeekToCurrentBatchErrorHandler 是否按预期工作,这需要发送应重试的错误消息。不幸的是,这条不正确的消息会破坏其他测试,因为这条消息将永远重试。

由于以上原因,我想确保正确隔离每个测试。我要么需要:

  1. 删除并重新创建具有 AdminClient

  2. 的 Kafka 主题
  3. 查找现有 Kafka 主题的末尾并提交新的偏移量

我正在尝试使用 Consumer.seekToEnd() 方法的选项 2,但是 Spring Kafka 将创建的消费者隐藏在内部框架的几层后面 类。我也不是 100% 确定是否可以在不同于侦听器线程的测试线程中调用此方法。

使用 Spring Kafka 清除测试中的主题的推荐方法是什么?

最佳做法是在每个测试中使用唯一的主题名称以提供完全隔离;您还可以停止容器,创建一个具有相同 group.id 的新消费者并在那里执行搜索。