2011-12-11 7 views
6

Escribo en una cola RabbitMQ con spring amqp usando la clase RabbitTemplate. Uso el método de conversión y envío para enviar mensajes a la cola. Esto funciona bien en situaciones normales, pero parece fallar silenciosamente si la cola no existe. No se lanza ninguna excepción y no se registra ningún mensaje de error/depuración en el registrador.¿Cómo sé que mi mensaje se envió con éxito con amqp de primavera?

¿Cuál es la mejor manera de asegurarme de que el mensaje se entregó?

Aquí hay un ejemplo de lo que el código está haciendo actualmente.

RabbitTemplate template = new RabbitTemplate(factory); 
template.setQueue(queueName); 
template.setRoutingKey(queueName); 
template.convertAndSend(message); 
+0

¿Está absolutamente seguro de que no se registra ningún mensaje? ¿Has probado una prueba unitaria con el corredor deliberadamente abajo? – artbristol

+0

Fui incorrecta sobre la falla silenciosa si el intermediario no funciona, de hecho recibo una excepción de excepción desconocida si el intermediario no está activo. He actualizado la pregunta. Dicho esto, todavía no recibo ninguna excepción o mensaje de error si la cola no existe. –

+0

¿podría publicar el fragmento de código donde envía el mensaje? – artbristol

Respuesta

2

No es un error para un cliente RabbitMQ para enviar un mensaje a un corredor que no tiene colas con destino dentro de ella para aceptar el mensaje. RabbitMQ lo dejará caer silenciosamente y el cliente no será más inteligente. Si no tiene colas interesadas en sus mensajes, el intermediario no tiene muchas otras opciones disponibles.

Dicho esto, puede hacer que RabbitMQ se queje si el mensaje se cerrará de forma silenciosa configurando el indicador mandatory. No sé si las interfaces Spring AMQP lo admiten, pero ciertamente está disponible en la biblioteca del cliente RabbitMQ Java.

+0

Gracias, lo investigaré. Intentaré llegar a él mañana, estamos bastante ocupados en este momento. –

+0

No veo ninguna forma de establecer una bandera obligatoria. Ninguno de los objetos spring-amqp que estoy usando parece tener esa configuración. –

+0

Creo que mi problema es que el mensaje se considera entregado porque llega al intercambio. El mensaje simplemente nunca se enruta a la cola porque no existe. Es probable que haya alguna configuración en el conejo que deba configurarse para asegurarse de que el mensaje no se pierda. –

1

Puede usar mandatory y también habilitar devoluciones de editor (para mensajes que no se pueden entregar).

Cuestiones relacionadas