Sobes.tech
Middle+

/* Bir kaynaktan bir tüketiciye veri aktarmamız gerekiyor. Kaynak, verileri küçük paketler halinde (~on kayıt) sağlar, oysa tüketici büyük paketlerle (~bin kayıt) daha verimli çalışır. Gerçek bir örnek, Kafka türü kuyruklardan verileri Clickhouse veritabanına aktarmaktır. Kaynak: - Neredeyse sonsuz. - Kaynak, bir Next çağrısında hiçbir zaman MaxItems'ten fazla kayıt döndürmez. - Bir "oturum" (bir Pipe fonksiyon çağrısı) içinde, kaynak her Next çağrısında yeni veriler döndürür. - Ancak, yeniden başlatmadan sonra, kaynak önceki "onaylanmış" konumdan, cookie ile belirlenen noktadan başlar. Bu nedenle, Next'in döndürdüğü her cookie değeri, veriler alıcıya kaydedildikten sonra, aynı sırayla Commit çağrısı ile onaylanmalıdır. Alıcı: - Aynı anda MaxItems'ten fazla işleyemez. Gerekli: func Pipe(p Producer, c Consumer) error fonksiyonunu uygulamak, kaynakdan veri okuyup, bunları MaxItems boyutunu aşmayan bir tamponda gruplamak ve alıcıya kaydetmek, ve ardından kaynaktaki ilerlemeyi onaylamaktır. */ const MaxItems = 9999 type Producer interface { // Next: // - İşlenmek üzere bir paket döndürür // - İşlem tamamlandıktan sonra onaylanacak cookie // - Hata Next() (items []any, cookie int, err error) // Commit, veri paketini işlendi olarak işaretlemek için kullanılır Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }