우리는 많은 라이선스를 구입했으며 많은 결과를 약속하며 많은 테스트를 거쳤으며 첫 출시일 직전에 있습니다. :)NServiceBus - 배포자 제어 메시지 오류
그러나 지금 우리는 길에서 큰 충돌을 쳤습니다. 우리가 설명하고 고칠 수 없다면 버스를 버려야 할 수도 있습니다.
우리의 대리점 갑자기 아래와 같은 제어 오류 메시지가 :
<?xml version="1.0"?>
<ArrayOfHeaderInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<HeaderInfo>
<Key>NServiceBus.ControlMessage</Key>
<Value>True</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.Distributor.WorkerCapacityAvailable</Key>
<Value>20</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.Distributor.WorkerStarting</Key>
<Value>True</Value>
</HeaderInfo>
<HeaderInfo>
<Key>CorrId</Key>
<Value>58dd98f5-9ac0-44fb-8604-3a0f06787a35\295075</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.Reason</Key>
<Value>ProcessingFailed</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.ExceptionType</Key>
<Value>System.InvalidOperationException</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.HelpLink</Key>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.Message</Key>
<Value>Property ResponseQueue was not retrieved when receiving the message. Ensure that the PropertyFilter is set correctly.</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.Source</Key>
<Value>NServiceBus.Core</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.StackTrace</Key>
<Value> at NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.ProcessMessage(TransportMessage m) in c:\BuildAgent\work\nsb.master_6\src\impl\unicast\transport\NServiceBus.Unicast.Transport.Transactional\TransactionalTransport.cs:line 312
at NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.ReceiveMessage() in c:\BuildAgent\work\nsb.master_6\src\impl\unicast\transport\NServiceBus.Unicast.Transport.Transactional\TransactionalTransport.cs:line 275
at NServiceBus.Utils.TransactionWrapper.RunInTransaction(Action callback, IsolationLevel isolationLevel, TimeSpan transactionTimeout) in c:\BuildAgent\work\nsb.master_6\src\utils\TransactionWrapper.cs:line 32
at NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.Process() in c:\BuildAgent\work\nsb.master_6\src\impl\unicast\transport\NServiceBus.Unicast.Transport.Transactional\TransactionalTransport.cs:line 220</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.OriginalId</Key>
<Value>58dd98f5-9ac0-44fb-8604-3a0f06787a35\295075</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.FailedQ</Key>
<Value>[email protected]</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.TimeOfFailure</Key>
<Value>2013-04-30 10:07:40:750707 Z</Value>
</HeaderInfo>
</ArrayOfHeaderInfo>
구글이 일부 스레딩 문제에 관련하고 NSB 수신/PEEK를 사용하여 구현되는 것을 어쩌면 길 수도 있음을 알려줍니다.
위의 예외는 GitHub의에서이 파일 관련 : 우리의 구현에 대한 https://github.com/NServiceBus/NServiceBus/blob/master/src/impl/unicast/transport/NServiceBus.Unicast.Transport.Transactional/TransactionalTransport.cs
세부 사항 :
우리는 때문에 아직 DB에 대한 더 DTC를 의미 일부 레거시 문제로, 사용자 정의 IManageUnitsOfWork를 사용합니다. 나는 이것이 원인 일 수 있다고 생각하지 않지만 나는 그 가치가 있다고 생각한다. 우리는 우리가 유통과 서비스를 시작할 때, 실행 4 개 유통 업체가 실제로 있다는 것을 의미 한 서비스 실행, 내부 4 동일한 응용 프로그램 도메인을 실행할 경우
public class ManagedUnitOfWorkWithDtcSuppression : IManageUnitsOfWork
{
private readonly IContainer _container;
private IUnitOfWork _unitOfWork;
private readonly TransactionScope _scope;
public ManagedUnitOfWorkWithDtcSuppression()
{
_scope = new TransactionScope(TransactionScopeOption.Suppress);
_container = ObjectFactory.GetInstance<IContainer>();
}
public void Begin()
{
_unitOfWork = _container.GetInstance<IUnitOfWork>();
}
public void End(Exception exception = null)
{
if (exception == null)
{
_unitOfWork.Commit();
}
_unitOfWork.Dispose();
_scope.Complete();
_scope.Dispose();
}
}
는 또한 우리가 특별한 설정을 가지고 :이 된 구현입니다. 그러나 이것들은 pr입니다. 정의는 서로 완전히 격리되어 있습니다. IBus는 각 AppDomain마다 고유하며 테스트를 거쳤습니다.
우리의 배포자 구성은 다음과 같습니다
return NServiceBus.Configure.With()
.DefineEndpointName(queuePrefix)
.Log4Net(ObjectFactory.GetInstance<IServiceBusLog>().Build())
.StructureMapBuilder()
.JsonSerializer()
.AsMasterNode()
.RunDistributorWithNoWorkerOnItsEndpoint()
.MsmqTransport()
.IsTransactional(true)
.DisableTimeoutManager()
.DisableSecondLevelRetries()
.UnicastBus()
.CreateBus()
.Start(() => NServiceBus.Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
질문 : 여기
을 무슨 일이야?
우리는 DTC supression을 사용하고 있기 때문에 NSB가 필요합니까? MSMQ 버그가 있습니까? 아니면 NSB 버그가 있습니까?
NServiceBus의 버전은 무엇입니까? –
버스 버전 3.3.5. –
작업 단위는 분배기로가는 제어 메시지에 대해 작동하지 않습니다. 작업 큐에서 나오는 제어 대기열이나 제어 메시지에 문제가있는 것 같습니다. 작업자 중 한 명을 시작하고 대기열 탐색기를 사용하여 제어 메시지를 파일로 덤프하여 살펴볼 수 있습니까? –