que perl activemq stomp

perl - que - python stomp client



¿Cómo uso las transacciones con Stomp y ActiveMQ(y Perl)? (3)

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

Incluso si envío un comando BEGIN sobre Stomp, los mensajes enviados con SEND se publican inmediatamente, y si ABORTO la transacción, no pasa nada.

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

¿No tengo suerte?


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 allí.

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

La razón de esto es que con STOMP puede tener muchas transacciones al mismo tiempo si su cliente tiene varios hilos, junto con algunas operaciones no transadas.


Echa un vistazo a Net :: Stomp :: Recibo . Es una subclase de Net :: Stomp que implementa "recibos de devolución" del protocolo Stomp, y le permite asegurarse de la correcta recepción de su mensaje, y cancelar la transacción de lo contrario.


Debe envolver los reconocimientos dentro de una transacción.

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

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

Ya he conseguido que esto funcione con el controlador PHP (parcheando la llamada de aborto para usar la identificación de la transacción cuando paso un objeto de marco para confirmar).

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