微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

骆驼 kafka 主题中的 spring-cloud-contract-verifier 清理消息

如何解决骆驼 kafka 主题中的 spring-cloud-contract-verifier 清理消息

在合约测试期间,我运行 main FLOW,它会在不同的 kafka 主题TOPIC_1TOPIC_2)中生成 2 个事件。我有两个不同的测试来检查此事件的发送(TEST_1 用于 TOPIC_1TEST_2 用于 TOPIC_2)。所以 TEST_1TEST_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 举报,一经查实,本站将立刻删除。