![[z/OS]](../images/ngzos.gif)
Configurações do Regulador MDB para Beans Acionados por Mensagens no z/OS
É possível ajustar uma variedade de configurações para o "regulador MDB", para controlar a quantidade de trabalho do MDB processada pelo servidor em um determinado momento.
Regulador MDB - Limites Alto e Baixo
O suporte de regulador MDB mantém uma contagem do número atual de mensagens executadas para cada porta listener.
- Se a contagem em andamento for menor ou igual ao valor de limite alto, um registro de trabalho será enfileirado na fila do WLM.
- Se a contagem em andamento exceder o valor do limite alto, o encadeamento de agentes da fila que está executando o MRH ficará bloqueado e entrará no estado de espera. Ou seja, o regulador está "bloqueando".
A contagem em andamento diminuirá em 1 sempre que o controlador for notificado que um registro de trabalho para essa Porta Listener foi concluído (independentemente de a transação do aplicativo ter sido consolidada). Depois de diminuída, a contagem em andamento será verificada em relação ao valor do limite baixo para essa Porta Listener. A contagem em andamento fica abaixo do valor de limite baixo; o encadeamento de agentes da fila bloqueado anteriormente é ativado (notificado). Desse modo, novos registros de trabalho podem ser enfileirados na fila do WLM. Ou seja, o regulador foi "liberado".
Os valores de limite alto e baixo são definidos externamente por uma configuração, o parâmetro Número máximo de sessões da porta listener. O valor de limite alto é definido internamente igual ao valor de Número máximo de sessões definido externamente. O valor de limite baixo é calculado e definido internamente pela fórmula: limite baixo = (limite alto / 2), com o valor arredondado para o inteiro mais próximo.
- O controlador começa a processar outra mensagem, a contagem em andamento é configurada para 3, que excede o limite alto e faz com que o encadeamento do controlador pause até que o limite baixo seja atingido.
- O MDB no servidor para a primeira mensagem retorna e a contagem em andamento é diminuída de 3 para 2 e, portanto, NÃO atingiu o limite baixo.
- O MDB no servidor para a segunda mensagem retorna e a contagem em andamento é diminuída de 2 para 1. O limite baixo é atingido e o processamento de mensagens e seu despacho para o SR continua.
No entanto, se o serviço de Listener de Mensagens tiver sido configurado com a propriedade customizada de MDB.THROTTLE.THRESHOLD.LOW.EQUALS.HIGH definida e configurada com um valor de "true", o valor do limite baixo será configurado internamente para o valor do limite alto (que é a propriedade Número máximo de sessões configurada externamente da porta do listener).
Regulador MDB - Ajustando
Você deve configurar o valor "Número máximo de sessões" da porta listener com o dobro do número de encadeamentos trabalhadores disponíveis em todos os servidores no servidor escalável (2*WT) para que, se houver um encadeamento trabalhador disponível em algum servidor, ele não fique inativo por causa de um regulador MDB bloqueado. Isto é, não desejará ter uma fila vazia do WLM, um encadeamento de trabalhadores do servant disponível e um regulador bloqueado.
- Há um encadeamento de trabalhadores livre do servant
- Não há nada na fila do WLM
- Há uma referência de mensagem procurada, mas para a qual um pedido de trabalho não foi incluído na fila do WLM (o regulador bloqueado no lugar)
Além disso, a configuração do limite alto para 2*(WT+N) permite assegurar que, no momento em que um encadeamento de trabalhadores do servant seja liberado e libere o regulador, haja uma lista não processada de mensagens N pré-processadas e esperando na fila do WLM prontas para dispatch. No entanto, configurar um valor muito alto introduz o problema de sobrecarga da fila do WLM para o qual o regulador foi introduzido para evitar. Observe que este cenário assume que a fila (ou o tópico) está totalmente carregada com mensagens para processamento.
Portanto, aumentar o valor do limite alto permite que o servidor crie uma pequena lista não processada de mensagens pré-processadas esperando na fila do WLM no caso de ocorrer um pico de carga de trabalho. Entretanto, aumentar o valor do limite alto também aumenta a chance de expiração de um registro de trabalho de uma determinada mensagem antes de o aplicativo ser despachado com a mensagem especificada. Isto é, o servidor pode atingir o Tempo Limite do MDB. A mensagem especificada é eventualmente reenviada ao servidor, mas apenas posteriormente, e o processamento concluído até aquele momento seria perdido. Além disso, um valor de limite muito alto ignoraria efetivamente a função do regulador MDB e, nesse caso, a fila do WLM poderia ser sobrecarregada; isso causaria a falha do servidor.
Regulador MDB - Ajuste Alternativo
Embora o servidor escalável tenha sido projetado com o objetivo de maximizar o rendimento do processamento, é possível utilizar as configurações da porta listener para alcançar outros objetivos de gerenciamento do fluxo de trabalho.
Por exemplo, uma configuração de limite alto de ‘1' garante que as mensagens sejam processadas na ordem em que são recebidas no destino.
Também é possível que haja outras razões comerciais, com base na capacidade ou em outros fatores, para restringir uma determinada porta listener a uma concorrência muito menor do que o servidor poderia suportar, se fosse de outra forma. Embora, certamente, essa seja uma configuração suportada, ela pode causar o bloqueio do regulador quando há encadeamentos de trabalhadores inativos disponíveis.
Exemplo de Regulador MDB
Suponha que o servidor seja configurado com o valor máximo de instâncias do servidor definido como 3, com o perfil da carga de trabalho de IOBOUND. Você tem duas CPUs; sendo assim, o WebSphere Application Server criará seis encadeamentos de trabalhador em cada servant. Seu aplicativo (um único MDB mapeado para uma fila) trata cada mensagem relativamente rápido (para que haja menos risco de tempo limite) e você deseja o tempo total da chegada de uma determinada mensagem na fila do MDB até o final do dispatch do MDB para que essa mensagem seja o menor possível.
Para fornecer um tempo de resposta rápido para um pico de energia no trabalho, você opta por uma lista não processada maior. Você configura o valor Número máximo de sessões da Porta Listener com 100 = 2 * (3 * 6 + 32).