当前位置: 首页 > 知识库问答 >
问题:

骆驼路线 - 提交作业,轮询响应

唐兴思
2023-03-14

我正在寻找一些关于如何使用骆驼路线实现以下模式的想法:

  1. 客户端通过HTTP restendpoint调用web服务(originalService)
  2. 服务接受服务的主体,并将其作为作业提交给另一个web服务(jobService)。此辅助服务返回作业id。
  3. 使用作业id,originalService轮询jobService的时间不超过x秒。Originalservice将把提交的服务的结果返回给调用者。如果作业耗时超过x秒(jobService没有响应),则originalService将向客户端发送“超时”响应

关于如何使用骆驼路线实现“原始服务”的任何想法?我不想在探测作业服务以获取作业状态时阻塞线程 x 秒。

共有1个答案

景建业
2023-03-14

我突然想到两种方法。

1:程序上

在路线中放置一个具有延迟和固定迭代次数的循环。Psuedo骆驼:

from(myEndpoint)
  to(submitRequest)
  loop(5 times)
    enrich(pollJob, myAggregator)
    choice.when(complete)
      stop
    otherwise
      delay(1000ms)
  endloop

myAggregator需要查看轮询操作的结果以确定作业是否完成,提取结果并设置一个exchange属性以指示成功。如果你从循环的底部掉出来,你已经超过了超时时间。

这里的路线相当明显地说明了发生了什么,但有点做作。

2:定制骆驼组件

您可以构建自己的Camel组件来表示您的服务,这将支持生产者提交作业和完成轮询。您可以在组件内部进行轮询,这样路由会大大简化,例如:

from(myEndpoint)
  to(myComponent:doRequest?interval=1000ms&attempts=5)

如果您想使用其他Camel组件进行REST/SOAP/任何调用,则组件中的生产者可以利用它们,或者如果您愿意,您可以直接使用CXF/任何东西。

当你用尽所有的尝试时,如何实现失败场景取决于你。一个异常是合适的,然后Camel错误处理程序就会介入。

构建自己的组件很简单,也是实现复杂行为的有效方法,而路由有时并不擅长。

 类似资料:
  • 有一条骆驼路线,它被处理,异常由处理。代码如下所示: 它是有效的,并且在错误被处理后,事务有一个提交:,但是然后消息再次被放入输入队列中,事务从头开始(无尽循环)。 我们正在使用IBM MQ,我认为这种回滚是由MQ执行的,而不是从camel路线执行的。所以问题是:我能告诉MQ我处理了异常,并且它不应该再次回滚吗?

  • 我使用Camel JPAendpoint来轮询数据库,并将数据复制到第二个数据库。为了不重复轮询,我打算保存复制数据的最高ID,并且只轮询ID高于该ID的数据。 为了节省一些数据库写入,我希望在当前轮询/复制运行结束后写回最高ID,而不是针对每个数据元素。我可以访问骆驼路线类中的元素(及其ID): 现在我想在当前轮询结束后保存。为此,我用自己的自定义方法重写了,在这里我想访问方法中的(在当前轮询完

  • 问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b

  • 问题内容: 我尝试对Apache骆驼路线进行junit测试。像这样的东西: 构建器类的定义如下 “ myExportRouteProcessor”类仅从JPA存储库中获取一些数据,并将结果放入路由。我想要的是在测试类中触发此路由,以检查整个过程是否正确完成。当前,处理器未启动。我该怎么办? 问题答案: 您可以使用AdviceWithRouteBuilder#replaceFromWith直接替换测

  • 我试着为阿帕奇骆驼路线做一个jUnit测试。类似于这样: builder类的定义如下 myExportRouteProcencer类只是从JPA存储库中获取一些数据,并将结果放入路由。我想要的是在测试类中触发此路由,以检查整个过程是否正确完成。目前,处理器没有被触发。我应该做些什么?

  • 我是Stack Overflow和Apache Camel路由的新手,遇到了一些麻烦。我创建了一个非常简单的SOAP Web服务,它接受一个包含一些随机文本的XML请求,然后在响应中返回相同的字符串。 使用Camel,我能够将请求发送到web服务并获得响应(如果我使用日志组件捕获请求/响应)。 理想情况下,我希望将XML消息(message1.XML、message2.XML、message3.X