Я использую 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-module.xml загружает несколько файлов camel-context.xml.
Ошибка говорит:
org.apache.camel.component.directvm.DirectVmConsumerNotAvailableException: потребители не доступны в конечной точке: конечная точка [direct-vm: demo-get-order-details]. Exchange [Сообщение: [[Ljava.lang.Object; @6dd62653]]
В стартовом журнале говорится:
[main] SpringCamelContext INFO Route: заказные записи начинаются и используются с: Endpoint [direct-vm: demo-get-order-details]
Еще раз. Если я развожу это на tomcat, все будет хорошо.
Параметр block=true
при вызове целевого маршрута может решить эту проблему, т.е.
<to uri="direct-vm:demo-get-order-details?block=true" />
Теперь я скорее предполагаю, что это было просто совпадение, что он работал на сервере и что, возможно, был небольшой шанс, что он также дал бы такую же ошибку на сервере, а именно, когда сервер запускается, а целевой маршрут не является Пока еще нет. Обычно этого не произойдет, но это может быть так, поэтому блок на вашем целевом маршруте может стоить того же.
Этот маршрут должен иметь от, который в настоящее время отсутствует
<route id="epunkt-get-new-jobadverts">
<to uri="direct-vm:demo-get-order-details" />
<to uri="bean:demo?method=getOrderDetail" />
</route>