2015-04-22 2 views
0

Я хочу schelude маршрутов в виде spceific порядка с использованием Apache Camel и Quartz 2. я определил контекст, добавив два маршрута:Расписание маршрутов с определенным порядком с Camel и Quartz 2

public static void main(String args[]) throws Exception { 
    CamelContext context = new DefaultCamelContext(); 
    context.addRoutes(new RouteBuilder() { 
     @Override 
     public void configure() { 

      from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.repeatCount=5").startupOrder(1).setBody().simple("Current time is "+new SimpleDateFormat("HH:mm:ss").format(new Date())).to("stream:out"); 
      //from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.repeatCount=5").setBody().simple("Current time is ${header.firedTime}").to("stream:out"); 

     } 
    }); 

    context.addRoutes(new RouteBuilder() { 
     @Override 
     public void configure() { 

      from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.repeatCount=5").startupOrder(2).setBody().simple("Current time is "+new SimpleDateFormat("HH:mm:ss").format(new Date())).to("file:C:\\Users\\milioli\\Documents\\NetBeansProjects\\CamelWithQuartz\\data\\out.txt"); 
     } 
    }); 

    context.startAllRoutes(); 
    Thread.sleep(10000); 
    context.stop(); 

} 

Код сборки и но у меня нет обратной связи с консоли, где я ожидаю результат маршрута с порядком 1. Кроме того, маршрут с порядком 2 не записывается в файл, переданный как аргумент. Каждый маршрут, выполненный индивидуально, выполняется правильно. Может кто-нибудь мне помочь?

+3

Я думаю, что вы должны назвать каждую работу индивидуально, как: myTimerName1 и myTimerName2 ... тогда оба маршрута могут быть объявлены –

+0

Да, вчера я решил это –

+0

Если мой ответ является реальным решением, то, возможно, вы можете его принять? –

ответ

0

Предлагаю вам создать модульный тест, прежде чем начинать код и даже использовать его для разработки маршрута Camel (пока вы можете имитировать конечные точки).

Следующий тест показывает, что вы можете использовать два планировщики Quartz, если там называется по-разному:

package org.ruffp.camel.quartz; 

import org.apache.camel.EndpointInject; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.component.mock.MockEndpoint; 
import org.apache.camel.test.junit4.CamelTestSupport; 
import org.junit.Test; 

public class QuartzEndpointTest extends CamelTestSupport { 

    @EndpointInject(uri = "mock:DESTINATION") 
    private MockEndpoint mockDestination; 

    @Test 
    public void testQuartz() throws Exception { 
     resetMocks(); 
     mockDestination.expectedMessageCount(3); 
     Thread.sleep(10000); 
     assertMockEndpointsSatisfied(); 
    } 

    @Override 
    protected RouteBuilder createRouteBuilder() throws Exception { 

     return new RouteBuilder() { 
      @Override 
      public void configure() throws Exception { 

       //@formatter:off 
       from("quartz2://myGroup/myTimerNameOne?trigger.repeatInterval=100&trigger.repeatCount=1") 
        .setProperty("test").constant("This is the job 1") 
        .to(mockDestination); 

       from("quartz2://myGroup/myTimerNameTwo?trigger.repeatInterval=100&trigger.repeatCount=0") 
       .setProperty("test").constant("This is the job 2") 
       .to(mockDestination); 

       //@formatter:on 
      } 
     }; 
    } 
} 

Если поставить такое же имя, как (например, myTimerName) тест не пройдет, но определение маршрута делает не бросать никаких ошибок/исключений.

Смежные вопросы