0
受信メッセージをコンシューマに渡す前に、受信メッセージを検証する必要があります。 これを行うには、データベースからデータを要求する必要があります。IoC注入/データベースを使用したマストトランスティットフィルタ
チュートリアルに続いて、私の仕様+フィルタをコンシューマパイプに適用する拡張メソッドを作成しました。このような何か:
public static void UseArticlesImportValidation(this IConsumePipeConfigurator configurator){}
public class ArticlesImportValidationSpecification : IPipeSpecification<ConsumeContext<ArticlesImportNotification>>
とフィルター
public class ArticlesImportValidationFilter : IFilter<ConsumeContext<ArticlesImportNotification>>
すべてがよさそうだが、私は私のフィルターでのいくつかのビジネスサービスは、いくつかの機能+ DALのサービスを再利用するために注入したいです。これは、私の消費者がAutofac拡張メソッドbuilder.RegisterConsumers(Assembly.GetExecutingAssembly());
を使って完全にうまく動作します。
このためにミドルウェアを使用する必要がありますか?助言がありますか?
public void Apply(IPipeBuilder<T> builder)
{
builder.AddFilter(new ArticlesImportValidationFilter(container.Resolve<IDataAccessSomethingUseful>()));
}
しかし、私は消費者にか、どうかを検証します:あなたはAddPipeSpecification
を呼び出すとき(パラメータとして渡すことは簡単です、あなたの仕様に組み込まれた容器を持っている必要があり、その後、仕様に
これは私が最終的に行ったことですが、消費者の中で検証を行う理由は何ですか、あるいは2人の消費者との間で検証を行う理由は何ですか?それは一般的にメッセージの流れを複雑にしますか? –
それは(tm)に依存します。私のソリューションでは、CQRSドメインモデルに有効なコマンドを送信する必要があります。つまり、送信者は事前にその内容を検証する必要があります。信頼できない送信者がいる場合は、そのような検証のための中間ステップを導入しますが、それは誰にでも当てはまるわけではないので、この検証を常に実行するのは大変です。したがって、私はそれをスリップする。また、検証が失敗した場合、あなたは何をしますか?消費者がいる場合は、「離れて行く」というメッセージを送り返すことができます。これは良い方法です。 –
@ JevgenijNekrasov githubに関するhttps://github.com/MassTransit/MassTransit/issues/737に関する似たようなことがありますが、それも助けになるかもしれません。 –