2017-11-03 13 views
2

サブスクライバを無効にする/有効にする必要があります。メッセージは送信できるという考えがありますが、サブスクライバがオフになっている場合、キュー内のメッセージは処理されません。再度オンにすると、キュー内のメッセージの処理が開始されます。サブスクライバを一時停止する

私はpub/subとrequest/replyの例を見ているだけでなく、この質問に答える機能を探すためにRebusのソースコードを引っ張ってきました。 Deferメソッドがあり、メッセージの送信に時間の遅延を適用できますが、必要な遅延はサブスクライバをオンまたはオフにすることに基づいています。

主な質問は、サブスクライバを一時停止する方法はありますか?

(一つだけの加入者ではなく、すべての加入者、私はSetWorkerThreads(0)技術がうまくいくとは思わない)答えはそうのような_activator.Bus.Advanced.Workers.SetNumberOfWorkers(0)を使用している

UPDATE:

public static class Subscriber1 
{ 
    private static BuiltinHandlerActivator _activator; 
    public static void Start(ILogger logger) 
    { 
     _activator = new BuiltinHandlerActivator(); 
     _activator.Register(() => new Subscriber1MessageHandler()); 
     Configure.With(_activator) 
       .Transport(t => t.UseMsmq("subscriber1")) 
       .Logging(l => l.Serilog(logger)) 
       .Routing(r => r.TypeBased().Map<Subscriber1Message>("thepublisher")) 
       .Start(); 
     _activator.Bus.Subscribe<Subscriber1Message>().Wait(); 
    } 
    public static void Pause() 
    { 
     _activator.Bus.Advanced.Workers.SetNumberOfWorkers(0); 
    } 
    public static void Resume() 
    { 
     _activator.Bus.Advanced.Workers.SetNumberOfWorkers(1); 
    } 
} 
+0

サブスクライバはどのように展開されていますか?それはWindowsサービスですか? – mookid8000

+0

IISのWebアプリケーションでは、パブリッシャとサブスクライバの両方が同じIISプロセスで実行されています。 –

答えて

0

なぜあなたが言うのか分かりません

私はSetWorkerThreads(0)技法がうまくいかないと信じています

これは私の提案であるため、単純にその特定のサブスクライバのアクティブワーカースレッドの数を0にすることです。

この方法では、キューからのメッセージの受信を停止し、ワーカーの数を0より大きい数値に戻すことでメッセージ処理を再開できます。

Btw。構文は次のようになります。

bus.Advanced.Workers.SetNumberOfWorkers(0); 

これは、作業者の数が調整されるまでブロックされます。

+0

SetNumberOfWorkers(0)は、加入者がいないことを意味していました。私がテストに使用したパターンは、すべてのサブスクライバが次のように一時停止と再開を公開しているということです。 –

関連する問題