nServiceBus - не все команды, полученные обработчиком - PullRequest
0 голосов
/ 18 марта 2010

В тестовом проекте, основанном на примере nServiceBus pub / sub, я заменил bus.publish на bus.send на сервере. Сервер отправляет 50 сообщений с ожиданием в 1 секунду после каждых 5 (то есть 10 пакетов из 5 сообщений). Клиент не получает все сообщения.

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);
     }
}

Клиент и серверное приложение. Настройка:

<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 Ответ

1 голос
/ 18 марта 2010

Ваша основная проблема заключается в том, что вы настроили оба процесса на использование одной и той же очереди ввода. Дайте каждому свою очередь.

...