#nservicebus
#nservicebus
Вопрос:
Я использую NSB 4.4.2, я хочу иметь что-то вроде сердечных сокращений в моей саге, чтобы показывать статистику обработки. Когда я запрашиваю время ожидания, оно отправляется во входную очередь sagas. В случае множества сообщений, предшествующих этому сообщению о таймауте, IHandleTimeouts может не запускаться в определенное время. Это ошибка? Или как я могу использовать отдельную очередь для сообщений о таймауте?
Спасибо
Ответ №1:
Вы правы — когда время ожидания готово к отправке, оно отправляется во входящую очередь конечной точки, и если там уже есть много других сообщений, ему придется ждать своей очереди для обработки.
Еще одна вещь, которую вы, возможно, захотите учесть, заключается в том, что конечная точка в это время может быть недоступна.
Если вы хотите гарантировать, что ваш код saga будет вызван во время (или очень близко к нему) времени ожидания, вам нужно сначала настроить развертывание с высокой доступностью. Затем вам следует посмотреть на настройку SLA, требуемого для этой конечной точки — как быстро должны обрабатываться сообщения, а затем отслеживать время до нарушения SLA счетчика производительности.
Смотрите здесь для получения дополнительной информации:http://docs.particular.net/nservicebus/monitoring-nservicebus-endpoints
Вы должны быть готовы масштабировать свою конечную точку по мере необходимости, чтобы гарантировать достаточную вычислительную мощность для поддержания поступающей нагрузки.
ПРИМЕЧАНИЕ: Причина, по которой мы используем одну и ту же входящую очередь для обработки этих таймаутов, заключается в дизайне. Сообщение о тайм-ауте почти всегда имеет тот же приоритет или ниже, чем другие бизнес-сообщения, обрабатываемые saga. Таким образом, не имеет смысла отключать их перед другими сообщениями в очереди.
Ответ №2:
Тайм-ауты отправляются на [endpointname].тайм-ауты
Комментарии:
1. Отправка сообщения XXX. Время ожидания с идентификатором 50c5cbde-401e-4a44-b9f0-a35d000014aa для назначения YYY@ZZZ.
2. Где YYY@ZZZ — имя очереди sagas
3. Может быть, вы можете предоставить немного больше деталей? что такое HartbeatTimeOut — это ваша собственная настройка? вы имеете в виду сообщения о сердцебиении ServiceControl?
4. Это класс hy heartbeat timeout общедоступного класса HeartbeatTimeout { } вот как я запрашиваю тайм-аут: requestTimeout<Время ожидания сердцебиения> (Дата-время. Now HeartbeatInterval); И это обработчик: MySaga : ….., IHandleTimeouts<HeartbeatTimeout> public void Timeout(тайм-аут истечения времени ожидания) { … // Запросить следующий requestTimeout<HeartbeatTimeout> (Дата-время. Now HeartbeatInterval); }
5. Это действительно сложно прочитать, можете ли вы поделиться кодом на Github или dropbox?