Files
sq/todos/SQ-015-sdk-consumer.md
2026-02-27 12:15:43 +01:00

1.2 KiB

SQ-015: SDK Consumer

Status: [x] DONE Blocked by: SQ-014, SQ-012 Priority: Medium

Description

Ergonomic Rust consumer client in sq-sdk. Wraps the server-streaming Subscribe RPC with poll-based interface and auto-commit support.

Files to Create/Modify

  • crates/sq-sdk/src/consumer.rs - Consumer with poll loop and auto-commit

Consumer API

pub struct ConsumerConfig {
    pub server_addresses: Vec<String>,
    pub consumer_group: String,
    pub topics: Vec<String>,
    pub auto_commit: bool,
    pub auto_commit_interval_ms: u64,
    pub max_poll_records: u32,
}

pub struct Consumer { /* ... */ }

impl Consumer {
    pub async fn connect(config: ConsumerConfig) -> Result<Self, SqError>;
    pub async fn poll(&mut self) -> Result<Vec<ConsumedMessage>, SqError>;
    pub async fn commit(&self, topic: &str, partition: u32, offset: u64) -> Result<(), SqError>;
}

Acceptance Criteria

  • End-to-end: produce 100 messages with Producer, consume all with Consumer
  • Auto-commit: consumed offsets are committed after interval
  • Manual commit: explicit commit stores offset
  • Poll returns empty vec when no new messages (non-blocking)
  • Consumer group: two consumers resume from committed offset