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

无法为骆驼计时器创建 MockEndpoint

如何解决无法为骆驼计时器创建 MockEndpoint

我正在使用 Camel Timer 组件从 Azure 存储容器读取 blob。创建的路由将每 10 秒轮询一次 blob,并由 CloudBlobProcessor 处理。

from("timer://testRoute?fixedrate=true&period=10s")
    .to("azure-blob://storageAccountName/storageContainerName?credentials=#credentials")
    .to(CloudBlobProcessor)
    .to("mock:result");

我想通过创建一个类似这样的模拟端点来编写一个测试用例

MockEndpoint timerMockEndpoint = context.getEndpoint("timer://testRoute?fixedrate=true&period=10s",MockEndpoint.class);

但是,我在创建上述模拟端点时收到以下异常。

java.lang.IllegalArgumentException: The endpoint is not of type: 
class org.apache.camel.component.mock.MockEndpoint but is: org.apache.camel.component.timer.TimerEndpoint

下面是我试图跳过发送到原始端点的代码

@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new AdviceWithRouteBuilder() {
  @Override
  public void configure() throws Exception {
    interceptSendToEndpoint("timer://testRoute?fixedrate=true&period=10s").skipSendToOriginalEndpoint()
        .log("Original Batch Endpoint skipped")
        .to("azure-blob://*")
        .to(CloudBlobProcessor).to("mock:result");
    from("timer://testRoute?fixedrate=true&period=10s").to("mock:result");
  }
};
}

解决方法

据我所知,我们正在尝试解决两个不同的问题:

  1. MockEndpoint != TimerEndpoint
  2. 拦截

第一个答案很简单:MockEndpoints 遵循语法 mock:nameTimerEndpoint 是一个不同的端点和一个完全不同的对象。我不知道你在这里打算用 MockEndpoint 做什么,但从技术上讲,我们不能将 TimerEndpoint 对象作为 MockEndpoint 对象。为什么?因为这就是面向对象编程和 Java 的工作方式。

我们来看看第二个问题。我使用 Camel 的经验还不到一年,去年我只使用了一次拦截,但我希望我能指导你一些有用的方向。

拦截的重点是说“不要那样做,而是这样做”。在这个用例中,我们似乎只是试图跳过向 azure-blob 端点发送请求。我会尝试拦截 azure-blob://storageAccountName/storageContainerName?credentials=#credentials

所以,不是你的拦截,我会试着写一个这样的拦截:

interceptSendToEndpoint("azure-blob://storageAccountName/storageContainerName?credentials=#credentials")
    .skipSendToOriginalEndpoint()
    .log("Intercepted!");

在这种情况下,我们拦截该请求,而不是将请求发送到 azure-blob。我们告诉 Camel 跳过发送到原始端点,这意味着不会向 azure-blob://storageAccountName/storageContainerName?credentials=#credentials 发送任何内容。相反,我们将记录“拦截!”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。