Sobes.tech
Middle+

/* Морамо пренети податке из извора у неку врсту потрошача. Извор даје податке у малим пакетићима (~десет записа), док потрошач ради ефикасније са већим пакетићима (~хиљаду записа). Прави пример је пренос података из Kafka типа редова у базу података Clickhouse. Извор: - Практично бесконачан. - Извор никада не враћа више од MaxItems записа у једном позиву Next. - У оквиру једне "сесије" (једног позива функције Pipe), извор сваки пут враћа нове податке на сваки позив Next. - Међутим, након поновног покретања, извор почиње од претходне "потврђене" позиције, дефинисане cookie-јем. Због тога, *свака* вредност cookie-ја коју врати Next, након што се подаци сачувају у примаоцу, мора бити потврђена позивом Commit, у истом редоследу у коме су враћени од стране Next. Прималац: - Не може обрадити више од MaxItems одједном. Потребно је имплементирати функцију func Pipe(p Producer, c Consumer) error која чита податке из извора, групише их у буфер величине не већој од MaxItems и чува у примаоцу, након чега потврђује напредак у извору. */ const MaxItems = 9999 type Producer interface { // Next враћа: // - пакет ставки за обраду // - cookie за потврду када је обрада завршена // - грешка Next() (items []any, cookie int, err error) // Commit се користи за означавање пакета података као обрађеног Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }