1概要


ESB

は、軽量のJavaベースのエンタープライズサービスバスです。それは開発者が異なるフォーマットのデータを交換することによって一緒に複数のアプリケーションを接続することを可能にします。メッセージの形式でデータを運びます。

ESBは、次のような多数のサービスを提供することによって強力な機能を提供します。

  • サービスの作成とホスティング

  • サービス調停

  • メッセージルーティング

  • データ変換

ESBは、複数のアプリケーションを統合する必要がある場合、または将来さらにアプリケーションを追加するという考え方がある場合に役立ちます。

ESBは、複数の種類の通信プロトコルを扱う場合や、メッセージルーティング機能が必要な場合にも使用されます。


こちら

から入手できる

AnyPoint Studio

を使用して、セクション5でサンプルプロジェクトを作成しましょう。

2.

ESB Muleメッセージの構造

簡単に言うと、ESBの主な目的はサービス間の仲介とさまざまなエンドポイントへのメッセージのルーティングです。そのため、さまざまな種類のコンテンツまたはペイロードを処理する必要があります。

メッセージ構造は2つの部分に分けられます。

  • メッセージヘッダ



    メッセージメタデータを含む

  • メッセージペイロード – ビジネス固有のデータが含まれています

  • メッセージはメッセージオブジェクトに埋め込まれています** メッセージオブジェクトはコンテキストから取得できます。 ESB Muleフロー内のカスタムJavaコンポーネントとトランスフォーマーを使ってそのプロパティとペイロードを変更できます。

各アプリケーションは1つ以上のフローで構成されています。

フローでは、コンポーネントを使用してメッセージとそのさまざまなプロパティにアクセスしたり、フィルタをかけたり、変更したりできます。

たとえば、Javaコンポーネントを使用してメッセージのインスタンスを取得できます。このコンポーネントクラスは

org.mule.api.lifecycle

パッケージの

Callable

インターフェースを実装しています。

public Object onCall(MuleEventContext eventContext) throws Exception {
    MuleMessage message = eventContext.getMessage();
    message.setPayload("Message payload is changed here.");
    return message;
}


3プロパティと変数

メッセージのメタデータはプロパティで構成されています。変数はメッセージに関するデータを表します。プロパティと変数がメッセージのライフサイクル全体にどのように適用されるかは、それらの範囲によって定義されます。プロパティには、範囲に基づいて2つのタイプがあります。インバウンドとアウトバウンドです。

  • インバウンドプロパティ** は、フローを横断する間にメッセージがスクランブルされるのを防ぐメタデータを含みます。受信プロパティは不変であり、ユーザーが変更することはできません。メッセージがフローを終了すると、インバウンドプロパティは存在しなくなります。

  • アウトバウンドプロパティ** はESB Muleによって自動的に設定されるか、あるいはユーザはフロー設定を通してそれらを設定することができます。これらの特性は変更可能です。メッセージがトランスポートバリアを通過した後に別のフローに入ると、これらはインバウンドプロパティになります。

それぞれのスコープ内で関連するsetterメソッドとgetterメソッドを呼び出すことで、それぞれ送信プロパティと受信プロパティを設定および取得できます。

message.setProperty(
  "outboundKey", "outboundpropertyvalue", PropertyScope.OUTBOUND);
String inboundProp = (String) message.getInboundProperty("outboundKey");

アプリケーションで宣言できる変数は2種類あります。

1つはESB Muleフローに対してローカルで、フロー、サブフロー、プライベートフローで利用可能なフロー変数です。

一度宣言されたセッション変数は、アプリケーション全体で使用可能になります。


4輸送障壁と

flow-ref


トランスポートバリアは、HTTPコネクタ、VM、JMS、またはメッセージをルーティングするためのパスまたはエンドポイントを必要とする類似のコネクタです。

フロー変数は輸送障壁を越えて利用できませんが、セッション変数はすべてのフローでプロジェクト全体で利用できます。

サブフローまたはプライベートフローを作成する必要があるときは、

flow-ref

コンポーネントを使用して、親または別のフローからのフローを参照できます。 ** フロー変数とセッション変数の両方が、

flow-ref

を使用して参照されるサブフローとプライベートフローで使用できます。

** 5プロジェクト例

Anypoint Studioで、受信コネクタと送信コネクタを介して相互に通信する複数のフローを含むアプリケーションを作成しましょう。

最初の流れを見てみましょう。

リンク:/uploads/Flow-300×90.jpg[]

HTTPリスナーを次のように設定できます。

<http:listener-config name="HTTP__Listener__Configuration"
  host="localhost" port="8081" doc:name="HTTP Listener Configuration"/>

フローコンポーネントは

<flow>

タグの内側になければなりません。そのため、複数のコンポーネントを含むフローの例は次のとおりです。

