DistributedChallenge icon indicating copy to clipboard operation
DistributedChallenge copied to clipboard

Redis Stream'in Multiple Consumer Desteği Hk.

Open ismkdc opened this issue 8 months ago • 1 comments

Selamlar, Redis stream'i consume ederken yükümüz arttıkça birden fazla consumer kullanmaya ihtiyacımız olabilir. Eğer hali hazırdaki RedisService üzerindeki Pop metodundan ilerlersek karşımıza bazı race condition problemleri çıkabilir. Pop metodu sırasıyla şöyle çalışıyor: 1-)Streamden mesajı oku, 2-)Mesajı streamden sil, 3-)Okuduğun mesajı return et.

Multi-thread bir dünyada, daha da önemlisi multi-instance bir dünyada, bu kullanım aynı anda birden fazla parçanın aynı mesajı okuyup işlemesine yol açabilir. Bu durum da sistemin kararlılığına zarar verebilir.

Bu problemi çözmek için redis stream'deki consumer group özelliğinden yararlanabiliriz. Consumer group özelliği, aynı consumer grubu paylaşan consumerların, bir mesajın aynı anda tek bir consumer'a iletileceğini garanti ediyor. Konu hk daha fazla bilgi: https://redis.io/docs/latest/develop/data-types/streams/#consumer-groups

Ayrıca, bu özelliği kullanan bir adet PoC geliştirdim onu da aşağıya bırakıyorum :) https://gist.github.com/ismkdc/1eef375d46995fa7a793a5584f2f3a89

ismkdc avatar Jun 18 '24 14:06 ismkdc