2016-12-14 6 views
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を呼び出すとき(パラメータとして渡すことは簡単です、あなたの仕様に組み込まれた容器を持っている必要があり、その後、仕様に

答えて

1

+0

これは私が最終的に行ったことですが、消費者の中で検証を行う理由は何ですか、あるいは2人の消費者との間で検証を行う理由は何ですか?それは一般的にメッセージの流れを複雑にしますか? –

+0

それは(tm)に依存します。私のソリューションでは、CQRSドメインモデルに有効なコマンドを送信する必要があります。つまり、送信者は事前にその内容を検証する必要があります。信頼できない送信者がいる場合は、そのような検証のための中間ステップを導入しますが、それは誰にでも当てはまるわけではないので、この検証を常に実行するのは大変です。したがって、私はそれをスリップする。また、検証が失敗した場合、あなたは何をしますか?消費者がいる場合は、「離れて行く」というメッセージを送り返すことができます。これは良い方法です。 –

+0

@ JevgenijNekrasov githubに関するhttps://github.com/MassTransit/MassTransit/issues/737に関する似たようなことがありますが、それも助けになるかもしれません。 –

関連する問題