2016-10-05 9 views
0

Я хотел бы получить исключение при отправке на биржу RabbitMQ с использованием MassTransit, если сообщение не доставлено в какие-либо очереди. Похоже, что обязательный флаг RabbitMQ можно использовать для чего-то подобного, но я не смог найти способ установить это с помощью MassTransit. Поддерживается ли это?Есть ли поддержка для обязательного флага RabbitMQ в MassTransit

Мой код:

var personSendEndpoint = busControl.GetSendEndpoint(new Uri($"rabbitmq://localhost/{personQueueName}")).Result; 

// An exception should occur on the following call if the message is not delivered to any queue 
personSendEndpoint.Send(new PersonUpdated() { Name = "Dorian Gray", Key = Guid.NewGuid() }); 

ответ

0

Вы можете установить Mandatory флаг, но не мило методы расширения, чтобы сделать это для вас. В принципе, вы, как показано ниже:

await endpoint.Send(new PersonUpdate(...), context => 
{ 
    (context as RabbitMqSendContext).Mandatory = true; 
}); 

И это будет установить флаг выразительный RabbitMQ бросить исключение, если нет привязки для обмена не существует.

+0

Спасибо Крис, теперь я устанавливаю обязательный флаг, но не получаю исключение .Net из вызова отправки (я проверил обмен, который я отправляю, не имеет привязок). Является ли исключение RabbitMQ подавленным MassTransit? Есть ли способ проверить, успешно ли отправлена? Или я чего-то не хватает? – MarkHasper

+0

Ожидаете ли вы вызов Send(), каждый метод в MassTransit является асинхронным, поэтому вам нужно будет ожидать возврата метода, если вы хотите увидеть исключение. –

+0

Да, я жду отправки. Кажется, это не так. – MarkHasper