Pregunta

Estoy intentando reemplazar algunas colas de mensajes personalizadas con ActiveMQ y necesito hablar con ellas (mucho) desde Perl.ActiveMQ proporciona una interfaz Stomp y Perl tiene Net::Stomp, por lo que parece que debería estar bien, pero no lo es.

Incluso si envío un comando BEGIN a través de Stomp, los mensajes enviados con SEND se publican inmediatamente y si ABORTO la transacción, no sucede nada.

No puedo encontrar ninguna respuesta clara que sugiera que no es posible, que es posible o que hay una configuración relevante.Además, Stomp no parece ser un buen protocolo para comprobar si hay respuestas de error del servidor.

¿No tengo suerte?

No hay solución correcta

Otros consejos

Por cierto, el mejor lugar para hacer preguntas sobre Perl/ActiveMQ/Stomp es el Foro de usuarios de ActiveMQ ya que mucha gente de Perl-Stomp pasa el rato por ahí.

El truco con las transacciones STOMP es asegurarse de que cada mensaje que envíe o cada reconocimiento que realice incluya el encabezado del ID de la transacción.Ver el sección de manejo de transacciones del protocolo STOMP.

La razón de esto es que con STOMP usted podría tener muchas transacciones al mismo tiempo si su cliente tiene múltiples subprocesos, junto con algunas operaciones sin transacciones.

Mira esto Red::Pisotón::Recibo.Es una subclase de Net::Stomp que implementa "acuse de recibo" del protocolo Stomp y le permite asegurarse de la recepción correcta de su mensaje y, en caso contrario, cancelar la transacción.

Tienes que incluir los acuses de recibo dentro de una transacción.

En pseudocódigo (o pseudo STOMP) esto sería:

  • COMENZAR [TRANSACTION-ID] -> enviar al servidor
  • MENSAJE [ID-MENSAJE] (recibido) <- recibido del servidor
  • ACK [ID-MENSAJE] [ID-TRANSACCIÓN] -> enviar al servidor
  • COMMIT [TRANSACTION-ID] -> enviar al servidor

Ya hice que esto funcione con el controlador PHP (parcheando la llamada de cancelación para usar el ID de la transacción cuando paso un objeto de marco para reconocerlo).

Desafortunadamente, después de volver a enviar cuatro mensajes, el cliente se detiene.Al menos esto me pasa a mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top