如何解决骆驼 kafka 主题中的 spring-cloud-contract-verifier 清理消息
在合约测试期间,我运行 main FLOW
,它会在不同的 kafka 主题(TOPIC_1
和 TOPIC_2
)中生成 2 个事件。我有两个不同的测试来检查此事件的发送(TEST_1
用于 TOPIC_1
,TEST_2
用于 TOPIC_2
)。所以 TEST_1
和 TEST_2
都运行相同的 FLOW
,对于 TEST_1
,我有将事件发送到 TOPIC_2
的副作用,对于 TEST_2
- TOPIC_1
。考虑示例,我先运行 TEST_1
,然后运行 TEST_2
。在 TEST_2
期间,我将在 TOPIC_2
中有 2 个事件 - 一个由 TEST_1
生成,第二个由 TEST_2
生成。当然,我的 TEST_2
会失败,因为在验证过程中它假设接收消息,由他自己生成,没有别的。
所以,这就是为什么我需要在每次测试之前跳过所有主题中的所有旧消息。如何使用 org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging
解决方法
我找到了一个解决方案,我在 CamelContext 中轮询来自每个端点的所有消息
@Autowired
private org.apache.camel.CamelContext camelContext;
@org.junit.Before
public void cleanUpCamelEndpoints() {
for (Endpoint endpoint : camelContext.getEndpoints()) {
try {
PollingConsumer pollingConsumer = endpoint.createPollingConsumer();
Exchange exchangeToSkip;
while ((exchangeToSkip = pollingConsumer.receiveNoWait()) != null) {
log.debug("Skipped side effect exchange: {}",exchangeToSkip);
}
} catch (Exception exception) {
log.debug("Exception while receive exchange to skip: " + exception);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。