2010-03-18 6 views
0

nServiceBus pub/sub 샘플을 기반으로하는 테스트 프로젝트에서 서버의 bus.send로 bus.publish를 대체했습니다. 서버는 각 5 (즉, 5 개의 메시지 중 10 개의 버스트) 이후에 1 초 대기와 함께 50 개의 메시지를 보냅니다. 클라이언트가 모든 메시지를받지는 못합니다.nServiceBus - 처리기가 수신하는 모든 명령이 없음

soln에는 3 개의 프로젝트 (서버, 클라이언트 및 공통 메시지)가 있습니다. 서버와 클라이언트는 nServiceBus 제네릭 호스트를 통해 호스팅됩니다. 단 하나의 버스 만 정의됩니다.

클라이언트와 서버 모두 StructureMap 빌더와 BinarySerialisation을 사용하도록 구성됩니다.

서버 엔드 포인트 :

public class EndPointConfig : AsA_Publisher, IConfigureThisEndpoint, IWantCustomInitialization 
{ 
    public void Init() 
    { 
     NServiceBus.Configure.With() 
      .StructureMapBuilder() 
      .BinarySerializer(); 
    } 
} 

서버 코드 :

for (var nextId = 1; nextId <= 50; nextId++) 
{ 
    Console.WriteLine("Sending {0}", nextId); 

    IDataMsg msg = new DataMsg { Id = nextId, Body = string.Format("Batch Msg #{0}", nextId) }; 
    _bus.SendLocal(msg); 
    Console.WriteLine(" ...sent {0}", nextId); 

    if ((nextId % 5) == 0) 
     Thread.Sleep(1000); 
} 

클라이언트 엔드 포인트 :

public class EndPointConfig : AsA_Client, IConfigureThisEndpoint, IWantCustomInitialization 
{ 
    public void Init() 
    { 
     NServiceBus.Configure.With() 
      .StructureMapBuilder() 
      .BinarySerializer(); 
    } 
} 

클라이언트 Clode (으) :

public class DataMsgHandler : IMessageHandler<IDataMsg> 
{ 
    public void Handle(IDataMsg msg) 
    { 
     Console.WriteLine("DataMsgHandler.Handle({0}, {1}) - ({2})", msg.Id, msg.Body, Thread.CurrentThread.ManagedThreadId); 
    } 
} 
,

클라이언트 및 서버의 app.config는 :

<MsmqTransportConfig InputQueue="nsbt02a" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" /> 
<UnicastBusConfig DistributorControlAddress="" DistributorDataAddress=""> 
    <MessageEndpointMappings> 
     <add Messages="Test02.Messages" Endpoint="nsbt02a" /> 
    </MessageEndpointMappings> 
</UnicastBusConfig> 

모든으로 VisualStudio 2008 년 50 개 메시지가 전송됩니다

를 통해 실행 - 그러나 1 차 또는 2 차 배치 후. 일괄 처리 당 1 개의 메시지 만 전송됩니까?

아이디어가 있으십니까? 나는 설정이나 오용을 가정하지만 ....?

답변

1

가장 중요한 문제점은 동일한 입력 대기열을 사용하도록 두 프로세스를 구성했기 때문입니다. 각자에게 자신의 큐를 제공하십시오.