2017-01-09 4 views
1

TTLの有効期限が切れると(ジョブスケジューラ)、サブスクリプションしたい特定のTTLを持つRedisキーがいくつかあります。ServiceStackを使用した分散環境でのRedisキースペース通知のサブスクリプション

これは単一ホスト環境でうまく動作し、Redisクライアントを使用してServiceStackを登録して'[email protected]__:expired'にすると、そのサービスがそれを選択して対処します。素晴らしいことです...

...高可用性トポロジが設定され、そのクラスター内に複数のAPIインスタンスが設定されるまでは...それから、すべての単一のホストがそのメッセージでピックアップしている可能性があり、潜在的にそれを使用しています。

鍵スペース通知は伝統的なpub/subイベントやメッセージングレイヤイベントとまったく同じようには動作しませんが、これらの種類のイベントに対して何らかの確認応答を行う方法があるので、その日、1人のホストだけがタスクを実行しますか?

それ以外の場合、メッセージの発行を遅らせる方法はありますか?

ありがとうございます!

答えて

1

あなたの質問を理解しました:キーが期限切れになるたびに、イベントベースのユニキャスト通知が必要です。

上記の仮定が正しい場合は、この解決策が役立ちます。それは粗末なソリューションですが、機能します!

ソリューション: はどういうわけか、あなたはRedisのリスト/キューを利用し、何とかRedisのリストで期限切れのキーを配置する必要があります。その後、このリストにあるB * POPの操作をブロックすることで、あなたが望むものが得られます!

どのように動作しますか? 1つのバックグラウンドスレッドが期限切れのキーを継続的にレディスリスト/キューにプッシュするとします。 APIインスタンスのクラスタは、このリスト/キュー上でブロッキングポップを呼び出すことになります。

redisリストの各項目のポップ時の操作は1クライアントのみで消費されるため、1つのAPIインスタンスで期限切れのキーの通知を取得します。

参考:

リストポップ操作:パブリッシュ/サブスクライブしてhttps://redis.io/commands/lpop

同様の問題:Competing Consumer on Redis Pub/Sub supported?

関連する問題