Descubra como aceitar ou recusar ofertas de emprego do Job Router

Este guia apresenta as etapas que você precisa seguir para observar uma oferta de Job Router. Também descreve como aceitar ou recusar ofertas de emprego.

Pré-requisitos

Aceitar ofertas de emprego

Depois de criar um trabalho, observe o evento de oferta de trabalhador, que contém o ID do trabalhador e o ID da oferta de trabalho. O trabalhador pode aceitar ofertas de trabalho usando o SDK. Uma vez que a oferta é aceita, o trabalho é atribuído ao trabalhador, e o status do trabalho é atualizado para assigned.

// Event handler logic omitted
var accept = await client.AcceptJobOfferAsync(offerIssuedEvent.Data.WorkerId, offerIssuedEvent.Data.OfferId);
// Event handler logic omitted
const accept = await client.path("/routing/workers/{workerId}/offers/{offerId}:accept",
    offerIssuedEvent.data.workerId, offerIssuedEvent.data.offerId).post();
# Event handler logic omitted
accept = client.accept_job_offer(offerIssuedEvent.data.worker_id, offerIssuedEvent.data.offer_id)
// Event handler logic omitted
AcceptJobOfferResult accept = client.acceptJobOffer(offerIssuedEvent.getData().getWorkerId(), offerIssuedEvent.getData().getOfferId());

Recusar ofertas de emprego

O trabalhador pode recusar ofertas de emprego usando o SDK. Uma vez recusada a oferta, o emprego é oferecido ao próximo trabalhador disponível. O emprego não é oferecido ao mesmo trabalhador que recusou o emprego até que o trabalhador seja cancelado e registrado novamente.

// Event handler logic omitted
await client.DeclineJobOfferAsync(new DeclineJobOfferOptions(workerId: offerIssuedEvent.Data.WorkerId,
    offerId: offerIssuedEvent.Data.OfferId));
// Event handler logic omitted
await client.path("/routing/workers/{workerId}/offers/{offerId}:decline",
    offerIssuedEvent.data.workerId, offerIssuedEvent.data.offerId).post();
# Event handler logic omitted
client.decline_job_offer(offerIssuedEvent.data.worker_id, offerIssuedEvent.data.offer_id)
// Event handler logic omitted
client.declineJobOffer(offerIssuedEvent.getData().getWorkerId(), offerIssuedEvent.getData().getOfferId());

Oferta de repetição depois de algum tempo

Em alguns cenários, um trabalhador pode querer repetir automaticamente uma oferta depois de algum tempo. Por exemplo, um trabalhador pode querer repetir uma oferta após 5 minutos. Para atingir esse fluxo, o trabalhador pode usar o SDK para recusar a oferta e especificar a retryOfferAfter propriedade.

// Event handler logic omitted
await client.DeclineJobOfferAsync(new DeclineJobOfferOptions(workerId: offerIssuedEvent.Data.WorkerId,
    offerId: offerIssuedEvent.Data.OfferId)
{
    RetryOfferAt = DateTimeOffset.UtcNow.AddMinutes(5)
});
// Event handler logic omitted
await client.path("/routing/workers/{workerId}/offers/{offerId}:decline",
    offerIssuedEvent.data.workerId, offerIssuedEvent.data.offerId).post({
        body: {
            retryOfferAt: new Date(Date.now() + 5 * 60 * 1000)
        }
    });
# Event handler logic omitted
client.decline_job_offer(
    worker_id = offerIssuedEvent.data.worker_id,
    offer_id = offerIssuedEvent.data.offer_id,
    retry_offer_at = datetime.utcnow() + timedelta(minutes = 5))
// Event handler logic omitted
client.declineJobOffer(
    offerIssuedEvent.getData().getWorkerId(),
    offerIssuedEvent.getData().getOfferId(),
    new RequestOptions().setBody(BinaryData.fromObject(
        new DeclineJobOfferOptions().setRetryOfferAt(OffsetDateTime.now().plusMinutes(5)))));

Conclua o trabalho

Depois que o trabalhador tiver concluído o trabalho associado ao trabalho (por exemplo, concluído a chamada), concluiremos o trabalho, que atualiza o status para completed.

await routerClient.CompleteJobAsync(new CompleteJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId));
await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:complete", accept.body.jobId, accept.body.assignmentId).post();
router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);

Fechar o trabalho

Quando o trabalhador estiver pronto para assumir novos trabalhos, ele deve fechar o trabalho, o que atualiza o status para closed. Opcionalmente, o trabalhador pode fornecer um código de disposição para indicar o resultado do trabalho.

await routerClient.CloseJobAsync(new CloseJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId) {
    DispositionCode = "Resolved"
});
await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", accept.body.jobId, accept.body.assignmentId).post({
    body: {
        dispositionCode: "Resolved"
    }
});
router_client.close_job(job_id = job.id, assignment_id = accept.assignment_id, disposition_code = "Resolved")
routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), 
    new RequestOptions().setBody(BinaryData.fromObject(new CloseJobOptions().setDispositionCode("Resolved"))));

Próximos passos

  • Analise como gerenciar uma fila do Job Router.
  • Saiba como subscrever eventos do Job Router.