web-dev-qa-db-ja.com

Redis Pub / Subで競合するコンシューマーはサポートされていますか?

私は2つのサービスを持っています。どちらも同じチャンネルに登録する必要があります。

2つのサービスは負荷分散されています。各サービスは複数のサーバーで実行されます。

では、各サービスの1つのインスタンスだけがそのチャネルのメッセージを消費することをどのように確認できますか。

これはRedisでサポートされていますか?

ありがとう

34
jordan

Pubsubはそのようには機能しません。メッセージは、接続されているすべてのサブスクライブされたクライアントに送信されます。ただし、チャネルがリストの更新の通知になるように設定することもできます。そうすれば、すべてのクライアントがメッセージを受け取りますが、LPOPを使用してリストからアイテムを取得できるのは1つだけです。

35
Tom Clarkson

別のアプローチは、サービスインスタンスからB*POPを使用することです。リストに対してB*POPを実行しているクライアントが多数ある場合、リストに対してLPUSHすると、それらのクライアントの1つがデータを取得しますが、データは1つだけです。

31
dunedain289