Spring y JMS

Usamos Spring Framework (no Boot) yJMS (ActiveMQ). Y le estamos dando bastante caña, por lo que empezamos a sospechar si algunos de nuestros problemas de rendimiento pueden venir por ahí.

Spring trae por defecto un conversor de las clases java a XML para el envío del mensaje por JMS y luego el desparseo correspondiente en la parte de recepción. Son las clases MarshallingMessageConverter y XStreamMarshaller actuando conjuntas.

Por ver si afecta a la eficiencia y aprovechando que Spring, quizás no de forma fácil o evidente, es bastante configurable, me he hecho un par de conversores de mensajes JMS/Spring pero usando Jackson para convertir a JSON en vez de XML y otro usando Kryo para convertir a bytes de forma eficiente y ver si afectan o no al rendimiento global de la aplicación.

No tengo todavía resultados que mostrar aquí, actualizaré este post cuando corresponda, pero ambas clases de conversión las tienes en el ejemplo de spring y jms. Bastaría instanciarlas en spring y meterlas como messageConverter en los jms:listener o jmsTemplate de Spring.

Mi segunda intención, independientemente del resultado, es ver qué me cuesta cambiar la aplicación para que use la nueva versión de ActiveMQ ( ActiveMQ Artemis ) que como dice su propia página web

Apache ActiveMQ Artemis is an open source project to build a multi-protocol, embeddable, very high performance, clustered, asynchronous messaging system

Vamos, «high performance» entre otras cosas. Espero que junto con Spring sea tan sencillo como cambiar dependencias de compilado y algo de los ficheros de configuración.

Empezamos también a cambiar ActiveMQ por Hazelcast. Pero no sé si me ha convencido. Hazelcast es una de las primeras cosas que de forma extraña se nos cae cuando hay problemas de red entre los distintos PCs y por otro lado, me he encontrado con cosas como que un Map.size() devuelve números negativos en ocasiones. Se «arregló» actualizando versión de Hazelcast, pero este tipo de cosas no sé si me convencen.

Así que nada, siguen los experimentos en busca de la «high performance» 🙂