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



我使用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-context。spring-module.xml加载多个camel-context.xml文件。

错误提示:

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

启动日志显示

[main] SpringCamelContext INFO Route: orderdetails started and consuming from: Endpoint[direct-vm:demo-get-order-details]

。如果我把它部署到tomcat上,一切都可以正常工作。

这个路由应该有一个from,这个from目前缺少

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

在调用目标路由时设置block=true可能会解决这个问题,即

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

现在我宁愿假设这只是巧合,它在服务器上工作,并且可能有一个小的机会,它也会在服务器上给出相同的错误,即当服务器启动时,目标路由还不可用。通常这不会真的发生……但它可以,所以阻塞你的目标路线可能是值得的。

最新更新