В потоке процесса Camunda я пытаюсь получить доступ к переменным, которые созданы внутри потока RabbitMQ onMessage ... Короче говоря, у меня есть потребитель RabbitMQ, который слушает очередь, после того, как сообщение публикуется в очереди, выполняется onMessage и внутри этого onMessage я запускаю процесс BPMN.
@Component("MyProcessor")
public class MyProcessor implements ChannelAwareMessageListener {
public final void onMessage(Message message, Channel channel){
// create some variables based on the message
....
// do some database lookups based on the message
....
// enrich message based on some other factors
....
SomeService service = new SomeService(message);
if (service.isThisOrThatEnabled()){
System.out.println("Yes, it's enabled");
}
....
runtimeService.startProcessInstanceByKey("ABC");
....
}
}
Поэтому, основываясь на входящем сообщении, я устанавливаю определенные переменные с областью видимости, которая не выходит за пределы onMessage.
Когда я вызываю служебную задачу или использую выражение внутри служебной задачи в Camunda:
${MyProcessor.isThisOrThatEnabled() == true}
Это, очевидно, вызовет синглтон, аннотированный с помощью @Component, и не будет иметь доступа к фактическому сообщению в onMessage. Если MyProcessor.isThisOrThatEnabled обертывает service.isThisOrThatEnabled, я, вероятно, получу исключение с нулевым указателем, поскольку служба не инициализируется при создании синглтона, только внутри потока onMessage.
Итак, чтобы резюмировать мой вопрос, как мне получить доступ к переменным в BPMN, которые находятся внутри потока ...
1: Если синглтоны - неправильный способ доступа к переменным в потоке, как еще я должен получить к ним доступ? Можно ли внедрить этот экземпляр SomeService в поток BPMN?
2: Если служебные задачи - это неправильный компонент, который нужно использовать для доступа к этим переменным, какой компонент мне следует использовать вместо этого?