1

メッセージング インフラストラクチャとして NserviceBus を使用し、RabbitMQ をトランスポートとして使用しています。NServiceBus 5.* バージョンから 6.0 にアップグレードしようとしています。5.0 では、"Bus.Defer()" を使用してイベントを延期できました。しかし、6.0 ではメッセージのみを延期でき、イベントは延期できないようです ??

メッセージが「イベント」である以下のコードを使用すると、イベントを発行する必要があるというエラーが表示されます。

        var sendOptions = new SendOptions();
        sendOptions.DoNotDeliverBefore(DateTimeOffset.Now.AddMinutes(30));
        sendOptions.RouteToThisEndpoint();
        return context.Send(message, sendOptions);

ただし、context.Publish(message, new PublishOptions())メソッドは、延期するオプションを持たない「PublishOptions」を取り込みます。

ここで何か不足していますか?誰かが助けてくれれば感謝します。

4

2 に答える 2

1

私は別のフォーラムで回答を得ており、それが最も関連性が高いと思うので、将来誰かを助けることができるようにここに投稿してください. ダニエル・マーバッハに感謝

https://groups.google.com/forum/#!topic/particularsoftware/ivy1wdsycT8

v5 の Bus.Defer は、内部的に常に送信操作を行っていました。v6 との違いは、メッセージングのベスト プラクティスが自動的に無効になったことです。あなたは呼び出すことによって同じことを達成することができます

        var sendOptions = new SendOptions();
        sendOptions.DoNotDeliverBefore(DateTimeOffset.Now.AddMinutes(30));
        sendOptions.RouteToThisEndpoint();
        sendOptions.DoNotEnforceBestPractices();
        return context.Send(message, sendOptions);

https://docs.particular.net/nservicebus/messaging/best-practice-enforcement

于 2017-09-20T19:34:46.467 に答える
1

一部の変更はすぐには有効にならないため、これらのイベントの一部を延期する必要があります。

パブリッシャーは、サブスクライバーによって制約されるべきではありません。

ProductDataUpdate実際の発効日がいつになるかに関係なく、製品オーサリング システムがイベントを発行すると想定するのは正しいですか? そのような場合、行われた決定についてはすでに通知されています。サブスクライバーとして何をするかは、別のことであり、完全に内部的なものです。

この議論のためにそれと呼ぶコマンドを送信することができますが、それは将来UpdateProductCostの遅延メッセージになります。EffectiveDateそれ以外の場合は、即時コマンドです。

于 2017-09-20T19:26:09.487 に答える