我正在寻找有关如何使用驼峰路线实现以下模式的一些想法:
关于如何使用驼峰路线实现“originalService”的任何想法?我在探测jobService以获取作业状态时,我不想阻塞线程x秒。
答案 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错误处理程序将启动。
构建自己的组件非常简单,也是实现复杂行为的有效方式,而这些行为有时并不是很好。