0

NServiceBus、RabbitMQ、MassTransit、EasyNetQ の調査を開始しています。

私が特に理解したい詳細の 1 つは、公開されたすべてのメッセージでメタデータのカスタム セットが常に送信されるようにする方法です。

たとえば、メッセージ プロデューサが何をパブリッシュするかに関係なく、次の情報が常にメッセージの一部として送信されるようにしたい場合があります。

  • タイムスタンプ
  • ワークフロー名
  • 優先順位

メタデータが何であるかは重要ではありません。重要なのは、そのような任意の情報を転送するオプションまたは機能を持つことです。

プロデューサーによって送信されたメッセージの名前空間とクラス名が、メッセージの「ルーティング キー」に自動的に変換されるという考えが気に入っています。ただし、追加のメタデータをメッセージに添付するには、任意のメッセージをラッパー オブジェクトのペイロードに変換できる、ある種の「公開前」フック ポイントが必要になる場合があります。そのような:

public class BaseMessage {
    //a couple fields of meta-data that every message should have.
    public string TimeStamp;
    public int Priority;

    //The payload is the real message that the consumer cares about
    //and can be any format (JSON, XML, etc).
    public string payload;
}

この場合、「ルーティング キー」に の名前または名前空間を含めたくありませんBaseMessage。シリアル化される前のペイロード タイプは、その「ルーティング キー」のベースとなるものです。

もちろん、これはすべて、消費者が BaseMessage とペイロードの両方を逆シリアル化するための便利な方法を持っていることも前提としています。

では、私がリストしたツールのうち、この種のニーズをサポートしているのはどれでしょうか? 該当する場合は、構文例を示してください。

4

2 に答える 2

0

NServiceBus では、メッセージ ミューテーターを使用して、送信されるすべてのメッセージに必要なデータが含まれていることを確認します。

http://docs.particular.net/samples/messagemutators/#transportmessagecompressionmutator

また、ヘッダーを使用してこのデータを送信し、ビジネス データ コントラクトがインフラストラクチャの問題で「汚染」されるのを避けることをお勧めします。

于 2015-01-31T06:37:51.947 に答える