У меня странная проблема с моей реализацией Rebus, которая работала последние пару лет без каких-либо проблем, и я пытаюсь выяснить масштаб проблемы и где сосредоточить свои усилия по устранению неполадок.Немного контекста:
- Мы работали с версией 0.99.66
- Перешли на версию 3.1.5 на прошлой неделе, затем увидели проблемы
- Откат к0.99.66, проблемы продолжаются
- Использование MSMQ для транспорта
- Запуск Windows Server 2016
- Идентичный код, выполняемый на других экземплярах сервера без проблем
Таким образом, мы наблюдаем случайные, на первый взгляд, случаи, когда сообщения терпят неудачу, оказываясь в очереди ошибок с ошибкой Ребуса, говорящей о том, что сообщение не может быть отправлено каким-либо обработчикам.Это может произойти один раз, но затем, когда в следующий раз будет получен идентичный тип сообщения, оно будет обработано правильно.
Вот фрагмент кода, о котором идет речь:
public class ProcessManagerService
{
public ProcessManagerService()
{
...
BusAdapter = new BuiltinHandlerActivator();
BusAdapter.Handle<FileEventMessage>(async msg => await StartProcess(msg));
BusAdapter.Handle<ProcessRequest>(async msg => await StartProcess(msg));
Bus = Configure.With(BusAdapter)
.Logging(l => l.ColoredConsole(LogLevel.Error))
.Transport(t => t.UseMsmq(ConfigurationManager.AppSettings["Queue"]))
.Start();
}
...
public async Task StartProcess(FileEventMessage msg)
{
var svc = new StepManager() { FileEvent = msg.FileEvent };
await svc.Run();
}
public async Task StartProcess(ProcessRequest msg)
{
var svc = new StepManager();
await svc.Run(msg);
}
}
И здесьпример генерируемого исключения:
5 необработанных исключений: 18.12.2008 7:53:00 AM -06: 00: Rebus.Exceptions.RebusApplicationException: сообщение с идентификатором c72a8b6d-e31c-4a88-937e-612bf1db8b11 и тип ClearStone.Messages.Monitoring.File.FileEventMessage, ClearStone.Messages не удалось отправить ни одному обработчику в Rebus.Pipeline.Receive.DispatchIncomingMessageStep.d__1.MoveNext of trace ()из предыдущего местоположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в Rebus.Sagas.DataSeStaSState--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в системе.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в Rebus.Pipeline.Receive.ActivateHandlersStep.было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в Rebus.Pipeline.Receive.DesextNeviceMe- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в Rebus.Pipeline.HandleDeferredMessagesStep.d__12.MoveNext () --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задачи) в Rebus.Retry.Simple.SimpleRetryStrategyStep.d__8.MoveNext ()
* * *1028* * 10 * 10 * 10 * 10 * 10 * 10 * 1026более детальная трассировка стека после подключения в источнике Rebus:
5 необработанных исключений: 20.12.2008 9:39:05 -06: 00: Rebus.Exceptions.RebusApplicationException: Сообщение сИдентификатор 84c3605a-41de-4300-9596-97e7288d2bcb и тип ClearStone.Messages.Monitoring.File.FileEventMessage, ClearStone.Messages не удалось отправить ни одному из обработчиков в Rebus.Pipeline.Receive.DispatchIncomingMessageStep.e__.Mexage (in.Mext: in.Mext: in.Mext: in.Mext: in.Mext: in.Mext: in.: .Me.Temp \ rebus_0_99_66_archive \ Rebus \ Pipeline \ Receive \ DispatchIncomingMessageStep.cs: строка 61 --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в системе.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Taskзадача)в System.Runtime.CompilerServices.TaskAwaiter.GetResult () в Rebus.Sagas.LoadSagaDataStep.d__7.MoveNext () в C: \ Temp \ rebus_0_99_66_archive \ Rebus \ Sagas \ LoadSagaDataStep.cs из строки трассировки:предыдущее местоположение, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Runtime.CompilerSerwaerRebus.Pipeline.Receive.ActivateHandlersStep.d__3.MoveNext () в C: \ Temp \ rebus_0_99_66_archive \ Rebus \ Pipeline \ Receive \ ActivateHandlersStep.cs: строка 48 --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение ---в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Runtime.CompilerServices.TaskReeBeasePlayerssageStep.d__2.MoveNext () в C: \ Temp \ rebus_0_99_66_archive \ Rebus \ Pipeline \ Receive \ DeserializeIncomingMessageStep.cs: строка 36 --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.: \ Temp \ rebus_0_99_66_archive \ Rebus \ Pipeline \ Receive \ HandleDeferredMessagesStep.cs: строка 114 --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) вSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в System.Runtime.CompilerServices.TaskAwaiter.GetResult () в Rebus.Retry.Simple.SimpleRetryStrategyStebus.t__t_0_t_0_t__t_0_6chive \ Rebus \ Retry \ Simple \ SimpleRetryStrategyStep.cs: строка 105
Предполагая очевидное и что-то в этом конкретном экземпляре / среде сервера, я пытаюсь выяснить, почему Rebus так себя ведетКстати, и что в моей среде может быть причиной этого.Будем весьма благодарны за любые указания относительно того, с чего начать поиск!