55 lines
1.4 KiB
Markdown
55 lines
1.4 KiB
Markdown
---
|
|
title: Enqueue Workflows from External Applications
|
|
impact: HIGH
|
|
impactDescription: Enables decoupled architecture with separate API and worker services
|
|
tags: client, enqueue, workflow, external
|
|
---
|
|
|
|
## Enqueue Workflows from External Applications
|
|
|
|
Use `client.enqueue()` to submit workflows from outside the DBOS application. Must specify workflow and queue names explicitly.
|
|
|
|
**Incorrect (missing required options):**
|
|
|
|
```python
|
|
from dbos import DBOSClient
|
|
|
|
client = DBOSClient(system_database_url=db_url)
|
|
|
|
# Missing workflow_name and queue_name!
|
|
handle = client.enqueue({}, task_data)
|
|
```
|
|
|
|
**Correct (with required options):**
|
|
|
|
```python
|
|
from dbos import DBOSClient, EnqueueOptions
|
|
|
|
client = DBOSClient(system_database_url=db_url)
|
|
|
|
options: EnqueueOptions = {
|
|
"workflow_name": "process_task", # Required
|
|
"queue_name": "task_queue", # Required
|
|
}
|
|
handle = client.enqueue(options, task_data)
|
|
result = handle.get_result()
|
|
client.destroy()
|
|
```
|
|
|
|
With optional parameters:
|
|
|
|
```python
|
|
options: EnqueueOptions = {
|
|
"workflow_name": "process_task",
|
|
"queue_name": "task_queue",
|
|
"workflow_id": "custom-id-123",
|
|
"workflow_timeout": 300,
|
|
"deduplication_id": "user-123",
|
|
"priority": 1,
|
|
}
|
|
```
|
|
|
|
Limitation: Cannot enqueue workflows that are methods on Python classes.
|
|
|
|
Reference: [DBOSClient.enqueue](https://docs.dbos.dev/python/reference/client#enqueue)
|