2017-10-04 8 views
0

J'essaie d'envoyer un message d'une tâche Activiti Camel à une file d'attente ActiveMQ, qui devrait reprendre l'activité lorsqu'elle est reçue par Camel. Si je comprends bien, quand le message est reçu de la file d'attente manque les propriétés qui lui permettraient d'être identifié par Camel afin d'être acheminé vers la tâche d'activité correcte.Reprendre la tâche Activiti à partir de la route Camel ActiveMQ

En tant qu'exception Business key is Null est soulevée et l'itinéraire échoue.

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

Comme prévu, si je hardcode soit le PROCESS_ID_PROPERTY ou PROCESS_KEY_PROPERTY dans la voie de réception, le message est acheminé correctement (lorsque l'ID correspond). Comment puis-je obtenir l'une ou l'autre propriété dans la route de réception pour que je puisse les définir en conséquence?

Ou y at-il une façon plus recommandée d'aborder cela?

Répondre

0

Une bonne question. La façon dont je me suis occupé est d'injecter le PROCESS_KEY au sein de la route en utilisant la commande setProperty():

Voir ci-dessous où je mets la clé de processus (clé métier) pour « bar »:

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

maintenant , si vous ne voulez pas utiliser une constante, vous avez accès à l'objet d'échange au sein de la route et peut utiliser une expression comme indiqué ci-dessous:

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

Hope this helps, Greg

+0

Greg, merci pour votre réponse! À ce stade, cependant, comment faites-vous correspondre à l'itinéraire qui a envoyé le message d'origine à ActiveMQ? Aussi, je suis un peu confus, la clé d'entreprise est définie comme foo ou bar? – yannis