OnSelect
OnSelect sobrescreve o algoritmo nativo de balanceamento. Você decide qual slave (índice do array) atende cada requisição — ou rejeita/derruba a conexão antes do endpoint rodar.
Configure no Thread Pool principal (orquestrador), não no slave.
Quando usar
- Balanceamento customizado entre slaves
- Rotear por endpoint/classe antes de executar a API
- Barrar requisições suspeitas sem chegar ao handler
Configuração
[TP_UEX]
OnSelect=U_OnSelect
Assinatura
Function U_OnSelect(cClassName, cFunctionName, cProgramType) As Integer
| Parâmetro | Conteúdo |
|---|---|
cClassName | Classe do endpoint (vazio se for função) |
cFunctionName | Função ou método que será executado |
cProgramType | 1 = annotation · 2 = LoadURNs |
Lista de slaves: oRest:GetThreadPoolSlaves().
Retorno (obrigatório — numérico)
| Valor | Efeito |
|---|---|
> 0 | Índice do slave que atende (1-based no array) |
-1 | Delega ao algoritmo padrão do tlppCore |
-2 | Rejeita — resposta de recusa ao cliente |
-3 | Drop silencioso — fecha conexão sem HTTP (útil contra scan/DDoS) |
Exemplo
#include "tlpp-core.th"
#include "tlpp-rest.th"
Function u_restGrader(cClassName As Character, cFunctionName As Character, cProgramType As Character) As Integer
Local nIndex := -1 As Integer
Local aSlaves := oRest:GetThreadPoolSlaves() As Array
Local nA := 0 As Integer
For nA := 1 To Len(aSlaves)
If (aSlaves[nA]:ID == 6)
nIndex := nA
Exit
EndIf
Next
Return nIndex
Você já sabe quem vai executar antes da API rodar — dá para validar permissão ou rota nesta camada, além do Authorization em TlppData.
Próximo passo: OnStart