你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
作为客户扩展性模型的一部分,Azure 通信服务职位路由器支持基于 Azure 函数的规则引擎。 它让你能够实现自己的 Azure 函数。 使用 Azure Functions,可以将自定义和复杂逻辑合并到路由过程。
创建 Azure 函数
如果你是 Azure Functions 新手,请参阅 Azure Functions 入门以了解如何使用偏好的工具和语言创建第一个函数。
注意
Azure 函数需要配置为使用 Http 触发器
发送到函数的 Http 请求正文将包含所涉及的每个实体的标签。 例如,如果你正在编写一个用于确定职位优先级的函数,则有效负载将包含 job 键下的所有职位标签。
{
"job": {
"label1": "foo",
"label2": "bar",
"urgent": true,
}
}
以下示例将检查 urgent 标签的值,如果值为 true,则返回优先级 10。
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));
}
}
配置策略以使用 Azure 函数
在 Azure 门户中检查部署的函数,并找到函数 URI 和身份验证密钥。 然后使用 SDK 配置一个使用规则引擎指向该函数的策略。
await administrationClient.CreateClassificationPolicyAsync(
new CreateClassificationPolicyOptions("policy-1") {
PrioritizationRule = new FunctionRouterRule(new Uri("<insert function uri>")) {
Credential = new FunctionRouterRuleCredential("<insert function key>")
}});
在提交或更新新的职位时,将调用此函数来确定该职位的优先级。
错误
如果 Azure 函数失败或返回非 200 代码,则该职位将变为 ClassificationFailed 状态,并且你会收到来自事件网格的 JobClassificationFailedEvent,其中包含错误详细信息。