es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AMQ212054: La dirección de destino=… está bloqueada. Si el sistema está configurado para bloquear, asegúrese de consumir los mensajes en esta configuración.

Estoy utilizando Artemis 2.7.0.redhat-00056 (creo que AMQ 5.11).

Una de las rutas de camel fue configurada hace mucho tiempo. Envía XML a una cola, la cual luego es manejada en un bean.

Así que utiliza código al estilo JMS:

producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
...
TextMessage message = session.createTextMessage(xStream.toXML(corMessage));
producer.send(message);

Esto funciona el 99% del tiempo, pero hoy comenzamos a recibir:

Caused by: java.lang.IndexOutOfBoundsException: Error leyendo en simpleString, la longitud=6702096 es mayor que readableBytes=963134
    at org.apache.activemq.artemis.api.core.SimpleString.readSimpleString(SimpleString.java:183)

Además de esto, se muestra la advertencia:

AMQ212054: Dirección de destino=... está bloqueada. Si el sistema está configurado para bloquear, asegúrate de consumir los mensajes en esta configuración.

Para solucionar esto, ingresé al docker y verifiqué nuestra carpeta /amq/broker/data/large-messages, y moví todos esos archivos a otro lugar. Esto arrojó una serie de excepciones, pero parece que los nuevos mensajes ahora están siendo enviados.

Sin embargo, aún estoy recibiendo la advertencia AMQ212054 ‘destino bloqueado’.

Entonces, ¿cómo puedo:

a) eliminar la advertencia

b) solucionar esto en el futuro?

He revisado la documentación, pero no encuentro nada en particular que ayude. Hay un campo minLargeMessageSize, pero ¿configurarlo haría alguna diferencia? Luego, ¿debería verificar el tamaño del XML antes de enviarlo, y luego tener una declaración if/else para enviarlo con producer.send(message); o como ByteMessage, como en la sección 9.4/9.5, si es un mensaje ‘grande’?

EDICIÓN: (DESDE DENTRO DE DOCKER)

...
<max-disk-usage>90</max-disk-usage>
...

[root@409a74d7eadd /]# df -h
Filesystem                              Size  Used Avail Use% Mounted on
/dev/mapper/docker-253:2-268789825-123   10G  2.8G  7.3G  28% /
tmpfs                                    64M     0   64M   0% /dev
tmpfs                                    12G     0   12G   0% /sys/fs/cgroup
/dev/mapper/centos-root                  36G   14G   23G  37% /temp
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    a) Para deshacerse de la advertencia AMQ212054 'destination blocked', es necesario consumir los mensajes en la configuración que está bloqueada.

    b) Para solucionar esto en el futuro, puedes intentar aumentar el minLargeMessageSize a un valor más adecuado para tu sistema. El minLargeMessageSize es el umbral por debajo del cual los cuerpos de los mensajes se consideran pequeños y se almacenarán como una cadena simple, y por encima del cual los cuerpos de los mensajes se consideran grandes y se almacenarán como un archivo binario en disco. Si configuras este valor demasiado alto, entonces se enviarán muchos mensajes como mensajes grandes, lo que puede afectar el rendimiento.

    Para verificar si el espacio en disco está causando el problema, puedes revisar el uso máximo del disco verificando la propiedad max-disk-usage en el archivo de configuración broker.xml. Si el uso del disco ha superado este límite, entonces necesitas liberar algo de espacio en el disco.

    Finalmente, también puedes modificar la ruta de camel para verificar el tamaño del XML antes de enviarlo y luego enviarlo como un ByteMessage si es un mensaje ‘grande’. Esto se puede hacer utilizando una declaración if/else similar a la mencionada en la sección 9.4/9.5 de la documentación de ActiveMQ Artemis.

    Ten en cuenta que mover la carpeta de mensajes grandes no es una solución permanente y puede causar otros problemas a largo plazo. Es mejor solucionar la causa raíz del problema en lugar de simplemente mover los archivos.

Comments are closed.