Inicio rápido: Envío de trabajos para su puesta en cola y enrutamiento

Importante

La funcionalidad que se describe en esta sección se encuentra actualmente en versión preliminar privada. La versión preliminar privada incluye acceso a los SDK y la documentación para realizar pruebas que todavía no están disponibles públicamente. Envíe una solicitud para convertirse en un usuario pionero; para ello, rellene el formulario de acceso de versión preliminar a Azure Communication Services.

Para empezar a trabajar con el enrutador de trabajos de Azure Communication Services, configure el cliente. Luego, puede configurar funcionalidades básicas, como colas, directivas, roles de trabajo y trabajos. Para más información sobre los conceptos del enrutador de trabajos, consulte la documentación conceptual del enrutador de trabajos.

Requisitos previos

Instalación

Creación de una aplicación de C#

En una ventana de consola (por ejemplo, cmd, PowerShell o Bash), use el comando dotnet new para crear una nueva aplicación de consola con el nombre JobRouterQuickstart. Este comando crea un sencillo proyecto "Hola mundo" de C# con un solo archivo de origen: Program.cs.

dotnet new console -o JobRouterQuickstart

Cambie el directorio a la carpeta de la aplicación recién creada y use el comando dotnet build para compilar la aplicación.

cd JobRouterQuickstart
dotnet build

Instalar el paquete

Durante la versión preliminar privada, descargue el SDK de GitHub\.

Nota

Debe ser miembro del grupo de versión preliminar privado para descargar los SDK.

Agregue las directivas using siguientes al principio de Program.cs para incluir los espacios de nombres JobRouter.

using Azure.Communication.JobRouter;
using Azure.Communication.JobRouter.Models;

Actualice la signatura de función Main para que sea async y devuelva un objeto Task.

static async Task Main(string[] args)
{
  ...
}

Autenticación del cliente del enrutador de trabajos

Los clientes del enrutador de trabajos se pueden autenticar mediante la cadena de conexión adquirida de un recurso Azure Communication Services en Azure Portal.

// Get a connection string to our Azure Communication Services resource.
var connectionString = "your_connection_string";
var client = new RouterClient(connectionString);

Creación de una directiva de distribución

El enrutador de trabajos usa una directiva de distribución para decidir cómo se notificará a los roles de trabajo los trabajos disponibles y el período de vida de las notificaciones, lo que se conoce como ofertas. Para crear la directiva, especifique el identificador, un nombre, un valor de offerTTL y un modo de distribución.

var distributionPolicy = await routerClient.SetDistributionPolicyAsync(
    id: "distribution-policy-1",
    name: "My Distribution Policy",
    offerTTL: TimeSpan.FromSeconds(30),
    mode: new LongestIdleMode()
);

Creación de una cola

Para crear la cola, especifique un identificador y un nombre, y proporcione el identificador de objeto de la directiva de distribución que creó anteriormente.

var queue = await routerClient.SetQueueAsync(
    id: "queue-1",
    name: "My Queue",
    distributionPolicyId: distributionPolicy.Value.Id
);

Enviar un trabajo

Ahora se puede enviar un trabajo directamente a esa cola, con un selector de trabajo que exige que el trabajo tenga la etiqueta Some-Skill mayor que 10.

var job = await routerClient.CreateJobAsync(
    channelId: "my-channel",
    queueId: queue.Value.Id,
    priority: 1,
    workerSelectors: new List<LabelSelector>
    {
        new LabelSelector(
            key: "Some-Skill", 
            @operator: LabelOperator.GreaterThan, 
            value: 10)
    });

Registro de un rol de trabajo

Ahora se registra un trabajo para recibir trabajo de esa cola, con una etiqueta Some-Skill igual a 11 y capacidad en my-channel.

var worker = await routerClient.RegisterWorkerAsync(
    id: "worker-1",
    queueIds: new[] { queue.Value.Id },
    totalCapacity: 1,
    labels: new LabelCollection()
    {
        ["Some-Skill"] = 11
    },
    channelConfigurations: new List<ChannelConfiguration>
    {
        new ChannelConfiguration("my-channel", 1)
    }
);

Oferta

Se debe obtener un valor RouterWorkerOfferIssued de la suscripción de EventGrid. Pero también se podría esperar unos segundos y consultar el trabajo directamente en la API de JobRouter para ver si se le ha emitido una oferta.

await Task.Delay(TimeSpan.FromSeconds(2));
var result = await routerClient.GetWorkerAsync(worker.Value.Id);
foreach (var offer in result.Value.Offers)
{
    Console.WriteLine($"Worker {worker.Value.Id} has an active offer for job {offer.JobId}");
}

Ejecute la aplicación con dotnet run y observe los resultados.

dotnet run


Worker worker-1 has an active offer for job 6b83c5ad-5a92-4aa8-b986-3989c791be91

Nota

La ejecución de la aplicación más de una vez hará que se coloque un nuevo trabajo en la cola cada vez. Como consecuencia, al rol de trabajo se le puede ofrecer un trabajo distinto al que se creó al ejecutar el código anterior. Dado que esto puede sesgar la solicitud, considere la posibilidad de quitar trabajos de la cola cada vez. Consulte la documentación del SDK para administrar colas o trabajos.