Я пытался выяснить, есть ли способ приостановить выполнение работником дополнительных заданий / сообщений из очереди Rebus? Я хочу иметь возможность «отключить» воркера через свой графический интерфейс, чтобы он завершил работу, над которой работает в данный момент (если таковая имеется), а затем перестал выполнять другие задания. Затем, если я хочу, чтобы он снова начал работать, я сигнализирую об этом через графический интерфейс.
Моя рабочая установка для Rebus выглядит так:
private void SetupRebus(int numberOfWorkers, string messageName)
{
_adapter = new BuiltinContainerAdapter();
Configure.With(_adapter)
.Logging(l => l.Log4Net())
.Transport(t => t.UseSqlServer(_connectionString, _inputQueue, "error")
.EnsureTableIsCreated())
.Events(x => x.AfterMessage += ((bus, exception, message) => SendWorkerFinishedJob(exception, message)))
.Events(x => x.BeforeMessage += (bus, message) => SignalWorkerStartedJob(message))
.Behavior(x => x.SetMaxRetriesFor<Exception>(0))
.CreateBus().Start(numberOfWorkers);
Log.Info(string.Format("Starting to listen for messages of type {0} from queue {1} queue in {2}", messageName, _inputQueue, _connectionString));
}