Случайные сообщения не обрабатываются в Rebus - PullRequest
0 голосов
/ 19 декабря 2018

У меня странная проблема с моей реализацией 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 так себя ведетКстати, и что в моей среде может быть причиной этого.Будем весьма благодарны за любые указания относительно того, с чего начать поиск!

1 Ответ

0 голосов
/ 19 декабря 2018

Звучит довольно странно :), когда люди сталкиваются с этой проблемой, это почти всегда потому, что они каким-то образом настроили несколько экземпляров Rebus для получения сообщений из одной и той же очереди.

В некоторых редких случаях это происходит потому, что .Start() вызывается по шине до того, как обработчики добавляются в активатор контейнера / встроенного обработчика, но в вашем случае это не проблема.

Можете ли вы сказать мнебольше о вашей настройке?Если это примерно так же просто, как то, что вы показываете выше, возможно, вы можете воспроизвести его в отдельном приложении?

...