ESB Mule ESBを始めよう

ESB Mule ESB入門

1. 概要

Mule ESBは、軽量のJavaベースのエンタープライズサービスバスです。 開発者は、異なる形式のデータを交換することにより、複数のアプリケーションを接続できます。 メッセージの形式でデータを運びます。

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

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

  • サービス調停

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

  • データ変換

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

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

ダウンロードhereで利用可能なAnyPoint Studioを使用して、セクション5でサンプルプロジェクトを作成しましょう。

2. Mule Message Structure

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

メッセージ構造は2つの部分に分かれています。

  • メッセージメタデータを含むメッセージヘッダー

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

Message is embedded within a message object.コンテキストからメッセージオブジェクトを取得できます。 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. プロパティと変数

メッセージメタデータはプロパティで構成されます。 変数は、メッセージに関するデータを表します。 プロパティと変数がメッセージのライフサイクル全体にどのように適用されるかは、それらのスコープによって定義されます。 Properties can be of two types, based on their scope: inbound and outbound.

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

Outbound propertiesは、Muleによって自動的に設定することも、ユーザーがフロー構成を通じて設定することもできます。 これらのプロパティは変更可能です。 トランスポートバリアを通過した後にメッセージが別のフローに入ると、これらはインバウンドプロパティになります。

それぞれのスコープで関連するsetterおよびgetterメソッドを呼び出すことにより、それぞれアウトバウンドおよびインバウンドプロパティを設定および取得できます。

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

アプリケーションで宣言できる変数には2つのタイプがあります。

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

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

4. 輸送障壁とflow-ref

トランスポートバリアは、HTTPコネクタ、VM、JMS、またはメッセージをルーティングするためのパスまたはエンドポイントを必要とする同様のコネクタです。 Flow variables aren’t available across transport barriers, but session variables are available across the project in all flows.

サブフローまたはプライベートフローを作成する必要がある場合、flow-refコンポーネントを使用して、親または別のフローからのフローを参照できます。 Both flow variables and session variables are available in sub-flows and private flows referred using flow-ref.

5. サンプルプロジェクト

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

最初のフローを見てみましょう。

image

 

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

フローコンポーネントは、<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;
}

The transformer class must extend*AbstractMessageTransformer*.クラス内にアウトバウンドプロパティも設定しています。

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

最後に、アウトバウンドVMコネクタを介してペイロードを送信しています。 The path in VM connector determines the receiving endpoint:

image

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

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

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

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

次に、フローおよびセッション変数が2番目のフローに設定されます。 その後、flow-refコンポーネントを使用してFlow2への参照を取得します。

image

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

flow-ref, Flow1を使用してFlow2を呼び出した後、メッセージがFlow2.で処理されるのを待ちます

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

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

本文にJSONデータを投稿することにより、RESTクライアントからこのアプリケーションを呼び出すことができます。 URLは、HTTPリスナーで構成されたlocalhost:8081になります。

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

Mavenのconfディレクトリにあるsettings.xmlファイルに、pluginGroupを含める必要があります。


    org.mule.tools

また、MavenにMuleリポジトリの場所を伝える必要があり、これをプロファイルタグに含める必要があります。


    Mule Org
    
        true
    
    
        
            mulesoft-releases
            MuleSoft Repository
            https://repository-master.mulesoft.org/releases/
            default
        
        
            mulesoft-snapshots
            MuleSoft Snapshot Repository
            https://repository-master.mulesoft.org/snapshots/
            default
        
    

これで、次のコマンドを使用してMavenプロジェクトを簡単に開始できます。

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

プロジェクトを構成した後、mvn packageコマンドを使用してデプロイ可能なアーカイブを作成できます。 これで、スタンドアロンのMuleサーバーのappsフォルダーにアーカイブをデプロイできます。

7. 結論

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

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

いつものように、完全なプロジェクトはover on GitHubで見つけることができます。