2012-04-06 9 views
2

NServiceBus 3.0.3では、私はサガを書いています。私がCQRSのパラダイムで見ていることに基づいて、過去の時制を見ると、それはイベントと一致するはずです。私は私の舞台にビジネスロジックを持たないようにしたい。サガを構築する際の私の前提は、イベントを受け取り、サガに格納された特定のデータ要素だけでなく、入ったイベントに基づいてコマンドを発行するということです。私が取り組んでいる問題は、デフォルトでSagaが公開されたイベントに登録できないということです。私はIWantToRunAtStartupを設定EndPointConfigに、私は佐賀、まだありませんサイコロと同じアセンブリ内のハンドラを作成しようとしましたNservicebus Sagasとイベントの購読

Bus.Subscribe<CustomerBilledEvent>(); 

実行Runメソッドで試してみました。

(Nservicebus.host.exe主催)佐賀とパブリッシャ(コンソールアプリケーションでサービス)の両方のための私のApp.configファイルの両方よう

<add Messages="Events.CustomerBilledEvent, Events" Endpoint="orderservice"/> 

IHandleMessagesように構成されたメッセージ・エンドポイントを持っているがされていますSagaで設定され、マッピングはオーダーIDに設定されています。

IHandleMessages<CustomerBilledEvent> 

ConfigureMapping<CustomerBilledEvent>(s => s.OrderId, m=> m.OrderId); 

私は佐賀は、このイベントをサブスクライブするために得ることができない理由として失わ少しです。私は彼らがデフォルトで自動購読しないと理解していますが、UdiとJohnのブログの下のサンプルを見ると、過去の時制が送信されているのが見えます(IEvent?)、そして私は命令であると推測するBus.Sendを発行します。

+0

CustomerBilledEventの発行者は "orderservice"エンドポイントですか? –

+0

いいえ、イベントの発行元は別のサービスです。私が設定したのは、OrderService(おそらくOrderSagaServiceの名前を変更する必要があります)がBillingServiceに送信されるコマンドを起動するということです。ビリングサービスはロジックを実行し、CustomerbilledEventをパブリッシュします。これは、この注文サービスに戻ることがわかったA)Sagaプロパティ「customerbilled」をマークし、B)次のコマンドをオフにします。これは、Sagas内でICommandとIEventをどのように活用するかを理解するために取り組んでいるサンプルコードです。オフベースの場合は、任意の方向を歓迎します。 –

+0

サガースは3.0で自動的にサブスクライブを行いますが、課金サービスのサブスクリプションストレージをセットアップしましたか?また、3.0.3も使用していることを確認してください。 –

答えて

1

問題は、あなたのサガがCustomerBilledEventについて通知される "orderservice"エンドポイントを購読しようとしているが、エンドポイントがそれを公開していないということです。

+0

パーフェクト!私はあなたの答えを読む分、私は自分のコードを見て、どのように私はそれを欠けていた信じられませんでした。オーダー・サービスを変更して、「出版社がそこにいる」対「これがあなたがイベントを処理したい場所です」と言いました。それを指摘してくれてありがとう。 –

関連する問題