2015-09-14 3 views
1

На самом деле, когда я хочу остановить своего работника на лазури, эта функция вызывается.Как остановить работника Azure без потери сообщения?

public override void OnStop() 
    { 
     if (messageProvider != null) 
     { 
      messageProvider.StopListening(); 
     } 

     base.OnStop(); 
    } 

Когда я обновляю рабочего, если какое-либо сообщение обрабатывается, я теряю это сообщение. Вы знаете, как я могу безопасно остановить моего работника?

+0

Кто реализовал эту функцию «поставщика сообщений»? – sharptooth

+0

Можете ли вы предоставить дополнительную информацию - читаете ли вы сообщения из очереди/службы? Что (вообще/высокий уровень) участвует в обработке сообщения? –

ответ

0

У вас есть пять минут, с момента вызова OnStop(), и до выхода OnStop() завершает вашу текущую обработку (что бы это ни значило). В вашем случае похоже, что у вас есть поставщик сообщений определенного типа, и вы можете отключиться от потребления сообщений через messageProvider.StopListening();. Поскольку вы заинтересованы в обработке текущего сообщения, вам, вероятно, понадобится сигнал какого-либо типа, чтобы вы знали, что нет обработанных сообщений (включая те, которые, возможно, были прочитаны, но не обработаны, к тому времени, когда вы вызвали StopListening()), и что безопасно выйти из OnStop(). Как вы реализуете сигнал, зависит от вас, но вам нужно ждать сигнала в пределах Onstop().

FYI информация о OnStop() и пятиминутное окно here.