Queues e JMeter: compartir con Publisher e Subscriber
Ola, Habr! Esta é unha secuela da miña publicación anterior, no que falarei das opcións para colocar mensaxes en filas mediante JMeter.
Estamos a facer un bus de datos para unha gran empresa federal. Varios formatos de solicitude, transformacións, enrutamento complicado. Para probar, cómpre enviar moitas mensaxes á cola. Manualmente é unha dor que non todos os quiroprácticos poden manexar.
Introdución
Aínda que tiven que aguantar esta dor nun primeiro momento. Todo comezou con RFHUtil. Poderoso, pero torpe e asustado: ben, xa coñeces a Rus.
Imprescindible nalgúns casos, pero en diminución constante no caso de uso activo.
As probas convenientes son imposibles con el.
Con JMeter todo se fixo máis doado. Despois da primeira etapa de masterización e acostumación, comezou a aflorar a esperanza de probas felices.
Uso activamente os mostradores de JMS Publisher e JMS Subscriber. A diferenza de JMS Point-to-Point, este par parecía máis cómodo de usar. Por exemplo, con Subscriber en JMS Selector podes especificar unha variable, pero con Point-to-Point non (ou este método non é moi obvio).
Preparación de mostradores
JMS Editor
Configuración: cada mostra. Apache recomenda use esta opción se as colas/temas se especifican mediante variables.
Caducidade (ms) = 120000. En caso de falla, as solicitudes de proba desaparecerán da cola despois de 2 minutos.
Usa o modo de entrega non persistente? - verdade. IBM aprobaese modo persistente garante a conservación fiable das mensaxes transmitidas en caso de fallo repentino. E intercambio máis rápido en modo non persistente. Para fins de proba, a velocidade é máis importante.
En cada editor establezo unha propiedade jms que o subscritor utilizará no selector JMS. Para cada envío, xérase un valor aleatorio no elemento do plan de proba de parámetros de usuario:
Deste xeito, podes estar seguro de que se le a mensaxe correcta.
O "blank" final dun editor JMS preconfigurado:
Abonado JMS
Configuración: cada mostra. Ben, entendes.
Tempo de espera (ms) = 100000. Se a solicitude non chega á cola despois de 100 segundos de espera, algo saíu mal.
Parar entre mostras? - verdade.
JMS Selector - bastante cómodo cousa. Abonado final de JMS:
Como tratar co alfabeto cirílico nas mensaxes transmitidas. En JMeter, por defecto, despois da corrección, móstrase de forma torcida. Para evitar isto e gozar do grande e poderoso sempre e en todas partes, cómpre:
Engade un argumento JVM ao "lanzador" de JMeter:
-Dfile.encoding=UTF-8
Engade o postprocesador JSR223 ao abonado cunha liña groovy:
prev.setDataEncoding("UTF-8")
Enviar texto
A opción máis preguiceira. Axeitado para depurar probas recentemente escritas. Ou para os casos nos que necesites enviar polo menos algo pequeno. Seleccione opción Orixe da mensaxe - Textarea e coloca o corpo da mensaxe nun bloque de texto:
Transferencia de ficheiros
A opción máis común. Adecuado para a maioría dos escenarios. Seleccione opción Orixe da mensaxe: desde o ficheiro e indique no campo o camiño da mensaxe Ficheiro - Nome do ficheiro:
Transferir un ficheiro a un campo de texto
A opción máis versátil. Adecuado para a maioría dos escenarios + pódese usar en JMS Point-to-Point onde non hai unha segunda opción de envío:
Pasando unha matriz de bytes
A opción máis difícil. Axeitada para comprobar a transmisión infaliblemente precisa de solicitudes ata o byte, sen distorsións, SMS e perturbacións. Non poderás facelo no JMeter predeterminado. aquí Definitivamente faláronme disto.
Entón tiven que descargar fontes e modificar código Abonado JMS.
Substituído no método extractContent(..) liña:
buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");
Todo o que queda é engadir un par de mostradores JSR223. O primeiro é antes do par Editor/Subscritor para crear un ficheiro DAT que contén bytes aleatorios:
Describín catro formas de enviar mensaxes ás filas, que uso todos os días na práctica. Espero que esta información che facilite a vida. A continuación, penso falar da miña experiencia de probar un intercambio onde hai unha cola nun extremo e unha base de datos ou sistema de ficheiros no outro.