Я новичок в NServiceBus, но в настоящее время использую его с SQL Server Transport для отправки сообщений между тремя машинами: один относится к конечной точке с именем Server
, а два относятся к конечной точке, называемой Agent
. Это работает, как ожидалось, с сообщениями, отправленными на конечную точку Agent
, распределенную на одну из двух машин с помощью стандартного циклического цикла.Перенаправление сообщения NServiceBus на основе доступности конечной точки
Теперь я хочу добавить новую конечную точку под названием PriorityAgent
с другой очередью и двумя дополнительными машинами. Хотя все конечные точки используют один и тот же тип сообщения, я знаю, где каждое сообщение должно быть обработано до его отправки, поэтому обычно я могу просто выбрать правильную конечную точку назначения, и сообщение будет обработано соответствующим образом.
Однако, мне нужно построить в частном случае: если все машины на PriorityAgent
конечной точки в настоящее время вниз, сообщения, которые обычно должны быть отправлены должны быть отправлены в Agent
конечной точки вместо этого, так что они могут быть обработаны без задержки. С другой стороны, если все машины на конечной точке Agent
в настоящее время недоступны, любые сообщения Agent
не следует отправлять в PriorityAgent
, они могут просто подождать, пока не вернется машина Agent
.
Я изучал надлежащий способ реализации этого и не видел много результатов. Я предполагаю, что это не неслыханный сценарий, поэтому мое предположение заключается в том, что я искал неправильные вещи или думал об этой проблеме не так. Тем не менее, я придумал пару потенциальных решений:
Отдельно отслеживать сердцебиения из
PriorityAgent
машин, а также добавить мутатор или поведение, чтобы изменить назначение исходящихPriorityAgent
сообщений вAgent
конечную точку, если эти сердцебиения остановки.Дает
PriorityAgent
сообщениям с коротким сроком действия и как-то обрабатывает истечение, чтобы перенаправить сообщения на конечную точкуAgent
. Я не уверен, действительно ли это возможно.
Является одним из этих решений на правильном пути, или я полностью закрыт?
Спасибо за ввод. Развертывание «PriorityAgent» на машинах «Агент» в качестве резервной копии - хорошая идея, которая была заблокирована требованием клиента, чтобы машины «Агент» обрабатывали сообщения «PriorityAgent» в случае сбоя. Тем не менее, мы смогли изменить требования, чтобы теперь мы могли устанавливать сервер PriorityAgent на серверах Agent и просто не использовать его, позволяя клиенту вручную включать его, если это становится необходимым. Это должно позволить нам продолжать использовать NServiceBus в соответствии с его намерением. – mdk