2017-10-04 172 views
0

我试图从一个Activiti骆驼任务发送一个消息到一个ActiveMQ队列,它应该在它被骆驼收到时恢复活动。据我了解,当从队列中收到消息时,缺少使骆驼能够识别它的属性,以便将其路由到正确的活动任务。从骆驼ActiveMQ路线恢复Activiti任务

作为这样的Business key is Null引发异常并且路由失败。

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

如所预期的,如果我硬编码任一PROCESS_ID_PROPERTY或在接收路线PROCESS_KEY_PROPERTY,该消息被正确地路由(的ID相匹配时)。

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

Greg,谢谢你的回答!但是,在那一点上,你如何与将原始消息发送给ActiveMQ的路由相匹配?另外,我有些困惑,商业密钥设置为foo或bar? – yannis