Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

421
Views
Receivetask en camunda no funciona como se esperaba

Hemos estado usando la versión camunda 7.4 en la mayoría de nuestros proyectos junto con camunda-bpm-spring-boot-starter 1.1.0.

Tenemos un proyecto en el que, en el flujo de camunda, intentamos publicar un mensaje en un intermediario de mensajes que internamente es consumido por otro sistema y volver a publicar un mensaje nuevo en el mismo intermediario de mensajes. Luego activamos una tarea de recepción para recibir ese mensaje y continuar con el proceso. Para escuchar el mensaje entrante, usamos org.springframework.amqp.core.MessageListener y definimos la correlación de mensajes para receiveTask dentro del método onMessage(). Pero obtenemos el siguiente error al hacerlo.

org.camunda.bpm.engine.MismatchingMessageCorrelationException: no se puede correlacionar el mensaje 'ReceiveAmsharedResponse': ninguna definición de proceso o ejecución coincide con los parámetros

Estamos tratando de averiguar dónde está el problema. ¿Está en la versión de camunda que estamos usando o el problema está en el uso de receiveTask? Probamos todos los enfoques definidos enhttps://docs.camunda.org/manual/7.4/reference/bpmn20/tasks/receive-task/ pero no hubo suerte.

Para el método createMessageCorrelation obtenemos el error anterior. Y para otros métodos obtenemos un NPE ya que los objetos EventSubscription/Execution son nulos.

El uso de la tarea de recepción de flujo de Camunda de muestra es el siguiente:

 <bpmn2:receiveTask id="ReceiveTask" name="Receive Task" messageRef="Message_06nl07f"> <bpmn2:incoming>SequenceFlow_xyz</bpmn2:incoming> <bpmn2:outgoing>SequenceFlow_190m9nx</bpmn2:outgoing> </bpmn2:receiveTask> ...... ...... <bpmn2:message id="Message_06nl07f" name="Message" />

Y ejemplo de código de correlación de mensajes:

 class XYZ implements MessageListener { onMessage() { runtimeService.createMessageCorrelation("Message") .processInstanceBusinessKey(resourceId) .setVariable(ACTIVITY_RESULT, activityResult) .correlate(); }

¿Cualquier ayuda sería apreciada?

Gracias, Viswanath

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Suponiendo que su proceso se parece a esto:

 O -- ( M ) -- ( M ) -- O send receive

Si el mensaje de respuesta se envía muy rápido, es posible que onMessage y la correlación del mensaje se ejecuten antes de que la suscripción al evento del mensaje persista en la base de datos. Básicamente, el mensaje llega mientras la tarea de envío aún se está ejecutando.

Una forma de evitar esto sería crear la suscripción de mensajes en paralelo con el envío del evento:

 O -- + -- ( M ) -- + -- O | send | `----( M ) --´ receive
over 4 years ago · Santiago Trujillo Report

0

Con respecto al mensaje de excepción dado que es:

 org.camunda.bpm.engine.MismatchingMessageCorrelationException: Cannot correlate message 'ReceiveAmsharedResponse': No process definition or execution matches the parameters

Supongo que correlaciona un mensaje con el nombre ReceiveAmsharedResponse , pero definió un mensaje con un nombre diferente para su ReceiveTask.

Cambiar la definición de su Mensaje a lo siguiente debería funcionar:

 <bpmn2:message id="Message_06nl07f" name="ReceiveAmsharedResponse" />
over 4 years ago · Santiago Trujillo Report

0

Suponiendo que su proceso se parece a esto:

 O -- ( M ) -- ( M ) -- O send receive

Este error significa que se received una response "antes" de que se sent la request . Y por sent , me refiero a toda la transacción del proceso send-request .

Entonces, en otras palabras, debido a la rápida respuesta, no hay una transacción confirmada en la base de datos de Camunda para el proceso send-request . Por lo tanto, cuando Camunda procesa el proceso response-received , no es posible correlacionar la response-received con la send-request .

Una solución sugerida es usar Async Continuations asíncronas que ofrece Camunda y puede verificar en su sitio web oficial . Más específicamente, puede usar Async Before en el nivel send-request :

 ( M ) send

Async Before guardará la transacción en la base de datos de Camunda, antes de que comience el proceso send-request . Por lo tanto, será posible que la response esté correlacionada.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!