如何将骆驼路线处理与Java应用程序同步?

时间:2018-07-24 13:44:23

标签: apache-camel

我有一个Java应用程序,该程序将一系列测试消息从测试注入器发送到目标“服务”。消息传输和数据格式的手段由第三方“服务总线”处理。我正在尝试使用Camel协助捕获消息(从服务总线发送),修改捕获的消息并转发到目标。以下是处理流程的概述:

Read and parse XML message
For each element or attribute
  Determine a set of test cases to use
  For each test case
    Send message via service bus
    Intercept message (via Camel)
    Replace original element/attribute content with test data
    Forward message to target

执行此操作的方法是,我编写了如下的骆驼路线:

interceptSendToEndpoint(destURI).process(interceptor);
from(sourceURI).to(destURI);

拦截器是org.apache.camel.Processor的扩展。 process()方法检索交换主体,并通过我从测试注入器传递给拦截器的信息(我们称为发现数据)对消息进行修改。 process()方法检查是否已设置发现数据,否则返回。如果发现数据不为空,则执行修改并将修改后的数据放回交换主体中。然后在拦截器中将发现数据设置为null。

问题

除了第一个测试用例之外,所有这些似乎都可以按我的需要工作。在这种情况下,process()始终报告发现数据为空,即使我总是在调用服务总线发送消息之前将发现数据设置为拦截器。

我的怀疑是,我正在超速运行一个先前的测试用例,而在下一个测试用例出现之前,它还没有“很快”收到并处理过,因此无法进行测试。我需要某种方法让注入器逻辑等待,直到Camel截获先前测试用例的数据,对其进行处理并将其转发到目标。

我正在寻找有关如何解决该问题的建议。我对Camel的了解不足,无法知道可以使用哪些(如果有)机制。

谢谢

0 个答案:

没有答案