2014-10-21 6 views
1

Я пытался выяснить, есть ли способ приостановить работу от получения большего количества заданий/сообщений из очереди Rebus? Я хочу, чтобы «отключить» рабочего через мой графический интерфейс, чтобы он завершил работу, в которой он работает в данный момент (если есть), а затем прекращает принимать больше заданий. Тогда, если я хочу, чтобы он снова начал выполнять задания, я сигнализирую об этом через gui.Приостановить работника от получения сообщений из очереди

Моя установка рабочей для Ребуса выглядит следующим образом:

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)); 
    } 

ответ

2

К сожалению, это не так легко поддерживается общественным API - У меня было несколько запросов на эту функциональность, поэтому вы можете увидеть, что выставлены в будущей версии.

Вы можете сделать это в данный момент: ((RebusBus)bus).SetNumberOfWorkers(0) (т. Е. Отбросить экземпляр IBus к RebusBus и изменить количество рабочих потоков), который будет блокироваться до тех пор, пока количество рабочих не будет настроено на нужный номер. Все активные работники завершат обработку сообщений, над которыми они работают.

Таким образом, вы можете фактически добиться того, что вам нужно. Это не официальная особенность Ребуса (пока), но это может быть в будущем. Однако я могу гарантировать, что способность корректировать количество рабочих во время выполнения не исчезнет.

+0

Спасибо за быстрый ответ! – jopa

Смежные вопросы