Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao usar o Durable Task SDK for Go, você pode definir orquestrações, atividades e entidades duráveis como funções do Go. Hospede a aplicação na sua própria plataforma de computação. O Durable Task Scheduler armazena o histórico de execução e despacha o trabalho para seus workers em 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 embarcados 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 container compatível para o emulador Durable Task Scheduler.
- Para Azure, um escalonador e hub de tarefas existentes, e uma identidade com a função Durable Task Data Contributor. Veja 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 registrar dependências transitivas e somas de verificação.
Para uma aplicação completa que inicia um trabalhador, agenda atividades paralelas, lê seus resultados e desliga, veja Criar um aplicativo com SDKs de Tarefas Duráveis - Go.
Modelo de programação
O SDK é enviado como um único módulo Go. Seus principais pacotes são:
| Package | Purpose |
|---|---|
task |
Orquestração, atividade e contextos de entidade; registro de tarefas; primitivas de workflow duráveis. |
durabletaskscheduler |
Opções de conexão, e conexões separadas de clientes e trabalhadores para o Durable Task Scheduler. |
client |
Configuração de 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 requisição de gerenciamento. |
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). Leia a entrada tipada com GetInput, e retorne um resultado serializável ou um erro. JSON é o formato padrão de dados.
Registrar e executar tarefas
Crie um Registro com task.NewTaskRegistry. Registre nomes estáveis com AddOrchestratorN, AddActivityN e AddEntityN e verifique erros de registro. Os nomes usados em chamadas de atividade e agendamento de clientes devem corresponder às inscrições.
Analise sintaticamente a cadeia de conexão com durabletaskscheduler.NewOptionsFromConnectionString. Passe as opções para:
-
durabletaskscheduler.NewClientpara iniciar e gerenciar instâncias de orquestração. -
durabletaskscheduler.NewWorkerpara executar tarefas registradas.
Chame Start no worker para começar a processar os itens de trabalho. Use client.WithAutoWorkItemFilters() para derivar filtros de roteamento de workers a partir do registry. Não deixe um trabalhador consumir tarefas registradas apenas por outro aplicativo.
O cliente e o trabalhador possuem conexões separadas. Feche o aplicativo cliente quando terminar. Drene o worker com Shutdown, usando um contexto novo e limitado se o contexto de execução da aplicação expirou. O guia de início rápido verifica os erros das duas operações.
Escrever orquestradores determinísticos
Use o contexto de orquestração para operações Durable:
| Operation | Go API | Learn more |
|---|---|---|
| Sequenciar atividades | ctx.CallActivity(...).Await(&result) |
Encadeamento de funções |
| Fan-out e fan-in | Agende todas as tarefas, depois ctx.WhenAll(tasks...) e leia os resultados com Await |
Fan-out/fan-in |
| Atraso | ctx.CreateTimer(duration).Await(nil) |
Temporizadores duráveis |
| Espere por um evento | ctx.WaitForSingleEvent(name, timeout).Await(&result) |
Eventos externos |
| Chame um fluxo de trabalho filho | ctx.CallSubOrchestrator(...).Await(&result) |
Sub-orquestrações |
| Repetir uma atividade | task.WithActivityRetryPolicy |
Tratamento de erros e novas tentativas |
| Comece um novo histórico | ctx.ContinueAsNew |
Orquestrações eternas |
| Progresso do relatório | ctx.SetCustomStatusValue |
Status personalizado |
| Chame ou sinalize uma entidade |
ctx.CallEntity e ctx.SignalEntity |
Entidades duráveis |
Não realize chamadas de rede, I/O de arquivos, leituras de variáveis de ambiente ou outros trabalhos não determinísticos em um orquestrador. Coloque esse trabalho em atividades. Use as primitivas de concorrência durável do SDK em vez de goroutines nativas, canais, sync.WaitGroup ou time.Sleep, no código do orquestrador. Use ctx.Logger() para registro com reconhecimento de replay. Para detalhes, veja restrições de código do Orchestrator.
As atividades podem realizar E/S Go comum, mas podem ser executadas mais de uma vez. Faça com que os efeitos colaterais externos sejam idempotentes.
Ler os resultados da conclusão
WaitForOrchestrationCompletion retornando sem erro significa que a instância atingiu um estado terminal, não necessariamente que o fluxo de trabalho foi bem-sucedido. Solicite cargas úteis com api.WithFetchPayloads(true), verifique se RuntimeStatus é api.RUNTIME_STATUS_COMPLETED, e então decodifique a saída com ReadOutput.
Para casos de falha, inspecione FailureDetails. Não informe uma orquestração fracassada ou encerrada como resultado bem-sucedido. Veja Gerenciamento de instâncias.
Conecte-se ao emulador ou ao Azure
O quickstart usa a cadeia de conexão Endpoint=http://localhost:8080;TaskHub=default;Authentication=None. Use Authentication=None para desenvolvimento local de emuladores, não para acesso autenticado ao Azure.
Para o Azure, use o endpoint HTTPS do seu 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 logada pelo CLI do Azure. O Go SDK também suporta identidade gerenciada e identidade de carga de trabalho. Para detalhes de configuração e modos de autenticação suportados, consulte o guia de conexão do Go SDK.
O quickstart lê a cadeia de conexão da DTS_CONNECTION_STRING variável ambiente e a passa para NewOptionsFromConnectionString. O SDK não lê essa variável automaticamente.
Exemplos
O repositório do Go SDK inclui amostras executáveis para suas áreas de funcionalidades, incluindo sequências de atividade, fan-out/fan-in, eventos externos, novas tentativas, entidades duráveis, agendamentos, payloads grandes, exportação de histórico e rastreamento distribuído. Para a lista completa, pré-requisitos e instruções de execução, veja os exemplos do Go SDK.
Orquestrações de teste
O SDK não inclui um backend de armazenamento, então as orquestrações rodam apenas contra o Durable Task Scheduler ou seu emulador. Teste atividades e outras lógicas de negócios com testes unitários comuns do Go. Para verificar o comportamento da orquestração, incluindo reexecução, execute testes de integração no emulador ou em um hub de tarefas dedicado.
Considerações de compatibilidade da versão beta
- Agendamentos: Os agendamentos do Go não compartilham seu formato de estado persistente com outros SDKs. Use um hub de tarefas apenas para 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óricos com eventos adicionais que não são de ciclo de vida após uma atividade ou operação filha fracassada. Uma solicitação de rewind aceita não prova a recuperação; verifique um novo ID de execução e a saída bem-sucedida.
- APIs de gerenciamento de emuladores: Listagem de instâncias e purga filtrada têm limitações de emulador documentadas. Prefira limpeza com escopo de instância para exemplos, e não limpe um hub compartilhado.
- Exportação de histórico (prévia): Use um hub de tarefas isolado, apenas Go, e um destino de exportação para que os jobs de exportação não possam exportar ou excluir dados de aplicação não relacionados.
Consulte a matriz de recursos e guia de transporte do SDK Go para compatibilidade detalhada e comportamento do ciclo de vida.