2011-08-25 24 views
14

2 hizmetim var. Her ikisinin de aynı kanala abone olması gerekiyor.Redis Pub/Sub'da Rekabet Tüketici destekleniyor mu?

2 hizmetler yük dengeli. Her servis birden fazla sunucuda çalışır.

Her hizmetin yalnızca 1 örneğinin o kanalın iletisini tükettiğinden nasıl emin olabilirim.

Bu, Redis'de destekleniyor mu?

Teşekkür

cevap

19

PubSub bu şekilde çalışmıyor - mesaj bağlı tüm abone istemciler gider. Ancak, kanalın bir güncellemenin bir listeye bildirilmesi için ayarlayabilirsiniz. Bu sayede tüm müşteriler mesajı alacaklar, ancak LPOP ile sadece listeden bir öğe alabilir.

+0

Bu harika bir fikir. "Kanalın bir güncellemenin bir listeye bildirilmesi için ayarlanması" ile ilgili daha ayrıntılı bilgi verebilir misiniz? Teşekkürler – jordan

+3

Bir mesaj gönderdiğinizde sadece iki komutu çalıştırın - bir RPUSH ve bir PUBLISH. Bir müşteri SUBSCRIBE kullanarak bir mesaj aldığında, listede LPOP'yi aramasını sağlayın. LPOP başka bir şey döndürmezse, başka bir çalışan mesajı zaten işledi ve göz ardı edilebilir. –

+0

Ancak, yayıncının aboneyi bilmesi ve gözlem desenini kırması gerekiyor. Örneğin. Artık yayıncım, mesajın 2 servisini kullandığını biliyor. Yani 2 kanala 2 RPUSH göndermeliyim. Her kanal bir servise eşlenir. Fikrinizi tam olarak anladığımdan emin değil misiniz? teşekkürler – jordan

21

Başka bir yaklaşım, hizmet örneklerinden B*POP kullanmak olacaktır. Bir listeye karşı B*POP çalıştıran çok sayıda istemciniz varsa, LPUSH her ne zaman, bu istemcilerden biri verileri alır, ancak yalnızca bir tane alır.

+3

Eminim ki burada yapılacak en doğru şey budur. – djechlin

+2

'(true) {BLPOP}' gerçekten basittir, teşekkürler! – soulmachine

İlgili konular