nServiceBus - 并非处理程序接收所有命令

时间:2010-03-18 06:37:29

标签: command nservicebus

在基于nServiceBus pub / sub示例的测试项目中,我用服务器中的bus.send替换了bus.publish。服务器发送50条消息,每5条消息后等待1秒(即5条消息中的10条消息)。客户端没有收到所有消息。

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 msg?

有什么想法吗?我假设配置或误用但是......?

1 个答案:

答案 0 :(得分:1)

您的主要问题是您已将两个进程配置为使用相同的输入队列。给每个人一个自己的队列。