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>
71 lines
2.0 KiB
Markdown
71 lines
2.0 KiB
Markdown
---
|
|
title: Configure and Launch DBOS Properly
|
|
impact: CRITICAL
|
|
impactDescription: Application won't function without proper setup
|
|
tags: configuration, launch, setup, initialization
|
|
---
|
|
|
|
## Configure and Launch DBOS Properly
|
|
|
|
Every DBOS application must create a context, register workflows and queues, then launch before running any workflows.
|
|
|
|
**Incorrect (missing configuration or launch):**
|
|
|
|
```go
|
|
// No context or launch!
|
|
func myWorkflow(ctx dbos.DBOSContext, input string) (string, error) {
|
|
return input, nil
|
|
}
|
|
|
|
func main() {
|
|
// This will fail - DBOS is not initialized or launched
|
|
dbos.RegisterWorkflow(nil, myWorkflow) // panic: ctx cannot be nil
|
|
}
|
|
```
|
|
|
|
**Correct (create context, register, launch):**
|
|
|
|
```go
|
|
func myWorkflow(ctx dbos.DBOSContext, input string) (string, error) {
|
|
return input, nil
|
|
}
|
|
|
|
func main() {
|
|
ctx, err := dbos.NewDBOSContext(context.Background(), dbos.Config{
|
|
AppName: "my-app",
|
|
DatabaseURL: os.Getenv("DBOS_SYSTEM_DATABASE_URL"),
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer dbos.Shutdown(ctx, 30*time.Second)
|
|
|
|
dbos.RegisterWorkflow(ctx, myWorkflow)
|
|
|
|
if err := dbos.Launch(ctx); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
handle, err := dbos.RunWorkflow(ctx, myWorkflow, "hello")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
result, err := handle.GetResult()
|
|
fmt.Println(result) // "hello"
|
|
}
|
|
```
|
|
|
|
Config fields:
|
|
- `AppName` (required): Application identifier
|
|
- `DatabaseURL` (required unless `SystemDBPool` is set): PostgreSQL connection string
|
|
- `SystemDBPool`: Custom `*pgxpool.Pool` (takes precedence over `DatabaseURL`)
|
|
- `DatabaseSchema`: Schema name (default: `"dbos"`)
|
|
- `Logger`: Custom `*slog.Logger` (defaults to stdout)
|
|
- `AdminServer`: Enable HTTP admin server (default: `false`)
|
|
- `AdminServerPort`: Admin server port (default: `3001`)
|
|
- `ApplicationVersion`: App version (auto-computed from binary hash if not set)
|
|
- `ExecutorID`: Executor identifier (default: `"local"`)
|
|
- `EnablePatching`: Enable code patching system (default: `false`)
|
|
|
|
Reference: [Integrating DBOS](https://docs.dbos.dev/golang/integrating-dbos)
|