NServiceBus를 사용하는 ASP.Net WebAPI 응용 프로그램이 있습니다. 명령은 응용 프로그램에서 NSB 호스트를 실행중인 백엔드 서버로 보내집니다. 서버는 데이터베이스와의 통신을 담당합니다.NServiceBus 응답 메시지 경고
대부분의 명령은 fire-and-forget입니다. 간단한 Bus.Send (...) 및 웹 클라이언트가 즉시 릴리스되므로 작업이 비동기 적으로 발생할 수 있습니다.
예외는 데이터베이스에 새 레코드를 만드는 명령입니다. 데이터베이스는 새로 생성 된 엔티티의 ID를 생성하는 책임이 있으며 호출자에게 다시 반환해야합니다. 이것은 호출자가 주변에 있어야하기 때문에 성능이 떨어지지 만 내 상황에서는 받아 들일만한 히트입니다.
전이중 샘플에 설명 된대로 성공적으로 Bus.Reply() 기능을 사용하고 있습니다. 새로 생성 된 ID에 대해 하나의 속성이있는 메시지로 회신 중입니다. 웹 측에서는 콜백을 Task Continuation (WebAPI의 비동기 기능 활용)에 등록하고 Bus.Send() 다음에 .Register를 사용하여 등록했습니다.
이것은 모두 정상적으로 작동합니다. 그것은 내가 원하는 것을 정확히, 매우 간단하고 쉽게 수행합니다. 유일한 문제는 다음과 같이 응답 메시지가 클라이언트가 수신 될 때마다, 그것은 경고를 기록한다는 것입니다 :
2012-09-11 16:46:44,745 [Worker.26] WARN NServiceBus.Unicast.Transport.Transactional.TransactionalTransport [(null)] - Failed raising 'transport message received' event for message with ID=1faee572-f904-4b09-b1d5-c0bd7c12738d\82936
System.InvalidOperationException: No handlers could be found for message type: MyProject.Messages.MyEntityCreatedResponseMessage
at NServiceBus.Unicast.UnicastBus.HandleTransportMessage(IBuilder childBuilder, TransportMessage msg)
at NServiceBus.Unicast.UnicastBus.TransportMessageReceived(Object sender, TransportMessageReceivedEventArgs e)
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived(TransportMessage msg)
나는이 경고를 제거하려면 어떻게
? 여기서 메시지 처리기가 필요하지 않습니다.
내 머리 꼭대기에서 - 나는 더미 (빈) 처리기를 구현해야한다고 생각합니다. 그렇지 않으면 MyEntityCreatedResponseMessage 이벤트가 오류 큐 –
으로 끝날 것입니다. 더미 처리기가 경고를 중지하지만 이벤트가없는 pub/sub를 수행 중이라는 경고를받습니다. 왜 .Reply가 마치 내가 한 .Publish처럼 처리됩니다 ?? –
Bus.Reply 대신 Bus.Return을 사용하면 오류나 경고없이 내가했던 것을 성취 할 수 있다는 것을 알게되었습니다. 그러나 이것은 새로운 ID를 ErrorCode로 취급하고 ID가 정수로 취급되기 때문에 작동합니다. 다른 유형의 ID 나 추가 정보 (실제 오류 코드와 같은)를 전달해야한다면 작동하지 않습니다. –