Route Parameters

Learn how to extract dynamic values from MQTT topics using RouteMQ's parameter system, enabling flexible and data-driven message routing.

Parameter Syntax

Route parameters are defined using curly braces {} in topic patterns:

from core.router import Router
from app.controllers.device_controller import DeviceController

router = Router()

# Single parameter
router.on("devices/{device_id}", DeviceController.handle_device)

# Multiple parameters  
router.on("buildings/{building_id}/floors/{floor_id}/sensors/{sensor_id}", 
          DeviceController.handle_sensor)

Parameter Extraction

Parameters are automatically extracted and passed as keyword arguments to your handler functions:

class DeviceController:
    async def handle_device(self, device_id, payload, client):
        """
        device_id: Extracted from {device_id} in the topic
        payload: Message payload
        client: MQTT client instance
        """
        print(f"Handling device: {device_id}")
        data = json.loads(payload)
        # Process device data...

    async def handle_sensor(self, building_id, floor_id, sensor_id, payload, client):
        """
        All parameters extracted from topic pattern
        """
        print(f"Sensor {sensor_id} on floor {floor_id} of building {building_id}")
        # Process sensor data...

Parameter Patterns

Basic Parameters

Nested Parameters

Mixed Static and Dynamic

Parameter Validation

Custom Validation in Handlers

Using Middleware for Validation

Working with Different Data Types

String Parameters (Default)

Converting to Other Types

Advanced Parameter Patterns

Optional-like Behavior with Multiple Routes

Parameter-based Routing Logic

Real-world Examples

IoT Device Management

Multi-tenant Applications

API Gateway Pattern

Error Handling

Parameter Access Errors

Best Practices

Parameter Naming

  • Use descriptive names: {device_id} not {id}

  • Be consistent across routes: always {user_id}, not mixed with {userId}

  • Use snake_case for multi-word parameters: {sensor_type}

Parameter Validation

  • Validate early in handlers or use middleware

  • Provide clear error messages for invalid parameters

  • Log parameter validation failures for debugging

Performance Considerations

  • Keep parameter extraction lightweight

  • Cache converted parameters when doing expensive conversions

  • Use parameter-based caching keys for frequently accessed data

Next Steps

Last updated