Motia Icon
Development Guide

Infrastructure

Configure queue behavior, retries, and timeouts for Event Steps

Infrastructure settings let you control how Event Steps handle queues, retries, and timeouts. Motia provides sensible defaults, so you only configure what you need.

How It Works

Add infrastructure to your Event Step config:

export const config: EventConfig = {
  name: 'SendEmail',
  type: 'event',
  subscribes: ['email.requested'],
  infrastructure: {
    handler: { timeout: 10 },
    queue: { maxRetries: 5, visibilityTimeout: 60 }
  }
}

Configuration Options

Handler Settings

PropertyTypeDefaultDescription
timeoutnumber30Handler timeout in seconds

Queue Settings

PropertyTypeDefaultDescription
typestringstandardQueue type: standard or fifo
maxRetriesnumber3Number of retry attempts on failure
visibilityTimeoutnumber900Seconds before message becomes visible again
delaySecondsnumber0Delay before processing (0-900 seconds)

FIFO Queues

FIFO queues guarantee exactly-once processing and maintain message order within a group.

export const config: EventConfig = {
  name: 'ProcessOrder',
  type: 'event',
  subscribes: ['order.created'],
  infrastructure: {
    queue: {
      type: 'fifo'
    }
  }
}

Message Group ID

When emitting to FIFO queues, pass a messageGroupId:

export const handler: Handlers['CreateOrder'] = async (req, { emit }) => {
  const { orderId, customerId } = req.body
  
  await emit({
    topic: 'order.created',
    data: { orderId, customerId },
    messageGroupId: customerId  // Required for FIFO
  })
}

The messageGroupId ensures events are processed in order within that group.


Default Values

If you don't specify infrastructure settings, Motia uses these defaults:

{
  handler: {
    timeout: 30
  },
  queue: {
    type: 'standard',
    maxRetries: 3,
    visibilityTimeout: 900,
    delaySeconds: 0
  }
}

Need help? See our Community Resources for questions, examples, and discussions.

On this page