Routing
🧭 Routing & Namespaces
🌍 Overview
MAPS Messaging supports dynamic and static routing of messages between distributed servers or nodes. The routing subsystem allows devices and clients to connect to the closest or most available server automatically and helps ensure horizontal scalability across different geographic regions or tenants.
Routing behavior is configured through the Routing.yaml file, while namespace isolation per user or tenant is handled via the TenantManagement.yaml configuration.
🚦 Routing Configuration (Routing.yaml)
Routing:
enabled: false
autoDiscovery: true
predefinedServers:
- name: commonName
url: https://host:8080/
- name: commonName1
url: https://localhost:8080/
🛠️ Field Reference
| Field | Description |
|---|---|
enabled | Whether routing is enabled. If false, no remote forwarding occurs. |
autoDiscovery | Enables discovery of nearby MAPS servers using multicast or similar tech. |
predefinedServers | List of statically defined server endpoints. |
Routing is especially useful in distributed deployments where devices may connect to different edge nodes or region-specific servers.
🔎 If
autoDiscoveryis enabled, devices can find the best MAPS node based on availability or proximity.
🗂️ Tenant-Based Namespace Management (TenantManagement.yaml)
This file defines how users are mapped to logical namespaces. Each user or group may have a dedicated prefix (namespace root), isolating their message topics and queues.
Example:
TenantManagement:
data:
- name: default
namespaceRoot: /
scope: user
- name: global
namespaceRoot: /common/
scope: global
- name: matthew
namespaceRoot: /
scope: user
🔍 Explanation
| Field | Description |
|---|---|
name | Username, group name, or default. Can use tokens like {user} or {protocol}. |
namespaceRoot | Base path used as namespace prefix for all destinations. |
scope | Scope of the namespace. Can be user, group, or global. |
Example: If user
alicehas a namespaceRoot of/tenantA/, her published topicsensor/1will be scoped as/tenantA/sensor/1internally.
🧠 Routing + Namespace Use Case
When combined, routing and namespace scoping allow:
- Seamless routing to the correct regional or tenant-specific server.
- Scoped destinations per user/group/tenant.
- Cleaner multi-tenant separation with shared infrastructure.
✅ Best Practices
- Enable
autoDiscoveryonly in trusted or private networks. - Use
predefinedServersin production for full control over routing. - Define a
defaultnamespace fallback to avoid connection failures for unknown users. - Use scoped namespaceRoots (e.g.,
/tenant1/,/tenant2/) for secure message isolation. - Use
{user}or{protocol}tokens to dynamically generate namespace paths.