Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

413
Vistas
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

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

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
about 4 years ago · Santiago Trujillo Denunciar

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" />
about 4 years ago · Santiago Trujillo Denunciar

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.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda