A tabela que nunca foi de menor custo
Existem exatamente duas funções,NORMAL e LCR. Uma tabela que não declara função é NORMAL.
Uma terceira função,
RC, foi removida na V1.28.0. Ela estava no enum, era permitida pela restrição do banco de dados e descrita no painel, e nada em lugar algum se ramificava por ela, então uma tabela configurada como RC roteava como NORMAL enquanto toda superfície que um operador pudesse consultar dizia o contrário. As linhas existentes são reescritas para NORMAL, que é o que elas já estavam fazendo.O que muda
NORMAL para na primeira regra correspondente, o que faz da ordem do arquivo a prioridade. Uma tabela LCR varre todas as regras, trata as correspondências como alternativas em vez de como uma cadeia de fallback, e deixa apenas a tarifa em rates.conf decidir.
Como um vencedor é escolhido
1
Cada regra na tabela é varrida
Sem saída antecipada. Uma regra cujo alvo seja outra tabela é pulada com um aviso: um custo aninhado não pode ser comparado, e rotear a um preço desconhecido seria pior do que não rotear ali.
2
Fornecedores caídos são descartados
Um alvo que esteja caído, suspenso ou que por outra razão não aceite é pulado, então o próximo mais barato assume o tráfego. Este é o mesmo sinal que um grupo usa; consulte Fornecedores para os quatro estados.
3
Os sobreviventes são tarifados
Cada candidato restante é tarifado para o produto desta mensagem contra o lado de custo de rates.conf. O mais barato vence.
4
Um candidato sem tarifa é o último recurso
Um fornecedor sem uma tarifa de custo correspondente é guardado à parte e usado somente se nada mais correspondeu, registrando
No candidate in least-cost table … has a rate.Uma linha de tarifa ausente degrada em vez de bloquear. Recusar rotear uma mensagem sem tarifa transformaria uma linha esquecida em
rates.conf em uma indisponibilidade; preferi-la enviaria tudo pelo fornecedor menos configurado. O último recurso é a única resposta que não é nenhuma das duas.Ainda assim vale a pena alertar sobre isso, porque um fornecedor que está ganhando tráfego com uma tarifa ausente está ganhando com uma margem desconhecida. Consulte Como funciona a precificação.Duas coisas recusadas de imediato
Ambas são recusadas no carregamento, em bloco, porque nenhuma tem um estado parcial que roteie da forma que qualquer pessoa pretendia. O conjunto de tabelas para de atualizar até que seja corrigido.Um grupo de fornecedores dentro de uma tabela LCR
Um grupo de fornecedores dentro de uma tabela LCR
O menor custo escolhe por preço e um grupo escolhe por política. Expandir os membros em candidatos tarifados descartaria silenciosamente a política, e um grupo com pesos não tem significado algum a oferecer para uma comparação de preços.Use um ou outro em uma dada tabela: um grupo quando você quer failover e divisão proporcional, uma tabela LCR quando você quer o fornecedor ativo mais barato.
Um nome que é ao mesmo tempo um grupo e uma tabela, ou ao mesmo tempo um grupo e um worker
Um nome que é ao mesmo tempo um grupo e uma tabela, ou ao mesmo tempo um grupo e um worker
A resolução é tabela, depois grupo, depois worker, então um dos dois ficaria silenciosamente inalcançável. Renomeie um deles.
Copiar e continuar não tem significado aqui
+copied marca uma regra como “adicione este alvo e continue varrendo”. Uma tabela LCR já varre a tabela inteira e depois escolhe um candidato mais barato, então não há nada que uma cópia possa contornar. O painel indica isso em vez de deixar a flag parecer significativa.
Diagnosticando uma escolha
outSms.routing.trace, configurado com um número de série ou um id de conta, explica quais regras corresponderam. A seleção em si, qual candidato venceu e a que tarifa, é registrada sob outSms.routing.debug, que só é utilizável em um gateway ocioso; consulte Como funciona o roteamento.
Se uma tabela LCR envia tudo para um fornecedor, verifique nesta ordem:
- O nome da função está escrito como
LCR? - Os outros candidatos têm alguma tarifa de custo, para o produto desta mensagem?
- Os outros candidatos estão aceitando? Um fornecedor que está vinculado mas não pode transmitir é pulado.