문제
nservicebus를 통해 메시지를 보내는 데 어려움이 있습니다. win7 x64에서 개발중인 ASP.NET MVC 웹 앱이 있습니다.
<MsmqTransportConfig InputQueue="worker" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="PricingInformation.Messages" Endpoint="worker2" />
</MessageEndpointMappings> </UnicastBusConfig>
Application_start에서 나는 다음을 연결합니다.
var bus = NServiceBus.Configure.WithWeb()
.StructureMapBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
내가 관심있는 행동이 내가 발사하는 앱에서 일어날 때
public override void HandleEvent(SupplierPricingUpdatedEvent updatedEvent)
{
bus.Send(new ModelSupplierDetailsUpdatedMessage() {Id = updatedEvent.Id})
return;
}
ModelSupplierDetailSupdatedMessage는 pricingInformation.message 인터페이스 마커 Imessage를 사용한 Messages의 간단한 클래스입니다.
MSMQ 대기열은 트랜잭션이 아닌 설정이며 네트워크 서비스 및 IIS_IUSR을 포함한 모든 사람은 완전히 제어됩니다 (Deseperate 문제 해결 조치)
log4net은 다음을 보여줍니다.
DEBUG NServiceBus.Utils.MsmqUtilities 14 - Checking if queue exists: worker.
debug nservicebus.utils.msmqutilities 14- 큐가 있는지 확인 : 오류. debug nservicebus.unicast.unicastbus worker.15- nservicebus.sagapersisters.nhibernate.nhibernatemessagemodule info inservicebus.unicast.unicastbus worker.15- 작업자 초기화. debug nservicebus.unicast.unicastbus worker.15- nservicebus.sagapersisters.nhibernate.nhibernatemessagemodule debug nservicebus.unicast.unicastbus 9- 메시지 보내기 pricinginformation.messages.modelsupplierDetailSupdatedMessage, pricingInformation.Messages, 버전 = 1.0.0.0, Culture = Neutral, PublicKeyToken = ID가 포함 된 NULL 2C642672-1BF1-48D4-A90F-734E2FDD726D 8267 대 목적지로 2.
그러나 내가 무엇을 시도하든, 내가 조정하는 것 (이미 3 시간이 지났음)에 상관없이 메시지는 큐에 나타나지 않습니다. 나는 예외를 찾을 수없고 모든 것에 디버그 레벨 로깅이 있습니다 .. 아마도 간단한 도움이 될 것입니다.
해결책
문제는 수동으로 큐를 비 트랜잭션으로 설정하면 작동하지 않는다는 것입니다. nservicebus "istransactional"속성을 거짓으로 설정한다고해서 비 트랜잭션 대기열로 작업 할 수 있다는 의미는 아닙니다.
대기열을 삭제하고 트랜잭션으로 재현하거나 v2.0의 베타를 사용하는 경우 nservicebus가 큐를 만들도록하십시오.