2016-10-05 3 views
0

메시지가 대기열로 전달되지 않으면 MassTransit을 사용하여 RabbitMQ 교환에 보낼 때 예외를 얻고 싶습니다. RabbitMQ 필수 플래그가 이런 식으로 사용될 수있는 것처럼 보이지만 MassTransit을 사용하여이를 설정하는 방법을 찾지 못했습니다. 지원됩니까?MassTransit에 RabbitMQ 필수 플래그가 지원됩니까?

내 코드 :

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