osFoundry / Platform
Channel data real-time
Channel pub/sub dengan pengiriman at-least-once, replay riwayat, dan cursor per pelanggan.
Apa itu
Channel data real-time adalah tulang punggung pesan osFoundry untuk memindahkan event antar bagian yang bergerak di workspace Anda. Setiap produsen (sebuah agent, aplikasi yang berjalan, proses kode, atau chat) mempublikasikan pesan ke channel bernama, dan setiap subscriber di channel itu menerimanya. Ini adalah model publish/subscribe klasik: produsen dan konsumen saling terpisah (decoupled), sehingga Anda bisa menambah atau menghapus subscriber tanpa menyentuh kode yang mempublikasikan, dan satu event bisa menyebar ke banyak pembaca sekaligus.
Pengiriman bersifat at-least-once. Pesan yang sudah dipublikasikan akan sampai ke tiap subscriber bahkan melewati reconnect dan restart, dengan konsekuensi bahwa sesekali subscriber bisa melihat pesan yang sama dua kali, jadi konsumen sebaiknya memperlakukan handler-nya sebagai idempoten (kunci pekerjaan berdasarkan id pesan atau lakukan dedupe pada natural key). Channel menyimpan riwayat alih-alih membuang pesan begitu dibaca, dan ini membuka dua hal: replay, di mana subscriber bisa membaca ulang pesan lama dari channel, bukan hanya melihat yang datang secara live, dan cursor per-subscriber, di mana tiap subscriber melacak posisinya sendiri secara independen. Cursor berarti subscriber yang tertinggal, terputus, atau baru menyala kemudian akan melanjutkan tepat dari titik terakhirnya, dan dua subscriber di channel yang sama bisa berada di titik yang benar-benar berbeda dalam stream tanpa saling mengganggu.
Karena osFoundry adalah workspace desktop bring-your-own-key dan local-first, data plane ini berjalan berdampingan dengan pekerjaan Anda, bukan melalui message broker pihak ketiga yang harus Anda sediakan dan bayar per kursi. Channel adalah pipa di balik fitur yang perlu bereaksi terhadap perubahan saat itu terjadi: agent yang mengawasi item baru untuk diproses, aplikasi yang memperbarui begitu data hulu tiba, atau pipeline di mana satu tahap menyerahkan ke tahap berikutnya. Dan channel membuat bagian-bagian itu berkomunikasi tanpa polling maupun kopling ketat, sementara data Anda bisa tetap berada di perangkat Anda.
Kemampuan utama
- Channel pub/sub memisahkan produsen dari konsumen, sehingga satu event yang dipublikasikan menyebar ke tiap subscriber tanpa mengubah kode publisher
- Pengiriman at-least-once membuat pesan bertahan melewati reconnect dan restart; rancang konsumen agar idempoten karena pesan sesekali bisa berulang
- Replay riwayat memungkinkan subscriber membaca ulang pesan lama, bukan hanya menangkap trafik live, berguna untuk yang bergabung terlambat dan untuk pemrosesan ulang
- Cursor per-subscriber melacak posisi tiap pembaca secara independen, jadi subscriber yang lambat, di-restart, atau terlambat melanjutkan tepat dari titik terakhirnya
- Menghubungkan agent, aplikasi, kode, dan chat lewat data plane local-first bersama, tanpa broker eksternal untuk disediakan dan tanpa biaya per kursi
Kasus penggunaan
- Pembuat agent: sebuah agent berlangganan channel tugas masuk dan memproses tiap tugas, melanjutkan dari cursor-nya setelah restart tanpa melewatkan atau memproses ulang pekerjaan
- Developer aplikasi: aplikasi workspace berlangganan channel dan memperbarui tampilannya begitu data hulu dipublikasikan, bukan melakukan polling dengan timer
- Penulis pipeline: tahap satu mempublikasikan hasil ke channel yang dikonsumsi tahap dua, dengan replay tersedia untuk memproses ulang riwayat setelah perubahan logika
Pertanyaan yang sering diajukan
Apa arti pengiriman at-least-once bagi kode saya?
Ini menjamin pesan yang dipublikasikan sampai ke tiap subscriber bahkan melewati putus koneksi dan restart, tetapi subscriber sesekali bisa menerima pesan yang sama lebih dari sekali. Buat handler Anda idempoten (dedupe pada id pesan atau natural key) agar pengulangan tidak berbahaya, bukan terhitung ganda.
Bisakah subscriber baru atau yang di-restart menyusul pesan yang terlewat?
Bisa. Channel menyimpan riwayat dan tiap subscriber punya cursor sendiri, jadi subscriber yang bergabung terlambat atau kembali setelah restart bisa memutar ulang pesan lama dan melanjutkan dari posisi tercatat terakhirnya, bukan hanya melihat trafik yang datang saat ia terhubung.
Apakah dua subscriber di channel yang sama berbagi satu posisi dalam stream?
Tidak. Cursor bersifat per-subscriber, jadi tiap pembaca maju secara independen. Satu subscriber bisa sudah menyusul pesan terbaru sementara yang lain masih menggarap riwayat lama di channel yang sama, dan tak satu pun memengaruhi yang lain.