Использование NServiceBus 4.3 Я хочу отправить сообщение в очередь ошибок при возникновении определенных условий.Отправить сообщение для error queue first time
Сценарий заключается в том, что когда я получаю сообщение, я проверяю, ссылается ли это сообщение на 1 или более элементов нашей базы данных. Если есть несколько ссылок, я бросаю AmbiguousItemException
и поймаю его. Мне нужно отправить электронное письмо ответственному лицу за предоставление мне правильной информации. Все это выяснено, но я не хочу, чтобы это сообщение было снова проверено. Вместо этого я предпочел бы переместить его в очередь ошибок, поэтому, когда мы вернем необходимую информацию, мы можем добавить свойство nullable и вернуть сообщение в очередь для обработки. Я пробовал использовать _bus.ForwardCurrentMessageTo("error")
, _bus.Send("error", message)
, _bus.SendLocal(message)
. Последнее в основном помещает сообщение в бесконечный цикл. Код вроде как.
public class MoveToErrorQueue
{
private readonly IBus _bus;
public MoveToErrorQueue(IBus bus)
{
_bus = bus;
}
public virtual void Send(ResubmitMessage message)
{
message.Foo= -1;
_bus.Send("error", message);
}
}
и код, который называет его
try
{
//removed for brevity
}
catch (AmbiguousItemException ex)
{
Log.Error(ex);
sendNotificationCommand.FailureMessage = ex.Message;
_moveToErrorQueue.Send(commandMesage);
}
SendNotification(sendScanningNotificationCommand);
Так что это, вероятно, работало бы, но после разговора с командой, мы решили не епдиеюю команду уведомления и просто дайте ошибку сообщения, и перейти к очереди ошибок. –
Команда уведомления может вернуться к Саге, и она может справиться с ней самой. Это было просто предложение. Вы можете так же легко поместить запись в таблицу или отправить электронное письмо себе и т. Д. Разрушение очереди ошибок не рекомендуется. Это не то, для чего оно предназначалось. Я бы не рекомендовал этого. –
Просто примечание, я думаю, @ColinPear означает, что очередь ошибок не должна быть уловкой всех для ошибок проверки бизнеса. –