Как указать другую очередь ожидания для NSB?

#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?