Send Docs Feedback

Note: Most user interface tasks can be performed in Edge Classic or the New Edge experience. For an overview, getting started topics, and release notes specific to the New Edge experience, see the docs.

Integrating JMS

This topic pertains to Apigee Edge for Private Cloud only, on versions prior to 4.16.01. It is not supported on Private Cloud version 4.16.01 with the introduction of the Nginx server that replaced the Netty router. JMS support on Private Cloud releases after 4.16.01 is pending.

概要

Java Message Service (JMS) と Java Naming and Directory Interface (JNDI) を使用している場合、Apigee Edge 経由で JMS からバックエンドサービスに転送する RESTful コールを作成することができます。JMS は、Edge for Private Cloud (オンプレミス) の環境で、API プロキシの受信/上りリクエストのみでサポートされます。 例えば、複数の JMS キューから受信した JMS メッセージを処理し、ロジックを適用して JMS メッセージを HTTP に変換し、リクエストをターゲットエンドポイントに転送し、レスポンスを JMS として返す (この場合、Edge はデフォルトのレスポンスキューにレスポンスを送信できます) には、API プロキシエンドポイントが必要になります。

次の図に使用事例を示します。

このドキュメントでは、Edge を設定して JMS ホストを操作する方法、受信 JMS メッセージを処理する API プロキシを作成する方法について説明します。

使用している JMS プロバイダにかかわらず、例えば、Apache ActiveMQ と JBoss HornetQ のどちらを使用している場合でも、あるいは、どちらも使用していない場合でも、Edge は JMS プロバイダへの接続に Java Naming and Directory Interface (JNDI) のみをサポートします。JMS プロバイダが JNDI をサポートしない場合、このプロバイダは Edge では使用できないことになります。

JMS キューへの下りの PUT 操作

Apigee のデフォルトの JMS 統合では、JMS キュー (上り) からメッセージを受信して、必要に応じてレスポンスをデフォルトのレスポンスキューに格納することができます。JMS キューへの PUT 操作 (下り) を実行する場合、Java Callout ポリシーを使用します。次の図を参照してください。

Adding JMS libraries to the Edge router

In Edge, the router behaves like a consumer of JMS messages and can subscribe to a queue for a JMS provider like ActiveMQ. This section describes how to add the required JMS libraries to your Edge router so that it can communicate with a JMS provider.

  1. Go to the third-party lib folder in your Edge for Private Cloud installation: cd /opt/apiged4/share/lib/thirdparty.
  2. Download JMS client libraries to the thirdparty folder:
    sudo wget http://repo1.maven.org/maven2/org/apache/activemq/activemq-client/5.8.0/activemq-client-5.8.0.jar
    
    sudo wget http://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-j2ee-management_1.1_spec/1.0.1/geronimo-j2ee-management_1.1_spec-1.0.1.jar
    
    sudo wget http://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar
    
    sudo wget http://repo1.maven.org/maven2/org/fusesource/hawtbuf/hawtbuf/1.2/hawtbuf-1.2.jar
    
  3. Change the file owner and permissions:
    sudo chown apigee geronimo-jms_1.1_spec-1.1.1.jar
    
    sudo chown apigee geronimo-j2ee-management_1.1_spec-1.0.1.jar
    
    sudo chown apigee hawtbuf-1.2.jar
    
    sudo chown apigee activemq-client-5.8.0.jar
    
    sudo chmod +x geronimo-jms_1.1_spec-1.1.1.jar
    
    sudo chmod +x geronimo-j2ee-management_1.1_spec-1.0.1.jar
    
    sudo chmod +x hawtbuf-1.2.jar
    
    sudo chmod +x activemq-client-5.8.0.jar
    

In the next section, you'll create a JMS host entity in Edge that connects Edge to your JMS provider.

JMS ホストの作成

To use JMS with Edge, you configure the JMS connection details by creating a JMS host. The JMS host then can be referenced from JMS API proxy endpoints by using the <JMSHost> or <JmsResponseHost> tags. All JMS API proxies share the same JMS host.

Edge for Private Cloud 管理環境に対する次の API コールで JMS ホストを作成します。

curl –H “Content-Type: application/xml” –u : –X POST “http://{host}:8080/v1/organizations/{org_name}/environments/{env_name}/jmshosts" –d
“<JMSHost name="jmshost1"> 
<Description></Description> 
<ConnectionFactoryClass>org.apache.activemq.jndi.ActiveMQInitialContextFactory</ConnectionFactoryClass> 
<ConnectionFactory>FooFactory</ConnectionFactory>
<ConnectionURL>tcp://172.16.1.94:61616</ConnectionURL>
<Context>JmsContext</Context> 
<ContextUsername>abc</ContextUsername> 
<ContextPassword>password</ContextPassword> 
<ConnectionUsername>admin</ConnectionUsername> 
<ConnectionPassword>password</ConnectionPassword> 
<Connections>5</Connections> 
</JMSHost>”

リクエストペイロードの要素

