Add three DBOS SDK skills with reference documentation for building reliable, fault-tolerant applications with durable workflows. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
1.9 KiB
Markdown
66 lines
1.9 KiB
Markdown
---
|
|
title: Initialize Client for External Access
|
|
impact: HIGH
|
|
impactDescription: Enables external applications to interact with DBOS workflows
|
|
tags: client, external, setup, initialization
|
|
---
|
|
|
|
## Initialize Client for External Access
|
|
|
|
Use `dbos.NewClient` to interact with DBOS from external applications like API servers, CLI tools, or separate services. The Client connects directly to the DBOS system database.
|
|
|
|
**Incorrect (using full DBOS context from an external app):**
|
|
|
|
```go
|
|
// Full DBOS context requires Launch() - too heavy for external clients
|
|
ctx, _ := dbos.NewDBOSContext(context.Background(), config)
|
|
dbos.Launch(ctx)
|
|
```
|
|
|
|
**Correct (using Client):**
|
|
|
|
```go
|
|
client, err := dbos.NewClient(context.Background(), dbos.ClientConfig{
|
|
DatabaseURL: os.Getenv("DBOS_SYSTEM_DATABASE_URL"),
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer client.Shutdown(10 * time.Second)
|
|
|
|
// Send a message to a workflow
|
|
err = client.Send(workflowID, "notification", "topic")
|
|
|
|
// Get an event from a workflow
|
|
event, err := client.GetEvent(workflowID, "status", 60*time.Second)
|
|
|
|
// Retrieve a workflow handle
|
|
handle, err := client.RetrieveWorkflow(workflowID)
|
|
result, err := handle.GetResult()
|
|
|
|
// List workflows
|
|
workflows, err := client.ListWorkflows(
|
|
dbos.WithStatus([]dbos.WorkflowStatusType{dbos.WorkflowStatusError}),
|
|
)
|
|
|
|
// Workflow management
|
|
err = client.CancelWorkflow(workflowID)
|
|
handle, err = client.ResumeWorkflow(workflowID)
|
|
|
|
// Read a stream
|
|
values, closed, err := client.ClientReadStream(workflowID, "results")
|
|
|
|
// Read a stream asynchronously
|
|
ch, err := client.ClientReadStreamAsync(workflowID, "results")
|
|
```
|
|
|
|
ClientConfig options:
|
|
- `DatabaseURL` (required unless `SystemDBPool` is set): PostgreSQL connection string
|
|
- `SystemDBPool`: Custom `*pgxpool.Pool`
|
|
- `DatabaseSchema`: Schema name (default: `"dbos"`)
|
|
- `Logger`: Custom `*slog.Logger`
|
|
|
|
Always call `client.Shutdown()` when done.
|
|
|
|
Reference: [DBOS Client](https://docs.dbos.dev/golang/reference/client)
|