Files
antigravity-skills-reference/web-app/public/skills/dbos-python/references/comm-messages.md

1.5 KiB

title, impact, impactDescription, tags
title impact impactDescription tags
Use Messages for Workflow Notifications MEDIUM Enables external signals to control workflow execution messages, send, recv, notifications

Use Messages for Workflow Notifications

Send messages to workflows to signal or notify them while running. Messages are persisted and queued per topic.

Incorrect (polling external state):

@DBOS.workflow()
def payment_workflow():
    # Polling is inefficient and not durable
    while True:
        status = check_payment_status()
        if status == "paid":
            break
        time.sleep(1)

Correct (using messages):

PAYMENT_STATUS = "payment_status"

@DBOS.workflow()
def payment_workflow():
    # Process order...
    DBOS.set_event("payment_id", payment_id)

    # Wait for payment notification (60 second timeout)
    payment_status = DBOS.recv(PAYMENT_STATUS, timeout_seconds=60)

    if payment_status == "paid":
        fulfill_order()
    else:
        cancel_order()

# Webhook endpoint to receive payment notification
@app.post("/payment_webhook/{workflow_id}/{status}")
def payment_webhook(workflow_id: str, status: str):
    DBOS.send(workflow_id, status, PAYMENT_STATUS)
    return {"ok": True}

Key points:

  • DBOS.recv() can only be called from workflows
  • Messages are queued per topic
  • recv() returns None on timeout
  • Messages are persisted for exactly-once delivery

Reference: Workflow Messaging