Compartilhar via


Mecanismo de regra de função do Azure

Como parte do modelo de extensibilidade do cliente, o Roteador de Trabalhos dos Serviços de Comunicação do Azure dá suporte a um mecanismo de regra baseado em Função do Azure. Ele oferece a capacidade de trazer sua própria função do Azure. Com o Azure Functions, você pode incorporar lógica personalizada e complexa ao processo de roteamento.

Criar uma função do Azure

Se você não estiver familiarizado com Azure Functions, consulte a Introdução ao Azure Functions para saber como criar sua primeira função com a ferramenta e linguagem favoritas.

Observação

Sua Função do Azure precisará ser configurada para usar um gatilho Http

O corpo da solicitação Http que é enviado à sua função incluirá os rótulos de cada uma das entidades envolvidas. Por exemplo, se você estiver escrevendo uma função para determinar a prioridade do trabalho, o conteúdo incluirá todos os rótulos de trabalho sob a chave job.

{
    "job": {
        "label1": "foo",
        "label2": "bar",
        "urgent": true,
    }
}

O exemplo a seguir inspecionará o valor do rótulo urgent e retornará uma prioridade de 10 se ele for verdadeiro.

public static class GetPriority
{
    [FunctionName("GetPriority")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        var priority = 5;
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        var data = JsonConvert.DeserializeObject<JObject>(requestBody);
        var isUrgent = data["job"]["urgent"].Value<bool>();
        if (isUrgent)
            priority = 10;

        return new OkObjectResult(JsonConvert.SerializeObject(priority));
    }
}

Configurar uma política para usar a função do Azure

Inspecione a função implantada no portal do Azure e localize o URI da função e a chave de autenticação. Em seguida, use o SDK para configurar uma política que usa um mecanismo de regra para apontar para essa função.

await administrationClient.CreateClassificationPolicyAsync(
    new CreateClassificationPolicyOptions("policy-1") {
        PrioritizationRule = new FunctionRouterRule(new Uri("<insert function uri>")) {
            Credential = new FunctionRouterRuleCredential("<insert function key>")
        }});

Quando um novo trabalho for enviado ou atualizado, essa função será chamada para determinar a prioridade do trabalho.

Errors

Se a Função do Azure falhar ou retornar um código diferente de 200, o trabalho será movido para o estado ClassificationFailed e você receberá um JobClassificationFailedEvent da Grade de Eventos contendo detalhes do erro.

Próximas etapas