NotifyBuilder.matches()总是超时

时间:2019-01-16 04:00:10

标签: apache-camel

我想验证Camel路由定义中内置的重试逻辑。

from(somewhere)
.errorHandler(
   defaultErrorHandler()
   .log("something")
   .maxRedeliveries(3)
 )
.to(somewhere-else)

为此,我故意编写了一个测试引发异常。

int counter = 0;
@Test
public void simulateError() throws Exception {
  NotifyBuilder nb = new NotifyBuilder(mock.getCamelContext()).whenDone(3).create();
  mock.whenAnyExchangedReceived(
    new Processor() {
      @Override
      public void process(Exchange exchange) throws Exception {
        counter++;
        throw new FooException("Error during processing: " + counter);
      }
    }
  );
  template.sendBody(somewhere, "some message");
  boolean matches = nb.matches(8, TimeUnit.SECONDS);
  assertEquals("Exception raised", 3, counter);
}

现在可以正常工作了。但是,如果我通过添加

matches上断言
assertTrue(matches)

失败。换句话说,NotifyBuilder的匹配条件永远不会得到满足,并且总是超时。

那是为什么?是因为重试不算作exchange交货吗?

测试重新尝试尝试预期次数的规范方法是什么?

1 个答案:

答案 0 :(得分:0)

结束循环并回答我自己的问题。

首先-实际上,重试不会计入完成消息。

正如克劳斯·易卜生所指出的那样,首选的(最短的)解决方案是验证该模拟程序是否接收了预期的消息数。那将是0(在我的例子中是4)。所以工作代码看起来像

max_retries + 1