0

nServiceBus pub/sub サンプルに基づくテスト プロジェクトで、サーバーの bus.publish を bus.send に置き換えました。サーバーは、5 メッセージごとに 1 秒待機して 50 メッセージを送信します (つまり、5 メッセージの 10 バースト)。クライアントはすべてのメッセージを取得しません。

ソルンには、サーバー、クライアント、共通メッセージの 3 つのプロジェクトがあります。サーバーとクライアントは、nServiceBus 汎用ホストを介してホストされます。バスは 1 つだけ定義されます。

クライアントとサーバーの両方が、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();
    }
}

クライアント クロード:

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 件すべてのメッセージが送信されますが、最初または 2 番目のバッチの後で送信されます。バッチごとに 1 つのメッセージのみが送信されますか?

何か案は?私は構成または誤用を想定していますが....?

4

1 に答える 1

1

主な問題は、両方のプロセスが同じ入力キューを使用するように構成したことです。それぞれに独自のキューを与えます。

于 2010-03-18T10:56:44.267 に答える