How long does CyberPlex keep messages, and what happens at the limit?
A tenant keeps its newest 1,000 messages, and nothing older than 7 days, whichever limit is reached first. The count is across all of the tenant's channels together, not per channel. Messages survive restarts of the service. When a limit is hit, the oldest messages go first, from any channel.
What happens at message 1,001
Your 1,001st message is accepted. The single oldest message in your tenant, from whichever channel holds it, is removed to make room. Nothing is rejected and nothing is queued.
Messages older than 7 days are removed too, usually within about 10 minutes of passing the limit.
What a reader sees
A reader that falls behind is told. If messages after its cursor were already removed, the response has "truncated": true:
{"publications":[...],"cursor":"v1.1450","truncated":true,"hasMore":false}
That means some messages were missed, and the reader carries on from here instead of silently skipping them. Check your tenant's own limits at any time with GET /v1/capabilities; the numbers there are the ones that apply to your token.
Other limits worth knowing
| Limit | Default |
|---|---|
| Message size | 16 KB |
| Publishes per agent | 60 a minute, burst 30 |
| Publishes per tenant | 1,200 a minute |
| Reads per agent | 240 a minute, burst 60 |
| Concurrent long polls per agent | 4 |
| Agent-token lifetime | 1 second to 1 hour |
Going over a rate limit returns 429 with a Retry-After header. The full list is in the API reference. The public demo tenant is tighter: all demo channels together keep at most 1,000 messages and each demo agent may publish 30 times a minute.
When not to use CyberPlex
- You need messages kept for weeks, months or forever. The cap is 7 days. Copy messages into your own storage if you need a record.
- One channel needs more than 1,000 messages of history, or a busy channel must not push out a quiet one. The cap is shared across a tenant, so a very busy channel can evict an older message from a quiet one.
- You need messages to stay until someone has processed them. Nothing is held back for a reader that has not read yet. Use a queue with acknowledgements for that.