Filas e JMeter: compartilhando com Publicador e Assinante
Olá, Habr! Esta é uma continuação da minha publicação anterior, onde falarei sobre opções para colocar mensagens em filas usando JMeter.
Estamos fazendo um barramento de dados para uma grande empresa federal. Vários formatos de solicitação, transformações, roteamento complexo. Para testar, você precisa enviar muitas mensagens para a fila. Manualmente é uma dor que nem todo quiroprático consegue suportar.
Introdução
Embora eu tenha tido que aguentar essa dor no início. Tudo começou com RFHUtil. Poderoso, mas estranho e assustador: bem, você conhece Rus.
Indispensável em alguns casos, mas diminuindo constantemente em caso de uso ativo.
Testes convenientes são impossíveis com isso.
Com o JMeter tudo ficou mais fácil. Após a primeira fase de domínio e habituação, começou a surgir a esperança de um teste feliz.
Eu uso ativamente os amostradores JMS Publisher e JMS Subscriber. Ao contrário do JMS Point-to-Point, este par parecia mais conveniente de usar. Por exemplo, com Subscriber no JMS Selector você pode especificar uma variável, mas com Point-to-Point você não pode (ou este método não é muito óbvio).
Preparando amostradores
Editora JMS
Configuração - Cada amostra. Apache recomenda use esta opção se filas/tópicos forem especificados por meio de variáveis.
Expiração (ms) = 120000. Em caso de falha, as solicitações de teste desaparecerão da fila após 2 minutos.
Usar modo de entrega não persistente? - verdadeiro. IBM reivindicaçõesesse modo persistente garante a preservação confiável das mensagens transmitidas no caso de uma falha repentina. E troca mais rápida em modo não persistente. Para fins de teste, a velocidade é mais importante.
Em cada Publisher defino uma propriedade jms que o Assinante utilizará no Seletor JMS. Para cada envio, um valor aleatório é gerado no elemento do plano de testes Parâmetros do Usuário:
Dessa forma, você pode ter certeza de que a mensagem correta será lida.
O “espaço em branco” final de um JMS Publisher pré-configurado:
Assinante JMS
Configuração - Cada amostra. Bem, você entende.
Tempo limite (ms) = 100000. Se a solicitação não chegar na fila após 100 segundos de espera, algo deu errado.
Parar entre amostras? - verdadeiro.
Seletor JMS - bastante conveniente um pedaço. Assinante final do JMS:
Como lidar com o alfabeto cirílico nas mensagens transmitidas. No JMeter, por padrão, após a revisão, ele é exibido torto. Para evitar isso e aproveitar o que é grande e poderoso sempre e em qualquer lugar, você precisa:
Adicione um argumento JVM ao “iniciador” JMeter:
-Dfile.encoding=UTF-8
Adicione JSR223 PostProcessor ao Assinante com linha bacana:
prev.setDataEncoding("UTF-8")
Mande mensagem
A opção mais preguiçosa. Adequado para depurar testes recém-escritos. Ou para os casos em que você precisa enviar pelo menos algo pequeno. Selecione a opção Fonte da mensagem – Textarea e coloque o corpo da mensagem em um bloco de texto:
Transferência de arquivos
A opção mais comum. Adequado para a maioria dos cenários. Selecione a opção Fonte da mensagem – Do arquivo e indique o caminho para a mensagem no campo Arquivo - Nome do arquivo:
Transferindo um arquivo para um campo de texto
A opção mais versátil. Adequado para a maioria dos cenários + pode ser usado em JMS Ponto a Ponto onde não há segunda opção de envio:
Passando uma matriz de bytes
A opção mais difícil. Adequado para verificar a transmissão infalivelmente precisa de solicitações até o byte, sem distorção, SMS e perturbação. Você não poderá fazer isso no JMeter padrão. aqui Definitivamente me contaram sobre isso.
Então eu tive que baixar código fonte e modificar código Assinante JMS.
Substituído no método extractContent(..) linha:
buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");
Descrevi quatro maneiras de enviar mensagens para filas, que uso todos os dias na prática. Espero que essas informações facilitem sua vida. Na continuação, pretendo falar sobre minha experiência testando uma exchange onde há uma fila em uma extremidade e um banco de dados ou sistema de arquivos na outra.