骆驼路线 - 提交工作,投票回复

时间:2018-03-15 17:45:59

标签: apache-camel

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

  1. 客户端通过HTTP rest端点调用Web服务(originalService)。
  2. 该服务获取服务的主体并将其作为作业提交给另一个Web服务(jobService)。此辅助服务返回作业ID。
  3. 使用作业ID,originalService轮询jobService的时间不超过x秒。 Originalservice会将提交的服务的结果返回给调用者。如果作业花费的时间超过x秒(没有来自jobService的响应),原始服务将向客户端发送“超时”响应。
  4. 关于如何使用驼峰路线实现“originalService”的任何想法?我在探测jobService以获取作业状态时,我不想阻塞线程x秒。

1 个答案:

答案 0 :(得分:0)

有两种方法可供选择。

1:程序性

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

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

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

这条路线让人们明白发生了什么事,但它有点人为。

2:自定义Camel组件

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

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

组件中的生产者可以利用其他Camel组件,如果您想使用它们来制作REST / SOAP /任何调用,或者您可以根据需要直接使用CXF /。

当您用尽尝试时,由您决定如何实施故障情形。一个例外是合适的,然后Camel错误处理程序将启动。

构建自己的组件非常简单,也是实现复杂行为的有效方式,而这些行为有时并不是很好。