サブスクライバを無効にする/有効にする必要があります。メッセージは送信できるという考えがありますが、サブスクライバがオフになっている場合、キュー内のメッセージは処理されません。再度オンにすると、キュー内のメッセージの処理が開始されます。サブスクライバを一時停止する
私は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);
}
}
サブスクライバはどのように展開されていますか?それはWindowsサービスですか? – mookid8000
IISのWebアプリケーションでは、パブリッシャとサブスクライバの両方が同じIISプロセスで実行されています。 –