Name 説明
name JMS ホストの名前。
説明 JMS ホストの説明。
ConnectionFactoryClass JMS 接続ファクトリクラスのプロバイダ固有の実装。
ConnectionFactory 初期コンテキストとしてレジストリサービスプロバイダを選択するためのプロパティ。プロバイダの初期コンテキストファクトリのクラス名を指定します。これはプロバイダに使用されないことに注意してください。
ConnectionURL JNDI プロバイダの URL。
Context 初期の JNDI コンテキストおよび値は JMS プロバイダに固有です。
ContextUsername JNDI コンテキストにアクセスするためのユーザー名。
ContextPassword JNDI コンテキストにアクセスするためのパスワード。
ConnectionUsername JMS プロバイダにアクセスするためのユーザー名。
ConnectionPassword JMS プロバイダにアクセスするためのパスワード。
Connections JMS プロバイダへの物理的な TCP 接続数。最大数は 5 です。

環境と関連付けられた JMS ホストを削除しなければならない場合があります。削除するには、次の API コールを実行します。

curl –u : “http://{host}:8080/v1/organizations/environments/jmshosts/{jmshost_name}” -X DELETE

JMS プロキシエンドポイントの作成

ProxyEndpoint および JmsProxyConnection 要素では、JMS 転送プロパティセットを定義します。これらのプロパティは、ネットワーク設定を設定して JMS プロバイダに接続するために利用できます。

Edge JMS API プロキシエンドポイントは、JMS キューからのメッセージ受信のみをサポートします。その他の JMS 操作はサポートされません。

プロパティは JMS API プロキシで次のように設定します。

<ProxyEndpoint name=”default” proxyType="jmsConnection"> 
<!-- "proxyType” is mandatory if you want to create JMS endpoints -->
  <PreFlow name="PreFlow">
    <Request/>
    <Response/>
  </PreFlow>
  <PostFlow name="PostFlow">
    <Request/>
    <Response/>
  </PostFlow>
  <Flows/>
  <JmsProxyConnection state=”on”>
    <JmsHost>jmshost1</JmsHost> <!-- this is the JMS host created in prev section -->
    <Destination type="queue">dynamicQueues/sourceAppsDataQ</Destination>
    <MessageSelector></MessageSelector>
    <DefaultResponseQueue>dynamicQueues/defaultResponseQueue</DefaultResponseQueue>
    <JmsResponseHost>defaultResponseHost</JmsResponseHost>
  </JmsProxyConnection>
  <RouteRule name="noroute"/>
</ProxyEndpoint> 

JMS プロキシエンドポイントを作成するために、属性 proxyType="jmsConnection" を定義したことを確認します。

また JMS プロバイダ固有のクライアントライブラリがクラスパスにあることも確認します。

プロパティの説明

以下の表では、JMS 実装で利用できるすべての JmsProxyConnection プロパティについて説明します。

プロパティ名 説明 必須であるかどうか
JmsProxyConnection

API プロキシと関連付けられた JMS ネットワークの詳細。属性 state=”on/off” を定義することで、特定のキューに対して、登録/登録解除を動的に設定できます。デフォルト値は “on” です。

The element replaces the HTTPProxyConnection used by non-JMS API proxies.

JmsHost JMS プロキシのために定義された JMS ホスト。
Destination メッセージを待ち受けするキューのパス。
MessageSelector JMS ヘッダーに基づくキューでのセレクタパターン。
DefaultResponseQueue ターゲットからのレスポンスを発行する必要がある JMS キューの名前。
JmsResponseHost JMS プロキシのために定義された JMS レスポンスホスト。指定されている場合、すべてのレスポンスがこのホストを経由してキューに送信されます。

JMS プロキシで使用されるレスポンスメッセージでは、標準的な JMS ヘッダーに一致するすべての HTTP ヘッダーは「そのままの値」として設定され、その他の HTTP ヘッダーは JMS プロパティとして設定されます。

JMS ヘッダーの設定

AssignMessage ポリシーを使用して、JMS プロキシで次のヘッダーを指定することができます。

  • X-Apigee-Ignore-JMSResponse - デフォルトで API プロキシは、レスポンスを JMSReplyTo ヘッダーに指定された JMS レスポンスキューに格納します。ただし、JMSReplyTo に指定されたキューにレスポンスを格納する処理をバックエンドサービスで制御する場合、または、Java コールアウトや別の API プロキシなど、API プロキシの外部で制御する場合、X-Apigee-Ignore-JMSResponse ヘッダーを追加して値を true に設定します。
     
    <Header name="X-Apigee-Ignore-JMSResponse">true</Header>

    ヘッダーを設定する場所:プロキシがバックエンドサービスを呼び出す場合、バックエンドサービスの呼び出しの後にヘッダーを設定する必要があります。レスポンスキューにメッセージを格納するために Java コールアウトまたは別の API プロキシ を使用するなど、バックエンドサービスがない場合は、API プロキシ (この API プロキシでは、キューにレスポンスを格納しません) のフローで、ヘッダーを任意の位置に設定できます。
    API プロキシフローの詳細については、「フローの構成」を参照してください。

ResponseQueue に格納されるメッセージの場合:

  • JMSExpiration - メッセージが期限切れになるまでのミリ秒を単位とする時間。
  • JMSDeliveryMode- 1 (持続的ではない) または 2 (持続的) の値。

Additional information

You can also find a JMS discussion thread on the Apigee Community: https://community.apigee.com/questions/22294/activemq-jms-integration-to-apigee.html.

Help or comments?