我使用Camel 2.13.1,有一个奇怪的行为。如果我想测试我的路由,我已经用XML编写了。
我总是在一条路由上得到没有消费者可用的消息。如果我将它部署到Tomcat上,一切都会正常工作。即使在启动时,我也可以看到日志,清楚地说明路由已被消耗。
我的路由是这样的:
<route id="demo-polling-consumer">
<from uri="timer:demo-polling?fixedRate=true&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" />
现在我宁愿假设这只是巧合,它在服务器上工作,并且可能有一个小的机会,它也会在服务器上给出相同的错误,即当服务器启动时,目标路由还不可用。通常这不会真的发生……但它可以,所以阻塞你的目标路线可能是值得的。