<flow name="Flow">
    <http:listener
      config-ref="HTTP__Listener__Configuration"
      path="/" doc:name="HTTP"
      allowedMethods="POST"/>
    <logger message="Original
      paylaod: #[payload]"
      level="INFO" doc:name="Logger"/>
    <custom-transformer
      class="com.baeldung.transformer.InitializationTransformer"
      doc:name="Java"/>
    <logger message="Payload After Initialization: #[payload]"
      level="INFO" doc:name="Logger"/>
    <set-variable variableName="f1"
      value="#['Flow Variable 1']" doc:name="F1"/>
    <set-session-variable variableName="s1"
      value="#['Session variable 1']" doc:name="S1"/>
    <vm:outbound-endpoint exchange-pattern="request-response"
      path="test" doc:name="VM"/>
</flow>

フロー内では、設定済みのHTTPリスナーへの参照を提供しています。その後、HTTPリスナーがPOSTメソッドを介して受信しているペイロードを記録するロガーを保持しています。

その後、メッセージを受信した後にペイロードを変換するカスタムJavaトランスフォーマクラスが配置されます。

public Object transformMessage(
  MuleMessage message,
  String outputEncoding) throws TransformerException {

    message.setPayload("Payload is transferred here.");
    message.setProperty(
      "outboundKey", "outboundpropertyvalue", PropertyScope.OUTBOUND);
    return message;
}

  • トランスフォーマクラスは




    AbstractMessageTransformer ** .を拡張する必要があります。また、クラス内にアウトバウンドプロパティも設定します。

これで、すでにメッセージオブジェクト内のペイロードを変換し、それをloggerを使ってコンソールに記録しました。フロー変数とセッション変数を設定します。

最後に、発信VMコネクタを介してペイロードを送信しています。 ** VMコネクタ内のパスによって受信エンドポイントが決まります。

リンク:/uploads/Flow1-300×91.jpg[]

初期フローによって伝送および変換されたメッセージは、インバウンドVMエンドポイントを介して

Flow1

に到達します。

Javaコンポーネントは最初のフローで設定されたアウトバウンドプロパティを取得し、メッセージペイロードになるオブジェクトを返します。このタスクの

transformMessage()

メソッド

public Object transformMessage(
  MuleMessage message,
  String outputEncoding) throws TransformerException {

    return (String) message.getInboundProperty("outboundKey");
}

次に、フロー変数とセッション変数が2番目のフローに設定されます。その後、

flow-ref

コンポーネントを使用して

Flow2

への参照を取得しました。

リンク:/uploads/Flow2-300×125.jpg[]


Flow2では、Javaコンポーネントクラスを使用してメッセージを変換し、コンソールに記録しました。フロー変数

F3__も設定しました。


flow-refを使用して

Flow2

を呼び出した後、Flow1

はメッセージが


_Flow2

_



で処理されるのを待ちます。


  • Flow1



    Flow2

    に設定されたフロー変数は両方のフローで使用できます。これらのフローはトランスポートバリアによって分離されていないためです。

最後に、メッセージはVMを通じ​​てHTTPリクエスタに返送されます。すべてのVMを要求 – 応答として構成しました。

本文にJSONデータを投稿することで、あらゆるRESTクライアントからこのアプリケーションを呼び出すことができます。 HTTPリスナーで設定されているとおり、URLは

localhost:8081

になります。


6. コマンドラインでMavenを使用してプロジェクトを構築する

Mavenのconfディレクトリにある

settings.xml

ファイルに、

pluginGroup

を含める必要があります。

<pluginGroups>
    <pluginGroup>org.mule.tools</pluginGroup>
</pluginGroups>

また、Muleのリポジトリを見つける場所をMavenに指示する必要があります。これはprofileタグに含める必要があります。

<profile>
    <id>Mule Org</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
        <repository>
            <id>mulesoft-releases</id>
            <name>MuleSoft Repository</name>
            <url>https://repository-master.mulesoft.org/releases/</url>
            <layout>default</layout>
        </repository>
        <repository>
            <id>mulesoft-snapshots</id>
            <name>MuleSoft Snapshot Repository</name>
            <url>https://repository-master.mulesoft.org/snapshots/</url>
            <layout>default</layout>
        </repository>
    </repositories>
</profile>

これで、次のコマンドを使ってMavenプロジェクトを簡単に始めることができます。

mvn mule-project-archetype:create -DartifactId=muleesb -DmuleVersion=3.8.1

プロジェクトを設定したら、

mvn package

コマンドを使用してデプロイ可能なアーカイブを作成できます。これで、アーカイブを任意のスタンドアローンESB Muleサーバの

apps

フォルダに配置できます。

7.まとめ

この記事では、ESBアプリケーションとしてESBアプリケーションをMuleでビルドするために必要なさまざまな概念について説明しました。説明したすべての概念を示すサンプルプロジェクトを作成しました。

Anypoint Studioを使用してESBアプリケーションの作成を開始し、さまざまなニーズを満たすことができます。

いつものように、完全なプロジェクトはhttps://github.com/eugenp/tutorials/tree/master/muleesb[over on GitHub]にあります。