【问题标题】:spring-cloud-contract-verifier cleanup messages in camel kafka topics骆驼kafka主题中的spring-cloud-contract-verifier清理消息
【发布时间】:2021-07-28 18:13:01
【问题描述】:

在合约测试期间,我运行 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

【问题讨论】:

    标签: java apache-kafka apache-camel spring-cloud-contract


    【解决方案1】:

    我找到了一个解决方案,可以轮询来自 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);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 1970-01-01
      • 2018-07-18
      • 2013-01-24
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多