Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Ao usar o Durable Task SDK for Go, pode definir orquestrações, atividades e entidades duráveis como funções Go. Aloje a aplicação na sua própria plataforma de processamento. O Durable Task Scheduler armazena o histórico de execução e despacha o trabalho para os seus trabalhadores do Go.
Importante
O SDK do Go está em beta. Este artigo e o quickstart do Go usam a v1.0.0-beta3. A beta não é um substituto direto para a v0.6.0: não suporta backends SQLite e PostgreSQL embutidos nem o host gRPC standalone. Go não é uma linguagem Durable Functions.
Pré-requisitos e instalação
- Go 1.25 ou posterior.
- Docker ou um runtime de contentores compatível para o emulador Durable Task Scheduler.
- Para o Azure, um escalonador e hub de tarefas existentes, e uma identidade com o papel Durable Task Data Contributor. Ver acesso baseado em identidade.
Instale a beta lançada a partir de um módulo Go existente:
go get github.com/microsoft/durabletask-go@v1.0.0-beta3
Depois de adicionar importações de SDK ao seu código, execute go mod tidy para registar dependências transitivas e somas de verificação.
Para uma aplicação completa que inicia um trabalhador, agenda atividades paralelas, lê os seus resultados e desliga, veja Criar uma aplicação com SDKs de Tarefas Duráveis - Go.
Modelo de programação
O SDK é fornecido como um único módulo Go. Os seus principais pacotes são:
| Package | Purpose |
|---|---|
task |
Orquestração, atividade e contextos de entidades; registo de tarefa; primitivas de workflow duradouras. |
durabletaskscheduler |
Opções de ligação, e ligações separadas de clientes e trabalhadores ao Durable Task Scheduler. |
client |
Configuração dos trabalhadores, incluindo concorrência, versionamento e filtros de itens de trabalho. |
api |
IDs de instância e entidade, metadados de orquestração e opções de pedido de gestão. |
Um orquestrador tem a assinatura func(*task.OrchestrationContext) (any, error). Uma atividade tem a assinatura func(task.ActivityContext) (any, error). Uma entidade baseada em funções tem a assinatura func(*task.EntityContext) (any, error). Lê a entrada tipada com GetInput, e devolve um resultado serializável ou um erro. JSON é o formato de dados predefinido.
Registar e executar tarefas
Crie um registo com task.NewTaskRegistry. Registar nomes estáveis com AddOrchestratorN, AddActivityN e AddEntityN, e verificar erros de registo. Os nomes usados nas chamadas de atividade e no agendamento do cliente devem corresponder aos registos.
Analise a cadeia de ligação com durabletaskscheduler.NewOptionsFromConnectionString. Passe as opções para:
-
durabletaskscheduler.NewClientpara iniciar e gerir instâncias de orquestração. -
durabletaskscheduler.NewWorkerpara executar tarefas registadas.
Chame Start no worker para começar a processar os itens de trabalho. Utilize client.WithAutoWorkItemFilters() para derivar filtros de encaminhamento de trabalhadores a partir do registo. Não deixes que um trabalhador consuma tarefas registadas apenas por outra aplicação.
O cliente e o trabalhador possuem conexões separadas. Feche a aplicação quando terminar. Esvazie o worker com Shutdown, usando um bounded context novo se o contexto de execução da aplicação expirou. O início rápido verifica se existem erros de ambas as operações.
Escrever orquestradores determinísticos
Utilize o contexto de orquestração para operações duradouras:
| Operação | Go API | Learn more |
|---|---|---|
| Sequenciar atividades | ctx.CallActivity(...).Await(&result) |
Encadeamento de funções |
| Expansão e concentração | Agendar todas as tarefas e ctx.WhenAll(tasks...) ler os resultados com Await |
Fan-out/fan-in |
| Delay | ctx.CreateTimer(duration).Await(nil) |
Temporizadores duráveis |
| Esperar por um evento | ctx.WaitForSingleEvent(name, timeout).Await(&result) |
Eventos externos |
| Chamar um fluxo de trabalho filho | ctx.CallSubOrchestrator(...).Await(&result) |
Suborquestrações |
| Tentar novamente uma atividade | task.WithActivityRetryPolicy |
Tratamento de erros e retentativas |
| Comece um novo histórico | ctx.ContinueAsNew |
Orquestrações eternas |
| Reportar progresso | ctx.SetCustomStatusValue |
Estado personalizado |
| Chamar ou sinalizar uma entidade |
ctx.CallEntity e ctx.SignalEntity |
Entidades duráveis |
Não realize chamadas de rede, I/O de ficheiros, leituras de variáveis de ambiente ou outro trabalho não determinístico num orquestrador. Coloque esse trabalho nas atividades. Use as primitivas de concorrência duráveis do SDK em vez de goroutines nativas, canais, sync.WaitGroup ou time.Sleep no código do orquestrador. Usa ctx.Logger() para registo compatível com replay. Para detalhes, veja restrições de código do Orchestrator.
As atividades podem realizar I/O Go normal, mas podem ser executadas mais do que uma vez. Torna os efeitos secundários externos idempotentes.
Ver os resultados da conclusão
WaitForOrchestrationCompletion regressar sem erro significa que a instância atingiu um estado terminal, não necessariamente que o fluxo de trabalho tenha sido bem-sucedido. Solicite payloads com api.WithFetchPayloads(true), verifique se RuntimeStatus é api.RUNTIME_STATUS_COMPLETED, e depois descodifique a saída com ReadOutput.
Para instâncias com falha, verifique FailureDetails. Não reporte uma orquestração falhada ou terminada como resultado bem-sucedido. Veja Gestão de Instâncias.
Liga-te ao emulador ou ao Azure
O quickstart utiliza a cadeia de ligação Endpoint=http://localhost:8080;TaskHub=default;Authentication=None. Utilize Authentication=None para desenvolvimento local de emuladores, não para acesso autenticado ao Azure.
Para o Azure, usa o endpoint HTTPS do teu agendador e o nome do hub de tarefas. Selecione Authentication=DefaultAzure para a cadeia de credenciais Azure Identity, ou Authentication=AzureCLI para uma identidade de desenvolvimento iniciada através do CLI do Azure. O Go SDK também suporta identidade gerida e identidade de carga de trabalho. Para detalhes de configuração e modos de autenticação suportados, consulte o guia de ligação do Go SDK.
O quickstart lê a cadeia de ligação da DTS_CONNECTION_STRING variável de ambiente e passa-a para NewOptionsFromConnectionString. O SDK não lê esta variável automaticamente.
Samples
O repositório Go SDK inclui amostras executáveis para as suas áreas de funcionalidades, incluindo sequências de atividade, fan-out/fan-in, eventos externos, repetições, entidades duradouras, agendamentos, payloads grandes, exportação de histórico e rastreio distribuído. Para a lista completa, pré-requisitos e instruções de execução, consulte os exemplos do Go SDK.
Orquestrações de teste
O SDK não inclui um backend de armazenamento, por isso as orquestrações são executadas apenas contra o Durable Task Scheduler ou o seu emulador. Teste atividades e outra lógica de negócio com testes unitários Go comuns. Para verificar o comportamento da orquestração, incluindo o replay, execute testes de integração no emulador ou num task hub dedicado.
Considerações sobre a compatibilidade beta
- Agendamentos: Os agendamentos do Go não partilham o seu formato de estado persistente com outros SDKs. Use um hub de tarefas só para o Go para tarefas agendadas.
- Bloqueios de entidade: Go e Python usam uma ordenação de bloqueio multi-entidade diferente do .NET. Não adquira conjuntos de bloqueios sobrepostos simultaneamente entre orquestrações Go/Python e .NET.
- Retroceder: O trabalhador do Go rejeita conservadoramente histórias com eventos adicionais que não são do ciclo de vida após uma atividade ou operação subordinada falhada. Um pedido de retrocesso aceite não prova a recuperação; verifique se existe um novo ID de execução e se a saída foi bem-sucedida.
- APIs de gestão de emuladores: Listagem de instâncias e purga filtrada têm limitações documentadas do emulador. Prefira limpeza com escopo de instância para exemplos, e não limpe um hub partilhado.
- Exportação de histórico (pré-visualização): Use um hub de tarefas isolado, apenas Go, e um destino de exportação para que as tarefas de exportação não possam exportar ou eliminar dados de aplicação não relacionados.
Consulte a matriz de funcionalidades e o guia de transporte do Go SDK para compatibilidade detalhada e comportamento ao longo do ciclo de vida.