2

私はnserviceバスで遊び始めたばかりで、パブリッシングを機能させようとしています。いくつかのメッセージが欠落しているように見えるリスナーがいます。それはで構成されています

 <MsmqTransportConfig
  InputQueue="InformMessages"
  ErrorQueue="error"
  NumberOfWorkerThreads="5"
  MaxRetries="5"
 />

興味深いことに、NumberOfWorkerThreadsを1に設定すると、他のすべてのメッセージが常に失われます。値が大きいほど、確定性が低いように見えます。私のメッセージハンドラーには

class MessageHandler : IMessageHandler<ICourseRegister>
{
    public void Handle(ICourseRegister message)
    {
        Console.WriteLine("Message dun got gotted");
        Console.WriteLine("Course name is: " + message.CourseName);
    }

    private IBus bus;
    public IBus Bus
    {
        set { this.bus = value; }
    }
}

バスは次のように構成されています

        var bus = NServiceBus.Configure.With()
              .SpringBuilder()
              .XmlSerializer()
              .MsmqTransport()
                  .IsTransactional(true)
                  .PurgeOnStartup(false)
              .UnicastBus()
                  .ImpersonateSender(false)
                  .LoadMessageHandlers()
              .CreateBus()
              .Start();

次のメッセージを受信する準備ができて解放されるように、ハンドラーを終了する必要がありますか、ハンドラーがビジーの場合にメッセージを保持するためのクライアント側のキューがあるようにする必要があります。メッセージを送信する間隔は重要ではないようです。20秒かかる可能性がありますが、リスナーはまだすべてのメッセージを取得していません。

4

2 に答える 2

6

あなたが送った解決策を見た後、私は問題が何であるかを理解します。

パブリッシャーとサブスクライバーの両方のプロセスに同じ入力キューを指定しました。その結果、(私が思うに)サブスクライバーだけに送信する予定のメッセージをめぐって両方のプロセスが競合することになります。

各プロセスに独自の入力キューを与えれば、すべてが世界に合っているはずです:-)

于 2009-11-03T16:29:55.360 に答える
0

pub / subサンプルと同様に作業している場合、表示されるのは「ポリモーフィックサブスクリプション」です。

pub / subサンプルでは、​​パブリッシャーはインターフェイスIEventと具象クラスEventMessage(IEventを継承)を交互に公開します。

サブスクライバが具象クラスにサブスクライブされている場合、そのサブスクライバはインターフェイスメッセージを受信しません。これはすべての種類の階層に当てはまります。特定のクラスにサブスクライブし、パブリッシャーがその基本クラスのタイプのメッセージを公開した場合、メッセージはディスパッチされません。

ポリモーフィックサブスクリプションは逆に機能します。ベースにサブスクライブすると、パブリッシャーが公開するサブクラスが到着します。

これはスレッド化とは何の関係もありません。

お役に立てば幸いです。

于 2009-10-28T20:10:48.167 に答える