Apache Camel - JUNIT测试中端点上没有消费者可用

时间:2014-07-29 06:04:16

标签: java spring apache apache-camel junit4

我正在使用Camel 2.13.1并且有一种奇怪的行为。如果我想测试我的路线,我用XML编写。

我总是在一条没有消费者可用的路线上收到消息。如果我在Tomcat上部署它,一切正常。即使在启动时,我也可以看到日志,该日志清楚地表明路由被消耗。

我的路线看起来像这样:

<route id="demo-polling-consumer">
  <from uri="timer:demo-polling?fixedRate=true&amp;period=60s" />
  <to uri="bean:demo?method=selectDemoCustomer" />
  <to uri="direct-vm:demo-get-new-orders" />
  <split>
    <simple>${body}</simple>
    <to uri="direct-vm:demo-get-order-details" />
  </split>
</route>

<route id="epunkt-get-new-jobadverts">
  <from uri="direct-vm:demo-get-order-details" />
  <to uri="bean:demo?method=getOrderDetail" />
</route>

我开始测试:

@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@ContextConfiguration(locations = { "classpath:spring-module.xml" })
public class FirstBirdContextTest {

  @EndpointInject(uri = "mock:out")
  private MockEndpoint mockOut;
  @Produce(uri = "direct:in")
  private ProducerTemplate in;

  @Test
  public void testPayloadIsTransformed() throws InterruptedException, FileNotFoundException, JAXBException {

  }

我基本上只是开始我的春天语境。 spring-module.xml加载了多个camel-context.xml文件。

错误说:

  

org.apache.camel.component.directvm.DirectVmConsumerNotAvailableException:端点上没有可用的消费者:端点[direct-vm:demo-get-order-details]。交换[消息:[[Ljava.lang.Object; @ 6dd62653]]

启动日志说

  

[main] SpringCamelContext INFO Route:orderdetails从以下开始并消耗:Endpoint [direct-vm:demo-get-order-details]

再次。如果我在tomcat上部署它一切正常。

2 个答案:

答案 0 :(得分:0)

这条路线应该有一个,目前缺少的

   <route id="epunkt-get-new-jobadverts">
        <to uri="direct-vm:demo-get-order-details" />
        <to uri="bean:demo?method=getOrderDetail" />
    </route>

答案 1 :(得分:0)

在调用目标路线时设置block=true可以解决该问题,即

<to uri="direct-vm:demo-get-order-details?block=true" />

现在我宁愿假设它在服务器上运行并且可能在服务器上也出现了相同的错误,即当服务器启动并且目标路线尚不可用。通常这不会真的发生......但它可能,所以你的目标路线上的阻挡可能是值得的。