Redis-backed · Spring Boot · Dockerized

Priority Messaging & Retained Queues

A Redis-backed messaging service with project-scoped API keys, priorities, TTL expiry, and non-destructive polling.

api-example.sh
# Publish a priority message with TTL milliseconds
curl -X POST https://api.blinkq.dev/messages \
-H "Authorization: Bearer <YOUR_PROJECT_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"channel": "alerts",
"payload": "Server CPU > 90%",
"priority": 5,
"ttl": 60000
}'
# Non-destructively poll retained messages
curl "https://api.blinkq.dev/messages/poll?channel=alerts&limit=10" \
-H "Authorization: Bearer <YOUR_PROJECT_API_KEY>"
✓200 OK — current retained messages

Built for reliability — not just the happy path

<2ms
p99 Message Latency
5 DSs
Redis Data Structures
ACK+DLQ
Fault Tolerance Model

Core capabilities

A focused retained messaging API

Projects, channels, priorities, TTLs, and clear browser visibility without inventing delivery semantics.

Priority Queue Messaging

Priorities run from 1–5, with 5 highest. Redis sorted sets return higher-priority messages first and older messages first within a priority.

Non-destructive Polling

External consumers poll retained messages by channel and limit. Repeated polls can return the same record; polling does not acknowledge or consume it.

Message TTL & Expiry

Every message has a positive TTL in milliseconds. Redis expires payload keys so short-lived work does not become durable history.

Project-scoped API Keys

Raw keys appear only at project creation or rotation. BlinkQ stores a hash and uses the key only for the external messaging endpoints.

Session Dashboard

Browser management uses an opaque HttpOnly session and CSRF protection for projects, channels, profile settings, and message inspection.

Current Queue Visibility

Inspect up to 100 currently retained records per channel and compare them with an explicitly approximate retained-member count.

How it works

From account to retained message in three steps

Step 01

Create a project & save its key

Sign up, create a project, and copy its one-time API key into a secret manager. Only a hash remains retrievable from BlinkQ.

Step 02

Create a channel

Add a project-scoped channel using lowercase letters, numbers, dots, underscores, or hyphens. Names are unique within each project.

Step 03

Publish & poll retained data

Publish a string payload with priority 1–5 and a millisecond TTL, then inspect it in the session dashboard or poll with the project key.

External API

Plain HTTP. No SDK required.

External messaging is stateless and authenticated with a caller-supplied project Bearer key. Use any HTTP client.

  • POST /messages — publish a string payload with priority and TTL
  • GET /messages/poll — non-destructively read retained messages
  • Priority — integer 1 through 5, where 5 is highest
  • TTL — positive milliseconds
  • Poll limit — 1 through 100
POST/messages
{
  "projectId": "<PROJECT_ID>",
  "channel": "alerts",
  "payload": "Server CPU > 90%",
  "priority": 5,
  "ttl": 60000
}
GET/messages/poll?channel=alerts&limit=10
[
  {
    "messageId": "<MESSAGE_ID>",
    "projectId": "<PROJECT_ID>",
    "channel": "alerts",
    "payload": "Server CPU > 90%",
    "priority": 5,
    "timestamp": 0
  }
]

Ship reliable messaging without the complexity

Priority queues, hybrid push/poll, ACK-based recovery, and Redis-native rate limiting — all behind a simple REST API. Sign up and publish your first message in under two minutes.