我们使用Spring Cloud Stream Kafka Binder(与Project Reactor集成,即
Flux
streams)
和manual offset commits
(即autoCommitOffset = false
)。
我们正在尝试使用Embedded Kafka from spring-kafka-test编写集成测试 可以通过使用admin client手动读取使用者组偏移量来断言这一切正常, 测试前后会向我们的主题发送消息。
测试间歇性失败。现在,我们使用awaitility等待最多10秒钟,以轮询偏移量, 这似乎可以解决我们的大多数问题,因为偏移量会在7秒钟后发生变化-但这对于测试而言并不令人满意。
一旦我们通过调用Acknowledgement.acknowledge()
手动确认消息接收后,是否有办法确保Spring Cloud Stream Kafka Binder将立即写入偏移量更改?
以不同的方式输入:我们如何验证acknowledge
是否在我们的测试中被调用而不必等待?
我们使用Kotlin,Mockito和Mockito-kotlin,因此无法使用PowerMockito。
答案 0 :(得分:2)
问题是class Child: Parent {
constructor(name: String, age: Int): super(name, age)
constructor(isAlive: Boolean): super(isAlive)
}
不是线程安全的。提交必须在容器线程上完成。如果使用者在确认后坐在Consumer
内,则必须等待多达poll()
才会提交偏移。
默认pollTimeout
为5秒。
您可以添加pollTimeout
ListenerContainerCustomizer
来修改@Bean
。