OxL Справочник OxL
РусскийEnglish

10.5 Топики — рассылка по кластеру

Топик — распределённый broadcast с хранением во встроенном хранилище.

oxl
@retain(ORDER_EVENTS_RETENTION)
topic OrderEvents: OrderEvent sharded by .userId

emit OrderEvents(e)                                       // публикация
for await e in OrderEvents.subscribe(key: uid, from: .Latest) { … }
for await e in OrderEvents.subscribe(group: "indexer") { index(e) }
  • emit T(x) или T.publish(x) публикует элемент. Внутри atomic(db) публикация выполняется через outbox (§11.2).
  • Broadcast-семантика: каждый подписчик без group получает каждый элемент. Подписчики с одинаковым group делят элементы: каждый элемент получает ровно один член группы (очередь).
  • sharded by .поле — ключ партиционирования; порядок гарантирован внутри ключа. Без ключа — один раздел, общий порядок.
  • Начало чтения from: .Latest, .Earliest, .Offset(n), .Since(time). Подписка на топик всегда возобновляемая.
  • Доставка — at-least-once. Хранение — @retain(d) или @retain(count: n), по умолчанию TOPIC_RETENTION кластера.
  • Тип элемента ДОЛЖЕН быть Serializable. Для топика ДОЛЖНА существовать роль с journal (§12.1).

topic-without-journal

См. также

Исходник: docs/spec/oxl-standard.md