POS BFF — Events
POS BFF — только консьюмер Kafka. Никогда не публикует. Все события, которые он получает, форвардит в SSE-канал POS Desktop (см. SSE stream).
Потребляет
| Kafka Topic | Consumer Group | SSE event | Что делает POS |
|---|---|---|---|
catalog.product.upserted | pos-bff-sse-${HOSTNAME} | menu.invalidate | menuStore.checkForUpdates() |
catalog.product.deleted | pos-bff-sse-${HOSTNAME} | menu.invalidate | menuStore.checkForUpdates() |
catalog.category.upserted | pos-bff-sse-${HOSTNAME} | menu.invalidate | menuStore.checkForUpdates() |
catalog.category.deleted | pos-bff-sse-${HOSTNAME} | menu.invalidate | menuStore.checkForUpdates() |
catalog.modifier_group.upserted | pos-bff-sse-${HOSTNAME} | menu.invalidate | menuStore.checkForUpdates() |
catalog.modifier_group.deleted | pos-bff-sse-${HOSTNAME} | menu.invalidate | menuStore.checkForUpdates() |
catalog.stoplist.updated | pos-bff-sse-${HOSTNAME} | menu.invalidate | menuStore.checkForUpdates() |
store.table.upserted | pos-bff-sse-${HOSTNAME} | table.invalidate | tablesStore.reload() |
aggregator.order.received | pos-bff-sse-${HOSTNAME} | aggregator.invalidate | aggregatorStore.reload() |
marketing.slide.changed (BR 6.1) | pos-bff-sse-${HOSTNAME} | marketing.invalidate | На /standby — reload активных слайдов через GET /pos/api/v1/marketing/active |
Per-pod Consumer Group
Каждый под (replica) pos-bff имеет уникальный suffix
${HOSTNAME}в group-id, чтобы все реплики получали все события. Иначе SSE-клиенты, подключённые к под-A, не увидели бы события, обработанные под-B.
Routing по store_id
Pos-bff фильтрует входящие события по payload.store_id и рассылает SSE только клиентам этой ТТ (broadcastToStore(store_id, ...)). Это критично — кассы разных ТТ не должны получать «чужие» обновления.
Debouncing
Для menu.* событий — debounce 300ms на batch-апдейт каталога (при массовом импорте товаров pos-bff не шлёт 1000 SSE-событий, а одно после паузы).
Для marketing.slide.changed — debounce не применяется (изменения редкие, важна моментальность).
Heartbeat
Каждые 30 секунд pos-bff шлёт : ping\n\n в SSE-канал — страхует от idle-kill промежуточных прокси (Nginx, CloudFlare).
Публикует
Не публикует ни в один Kafka топик. POS BFF — потребительский слой.
Ссылки
- Event Bus — общая SSE-архитектура
- Store Service Events — источник
store.table.upsertedиmarketing.slide.changed - Catalog Service Events
- Aggregator Service Events