我正在寻找一些关于如何使用骆驼路线实现以下模式的想法:
关于如何使用骆驼路线实现“原始服务”的任何想法?我不想在探测作业服务以获取作业状态时阻塞线程 x 秒。
我突然想到两种方法。
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