Anypoint MQ Publish 操作 - Mule 4

Publish 操作では、新しい Anypoint MQ メッセージを作成し、指定した宛先 (キュー、FIFO キュー、メッセージエクスチェンジ) に送信できます。この操作を使用して、メッセージのコンテンツと、必要なすべてのヘッダーとプロパティの両方を設定できます。

送信メッセージ構造

メッセージには次のパラメーターが含まれます。

  • body

    パブリッシュされた Anypoint MQ メッセージの本文が含まれます。

  • properties

    メッセージのプロパティである文字列のシンプルなキー - 値のマップを表します。

メッセージの送信

デフォルトの形式で使用された場合、コネクタによって受信メッセージの ​payload​ で見つかったコンテンツが文字列としてシリアル化された Anypoint MQ メッセージの ​body​ として、宣言された ​destination​ にパブリッシュされます。

Anypoint MQ Publish 操作
<anypoint-mq:publish destination="invoiceQueue" config-ref="Anypoint_MQ_config"/>

この操作では、次の出力が生成されます。

  • ペイロードとして送信された本文のコピー

    たとえば、「Hello world」メッセージを送信する場合、結果のペイロードは「Hello world」文字列になります。

  • メッセージ属性に含まれるメッセージの ​messageId​ 値

Anypoint MQ Publish 操作の出力属性

ユーザープロパティの設定

たとえば、他のメッセージングシステムとの互換性の提供、またはメッセージのコンテンツタイプの通信などのために、送信メッセージのプロパティを定義できます。 Anypoint MQ は、プロパティ値で文字列と数値をサポートしています。

数値プロパティ値に基づくルーティングルールを作成し、Anypoint MQ Connector を使用してメッセージをパブリッシュする場合、Anypoint MQ Connector バージョン 3.2.0 以降にアップグレードする必要があります。 これより前のバージョンのコネクタでは、すべてのプロパティ値が文字列として送信されるため、メッセージは数値プロパティに基づくルーティングルールに一致しません。

これらのプロパティをメッセージで直接設定するには、Publish 操作の ​properties​ パラメーターを使用し、DataWeave を使用してキーと値のマップを定義します。

次に例を示します。

プロパティを使用する Anypoint MQ Publish
<anypoint-mq:publish config-ref="Anypoint_MQ_Config"
    destination="invoiceQueue">
  <anypoint-mq:properties><![CDATA[#[output application/java ---
      {
          AUTH_TYPE: 'jwt',
          AUTH_TOKEN: attributes.queryParams.token
        }]]]>
      <anypoint-mq:properties>
</anypoint-mq:publish>

Publish 操作で定義したユーザープロパティは、Anypoint MQ のメッセージの ​[Message Browser (メッセージブラウザー)]​ 詳細ペインに表示されます。

「Message Browser (メッセージブラウザー)」 詳細ペインの 「User Properties (ユーザープロパティ)」
Figure 1. この画面では、(​1​) ​[Message Browser (メッセージブラウザー)]​ オプションとその詳細ペインに (​2​) ​[User Properties (ユーザープロパティ)]​ が表示されています。

メッセージ本文の変換

ペイロードの形式が正しくない場合、正しい形式に変換できます。

ペイロードを変換するには、Publish 操作の ​body​ パラメーターでインライン DataWeave 変換を宣言します。

変換を使用する Anypoint MQ Publish
<anypoint-mq:publish config-ref="Anypoint_MQ_Config"
   destination="invoiceQueue">
      <anypoint-mq:body ><![CDATA[#[output application/json ---
      {
        customer: payload.id,
        items: payload.invoice.items
      }]]]>
      </anypoint-mq:body>
</anypoint-mq:publish>

このケースでは、操作の結果は JSON として​変換された​値になります。

詳細な設定

Anypoint MQ で一意のメッセージ ID を生成できるようにする代わりに、一意のカスタムメッセージ ID を設定できます。プロパティとしてメッセージ本文のコンテンツタイプを追加することもできます。

カスタムメッセージ ID の設定

Anypoint MQ で新しくパブリッシュされたメッセージの一意の ​messageId​ 値を生成できるようにする代わりに、​[Advanced (詳細)]​ タブの ​[Message Id (メッセージ ID)]​ 項目でカスタム ​messageId​ 値を設定します。

Anypoint MQ Publish の 「Advanced (詳細)」 タブ - 「Message Id (メッセージ ID)」

Anypoint MQ メッセージの ID は一意である必要があります。重複する ID の不要な副作用を避けるために一意のカスタム ID を選択します。 FIFO キューでは、メッセージの重複を排除できます。同じメッセージ ID が含まれる FIFO キューに複数のメッセージを送信した場合、最初に到着したメッセージが有効なメッセージとして保持されます。 詳細は、​「FIFO の正確に 1 回の配信」​を参照してください。

メッセージ配信の遅延

Anypoint MQ では、メッセージをパブリッシュし、​deliveryDelay​ パラメーターを使用してコンシューマーに表示されるまで延期する機能がサポートされています。

  1. Publish 操作を選択します。

  2. [Advanced (詳細)]​ タブをクリックします。

  3. [Delivery Delay (配信遅延)]​ パラメーターを遅延する時間に設定します。

    Anypoint MQ Publish の 「Advanced (詳細)」 タブ - 「Delivery Delay (配信遅延)」

    デフォルトでは、​deliveryDelay​ パラメーターは ​0​ に設定されています。これはメッセージをすぐに (遅延なしで) 配信することを示します。​deliveryDelay​ の最大値は 15 分です。

    詳細は、​「遅延したメッセージの配信」​を参照してください。

  4. [Delivery Delay Unit (配信遅延単位)]​ メニューから単位を選択します。

メッセージグループ ID の設定

FIFO キューを使用する場合、​messageGroupID​ パラメーターを使用して送信メッセージにメッセージグループ ID を割り当てることができます。

  1. Publish 操作を選択します。

  2. [Advanced (詳細)]​ タブをクリックします。

  3. [Message Group ID (メッセージグループ ID)]​ 項目に ID を入力します。

    Anypoint MQ Publish の [Advanced (詳細)] タブ - [Message Group ID (メッセージグループ ID)]

    デフォルトでは、FIFO キューに送信されるすべてのメッセージに自動生成された同じグループ ID が割り当てられます。

    詳細は、​「FIFO キューとメッセージグループ」​を参照してください。

メッセージグループを最大限に活用するには、各グループのメッセージ数を少なくしてより詳細なグループを定義します。 たとえば、複数のユーザーからのメッセージを処理する場合、各ユーザーのイベントの相対的な順序を維持するために、ユーザーの ​userId​ 値をメッセージグループ ID として使用します。

コンテンツタイプの伝播

メッセージ本文のコンテンツタイプが Anypoint MQ メッセージのプロパティとして伝播されるかどうかを指定するには、​sendContentType​ パラメーターを使用します。

このパラメーターを ​true​ に設定すると、自動的に ​contentType​ プロパティが送信メッセージに追加されます。これは、メッセージ本文が ​application/json​ または ​application/xml​ 形式であることを宣言する場合に役立ちます。