NServiceBus 3.0.3 で、私はサガを書きました。私が CQRS パラダイムで見ているものに基づいて、過去時制を見ると、それはイベントと一致するはずです。サガにビジネス ロジックがないことを確認したい。サガを構築する際の私の仮定は、イベントを受信し、受信したイベントとサガに保存されている特定のデータ要素に基づいてコマンドを発行するというものです。私が直面している問題は、Saga がデフォルトで公開されたイベントをサブスクライブできないことです。EndPointConfig で IWantToRunAtStartup を設定し、Run メソッドを実行してみました
Bus.Subscribe<CustomerBilledEvent>();
サガと同じアセンブリでハンドラーを作成しようとしましたが、サイコロはまだありません。
サガ (Nservicebus.host.exe によってホストされる) とパブリッシャー (コンソール アプリケーションのサービス) の両方の app.config には、メッセージ エンドポイントがそのように構成されています。
<add Messages="Events.CustomerBilledEvent, Events" Endpoint="orderservice"/>
Saga で IHandleMessages が構成され、orderid でマッピングが構成されています。
IHandleMessages<CustomerBilledEvent>
ConfigureMapping<CustomerBilledEvent>(s => s.OrderId, m=> m.OrderId);
なぜ佐賀にこのイベントをサブスクライブしてもらえないのか、少し迷っています。デフォルトでは自動サブスクライブしないことは理解していますが、Udi と John のブログのサンプルを見ると、過去時制がサガに送信され (IEvent?)、コマンド (ICommand) であると推測される Bus.Send が発行されていることがわかります。