Engineering

IAMP vs CloudEvents: Why We Built a New Message Protocol

CloudEvents is great for interop. But it knows nothing about intent, priority, or SLAs.

LF

Lena Fischer

Systems Architect

December 10, 2024

10 min read

IAMPProtocolCloudEvents

We considered adopting CloudEvents when designing OwlMQ's message format. It's a CNCF standard, well-supported, and widely understood. Ultimately, we built our own — IAMP — and this post explains the decision.

What CloudEvents gets right

CloudEvents solves interoperability. If you're integrating Kafka, Pub/Sub, EventBridge, and Knative in the same architecture, CloudEvents gives you a common envelope. The spec is clean: id, source, specversion, type, data. That's it.

For event-driven architectures where the events cross system boundaries and need to be understood by multiple platforms, CloudEvents is the right choice.

What CloudEvents doesn't do

CloudEvents is silent on three things that matter deeply for a message queue:

  • Intent: What does this message mean semantically? CloudEvents has type (a string), but no standard for expressing intent in a way a router can reason about.
  • Priority: Should this message be processed before others? CloudEvents has no priority concept.
  • SLA: How long can this message wait? There's no deadline or SLA expression in the spec.

These aren't minor omissions. They're the core inputs to AI-powered routing, priority queuing, and self-healing playbooks.

The IAMP envelope

IAMP adds a metadata block to every message:

{
  "intent": "payment.process",
  "metadata": {
    "priority": "high",
    "ttl": 3600,
    "sla": { "maxLatencyMs": 200 }
  }
}

This is enough for OwlMQ's router to make AI-powered routing decisions, enforce SLAs, and trigger playbooks — all without any per-tenant configuration.

Compatibility

IAMP is a superset of CloudEvents. If you publish a CloudEvents-formatted message to OwlMQ, it works — the router uses best-effort intent inference from the type field. You can opt into the full IAMP envelope incrementally. We provide migration tooling to add IAMP fields to existing publishers without changing your consumer contracts.