5

NServiceBus SendOnlyエンドポイントを作成するときの目的は、ファイアアンドフォーゲットだけです。つまり、メッセージを送信するだけで、他の誰かがそれを処理します。それは私が必要としているもののようです。バスとシステム処理メッセージの間の通信は必要ありません。システム「A」は、システム「B」に何かについて通知したいと考えています。

非常に単純な場合はSendOnlyエンドポイントの作成ですが、SendOnlyエンドポイントからのメッセージをリッスンするシステムについてはどうでしょうか。

メッセージを処理するコマンドラインプロジェクトでリスナーを設定しようとしています。メッセージはキューに送信されますが、システム「B」によって処理されません。

これは間違ったアプローチですか?このタイプの機能のバスはやり過ぎですか?

システムA:

public class Program
{
    static void Main(string[] args)
    {
        var container = new UnityContainer();

        var bus = Configure.With()
            .UnityBuilder(container)
            .JsonSerializer()
            .Log4Net()
            .MsmqTransport()
            .UnicastBus()
            .SendOnly();

        while(true)
        {
            Console.WriteLine("Send a message");
            var message = new Message(Console.ReadLine());
            bus.Send(message);
        }
    }
}

システムB:

class Program
{
    static void Main(string[] args)
    {
        var container = new UnityContainer();

        var bus = Configure.With()
            .UnityBuilder(container)
            .JsonSerializer()
            .Log4Net()
            .MsmqTransport()
            .UnicastBus()
            .LoadMessageHandlers()
            .CreateBus()
            .Start();

        Console.WriteLine("Waiting for messages...");

        while(true)
        {

        }
    }
}

public class MessageHandler : IHandleMessages<Message>
{
    public void Handle(Message message)
    {
        Console.WriteLine(message.Data);
    }
}

public class Message : IMessage
{
    public Message()
    {

    }

    public Message(string data)
    {
        Data = data;
    }

    public string Data { get; set; }
} 
4

1 に答える 1

5

MessageEndpointMappingsで、次のように更新する必要があります。

  1. DLLを、メッセージを含むアセンブリの名前に置き換えます(例:「メッセージ」)
  2. エンドポイントを、システムBが読み取っているキューの名前に変更します(キュー名は、プライベートキューの下のMSMQスナップインを調べることで確認できます)。
<add Messages="Messages" Endpoint="SystemB" />

NServiceBus 3は、ホスティングアセンブリの名前空間に基づいてキュー名を自動的に作成します。

さらに、独自のコンソールアプリケーションの代わりに、 NServiceBus.Hostを使用してハンドラーをホストすることを検討することもできます。

于 2012-04-17T10:25:48.563 に答える