2017-10-04 15 views
0

Activiti Camel 작업에서 ActiveMQ 대기열로 메시지를 보내려고합니다. 대기열을 Camel에서받을 때 다시 시작해야합니다. 내가 이해할 때 메시지가 대기열에서 수신 될 때 Camel이 올바른 활동 작업으로 라우트되도록 식별 할 수있는 특성이 없습니다.Camel ActiveMQ 경로에서 Activiti 작업 다시 시작

이와 같이 Business key is Null 예외가 발생하고 경로가 실패합니다. 나는 (ID가 일치 할 때) 중 하나 PROCESS_ID_PROPERTY 또는 수신 경로의 PROCESS_KEY_PROPERTY는 메시지가 올바르게 라우팅 하드 코딩 경우

from("activiti:SampleProcess:myCamelTask") 
.to("activemq:queue:myQueue"); 

은, 예상대로.

from("activemq:queue:myQueue") 
    .setBody(constant("test body")) 
    .setProperty(PROCESS_ID_PROPERTY, constant("50")) 
// .setProperty(PROCESS_KEY_PROPERTY, constant("CUSTOM-KEY")) 
.to("activiti:SampleProcess:receiveAsyncPing"); 

받는 경로에서 둘 중 하나의 속성을 얻을 수 있도록 적절하게 설정할 수 있습니까?

또는이 방법에 대해 더 좋은 방법이 있습니까?

답변

0

좋은 질문입니다. 방법 나는 이것이 setProperty는을 사용하여 경로 내에서 PROCESS_KEY를 주입하는 것입니다 처리() 명령 :

내가 프로세스 키 (비즈니스 키)를 설정하는 곳 바로 아래 볼 수있는 "바"이제

from(startProcessEndpoint) 
    .log(LoggingLevel.INFO, logMsg3) 
    .setProperty("PROCESS_KEY_PROPERTY",foo) 
    .setBody(constant("bar")) 
.to("activiti:testCamelTask:receive") 

당신이 상수를 사용하려는 해달라고하면 아래 그림과 같이, 당신은 경로 내에서 교환 개체에 액세스 할 수 있으며 식을 사용할 수 있습니다 :이 도움이

Expression foo = new Expression() { 
     @Override 
     public <T> T evaluate(Exchange exchange, Class<T> aClass) { 
      return (T) "foo"; 
     } 
    }; 

희망, 그렉

+0

그렉, 답변 해 주셔서 감사합니다! 이 시점에서 원래 메시지를 ActiveMQ로 보낸 경로와 어떻게 일치합니까? 또한 다소 혼란 스럽습니다. 비즈니스 키는 foo 또는 bar로 설정되어 있습니까? – yannis