遅延メッセージをキューに格納する方法はありますか。それはより良いアプローチですか?
ない遅延はメッセージごとに異なることができる点で遅延メッセージと競合私は
fifoで本当に良いです:)ほとんどのキューに精通しています任意のキュー、と(少なくとも一般的な場合)。
送信された順序とはまったく異なる順序で並べ替えられたメッセージにアクセスしたい場合、2次インデックスを持つデータベースは、遅延メッセージを格納するための非常に優れたテクノロジになります。
これを行うにはどうすればよいでしょうか?
SQL Serverに遅延メッセージを格納するのが間違っているとは私は理解していません。もちろん
、あなたがメッセージを延期多くのエンドポイントを持っている場合は、あなたの代わりに、個々のエンドポイントの世論調査にデータベースを持つの「外部のタイムアウトマネージャ」を使用することがあります - これはあなたのエンドポイントでこれを行うことであったことができます:
Configure.With(...)
.(...)
.Timeouts(t => t.UseExternalTimeoutManager("timeouts"))
.Start();
を入力し、構成されたタイムアウト記憶域と入力キューtimeouts
でエンドポイントを開始するだけです。
私は外部タイムアウトマネージャを持つソリューションが好きです。これは(各作業者のポーリングデータベースではなく)私が探していたものです。しかし、この外部タイムアウトマネージャがどこで動作しているのか分かりますか?タイムアウトマネージャがクラッシュした場合、残りの作業者は別のタイムアウトマネージャを選択しますか? –
タイムアウトマネージャが再起動せずに停止またはクラッシュした場合、エンドポイントは遅延メッセージを受信しません。新しい遅延メッセージは 'timeouts'キューにキューイングされます。タイムアウトマネージャーは通常のRebusエンドポイントであり、これを行う必要があります。 – mookid8000
中央データベースを使用している場合(例: SQL Serverを使用していて、何らかの種類のブローカベースのキューイングシステム(RabbitMQなど)を使用している場合、冗長性を実装するために2つの異なるマシンに2つのタイムアウトマネージャインスタンスを配置するのはかなり簡単です – mookid8000