[WLS, Docker] Run Standalone WebLogic JMS Clients on Kubernetes

原文はこちら。
https://blogs.oracle.com/weblogicserver/run-standalone-weblogic-jms-clients-on-kubernetes

Overview

JMSアプリケーションは、JMSサービスを使用してメッセージを送受信するアプリケーションです。WebLogic JMSアプリケーションには、サーバーサイドのJMSアプリケーションとスタンドアロンのJMSクライアントの2種類があります。サーバーサイドアプリケーションは、WebLogic Serverまたはクラスタ上で実行されているアプリケーションで、通常はMDB、サーブレットなどのJava EEアプリケーションです。スタンドアロンJMSクライアントは、外部EEサーバー、デスクトップアプリケーション、またはマイクロサービスで実行されるアプリケーションです。直近のエントリ「Run a WebLogic JMS Sample on Kubernetes」で、Kubernetes上で稼働するJava EEアプリケーション間でWebLogic JMS通信の説明をいたしました。
Run a WebLogic JMS Sample on Kubernetes
https://blogs.oracle.com/weblogicserver/run-a-weblogic-jms-sample-on-kubernetes
https://orablogs-jp.blogspot.jp/2017/12/run-weblogic-jms-sample-on-kubernetes.html
その際、JMSストアとしてファイルストアを使用しました。このエントリでは、前回のエントリから一歩進めて、WebLogic JMSサービスを使用して相互に通信するスタンドアロンJMSクライアントを説明します。今回はJMSストアとしてJDBCストアを使用します。
最初に、GitHubにあるサンプルWebLogicドメインをベースにして、管理サーバー、およびWebLogicクラスタをもつWebLogicドメインを作成します。
WebLogic Sample on Kubernetes with Shared Domain Home
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/wls-k8s-domain
次に、データソース、JDBCストア、およびJMSリソースをKubernetesクラスタ上のWebLogicドメインにデプロイします。WebLogic JMSサービスの準備ができて稼働した後、WebLogic JMS宛先との間でメッセージを送受信するために、同じKubernetesクラスタにJavaマイクロサービスを作成してデプロイします。

REST APIを使用して、管理サーバーPodに対してスクリプトを実行して、クラスタをターゲットとするリソースをデプロイします。

Creating WebLogic JMS Services on Kubernetes

Preparing the WebLogic Base Domain and Data Source

「Run a WebLogic JMS Sample on Kubernetes」のエントリの説明に従って、ドメインの作成、MySQLデータベースの設定、データソースの作成という手順を完了していれば、次のセクションに進むことができます。それ以外の場合は、「Run a WebLogic JMS Sample on Kubernetes」のエントリの以下のセクションの手順を完了する必要があります。
Run a WebLogic JMS Sample on Kubernetes
https://blogs.oracle.com/weblogicserver/run-a-weblogic-jms-sample-on-kuberneteshttps://orablogs-jp.blogspot.jp/2017/12/run-weblogic-jms-sample-on-kubernetes.html
  1. "Creating the WebLogic Base Domain"
  2. "Setting Up and Running MySQL Server in Kubernetes"
  3. "Creating a Data Source for the WebLogic Server Domain"
今回は、Kubernetesクラスタ上で実行されるbaseというWebLogicドメインと、同じKubernetesクラスタ内で実行されるMySQLデータベースに接続するデータソースを設定しておく必要があります。

Deploying the JMS Resources with a JDBC Store

まず、1つのデータベースストア、1つのJMSサーバー、および1つのJMSモジュールの定義を含むJSONデータファイルを準備します。ファイルはPythonスクリプトで処理され、WebLogic Server REST APIを使ってリソースを1つずつ作成します。
File jms2.json:
{"resources": {  
  "jdbc1": {
    "url": "JDBCStores",
    "data": {
      "name": "jdbcStore1",
      "dataSource": [
        "JDBCSystemResources",
        "ds1"
      ],
      "targets": [{
                 "identity":["clusters", "myCluster"]
                }]
    }
  },
 
  "jms2": {
    "url": "JMSServers",
    "data": {
      "messagesThresholdHigh": -1,
      "targets": [{
                   "identity":["clusters", "myCluster"]
                  }],
      "persistentStore": [
         "JDBCStores",
         "jdbcStore1"
        ],
      "name": "jmsserver2"
    }
  },
 
  "module": {
    "url": "JMSSystemResources",
    "data": {
      "name": "module2",
      "targets":[{
                  "identity": [ "clusters", "myCluster" ]
                }]
    }
  },
 
  "sub2": {
    "url": "JMSSystemResources/module2/subDeployments",
    "data": {
      "name": "sub2",
      "targets":[{
                  "identity": [ "JMSServers", "jmsserver2" ]
                }]
    }
  }
}}
続いて、JMSモジュールファイルを準備します。これには接続ファクトリ、分散キュー、分散トピックが含まれています。
File module2-jms.xml:
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-jms xmlns="http://xmlns.oracle.com/weblogic/weblogic-jms" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-jms http://xmlns.oracle.com/weblogic/weblogic-jms/1.1/weblogic-jms.xsd">
  <connection-factory name="cf2">
    <default-targeting-enabled>true</default-targeting-enabled>
    <jndi-name>cf2</jndi-name>
    <transaction-params>
      <xa-connection-factory-enabled>true</xa-connection-factory-enabled>
    </transaction-params>
    <load-balancing-params>
      <load-balancing-enabled>true</load-balancing-enabled>
      <server-affinity-enabled>false</server-affinity-enabled>
    </load-balancing-params>
  </connection-factory>
  <uniform-distributed-queue name="dq2">
    <sub-deployment-name>sub2</sub-deployment-name>
    <jndi-name>dq2</jndi-name>
  </uniform-distributed-queue>
  <uniform-distributed-topic name="dt2">
    <sub-deployment-name>sub2</sub-deployment-name>
    <jndi-name>dt2</jndi-name>
    <forwarding-policy>Partitioned</forwarding-policy>
  </uniform-distributed-topic>
</weblogic-jms>
これらの2ファイルを管理サーバーのPodにコピーしてから、管理サーバーPodでPythonスクリプトを実行し、すべてのJMSリソースを作成します。
$ kubectl exec $adminPod -- mkdir /u01/wlsdomain/config/jms/
$ kubectl cp ./module2-jms.xml $adminPod:/u01/wlsdomain/config/jms/
$ kubectl cp ./jms2.json $adminPod:/u01/oracle/
$ kubectl exec $adminPod -- python /u01/oracle/run.py createRes /u01/oracle/jms2.json
WebLogic Server管理コンソール(http://<hostIP>:30007/console)を開き、すべてのJMSリソースが正常に動作していることを確認します。宛先 dq2 の監視ページに移動して、2個のメンバー(jmsserver2@managed-server-0@dq2 と jmsserver2@managed-server-1@dq2)の存在を確認します。



これでWebLogic JMSサービスの準備は完了です。このサービスに送信されたJMSメッセージはMySQLデータベースに格納されます。

Running the WebLogic JMS Client

JMSクライアントPodは、WebLogicクライアントJARファイルとともにパッケージされたopenjdk8イメージに基づくJavaマイクロサービスです。クライアント関連のスクリプト(Dockerfile、JMSクライアントJavaファイル、およびyamlファイルを含む)はGitHubにあります。
JMS Client関連のスクリプト
https://github.com/lilyhe123/jms-client/
(注意)インストール済みのWebLogicディレクトリ($WL_HOME/server/lib)からwlthint3client.jarを取得し、jms-client/container-scripts/lib</>フォルダに入れる必要があります。

(Step 1)JMSクライアントのDockerイメージをビルドします。イメージには、直接実行可能なコンパイル済みのJMSクライアントクラスが含まれます。

$ cd jms-client
$ docker build -t jms-client .
(Step 2)JMSクライアントPodを作成します。
$ kubectl create -f jmsclient.yml
Javaプログラムを実行してWebLogic JMSの宛先からメッセージを送受信します。$clientPodwith を実際のJMSクライアントPod名に置き換えてください。

送信プログラムを実行して宛先dq2にメッセージを送信します。
$ kubectl exec -it $clientPod java samples.JMSSender


デフォルトで、送信側は実行毎に10個のメッセージを送信します。これらのメッセージは宛先dq2の2個のメンバーに分配されます。管理コンソールで確認してみましょう。

受信プログラムを実行して宛先dq2からメッセージを受け取ります。
$ kubectl exec -it $clientPod java samples.JMSReceiver dq2
受信プログラムは、WebLogicのJMSDestinationAvailabilityHelper APIを使用して分散キューのメンバーシップの変化に関する通知を取得します。それゆえ、受信プログラムはdq2の両方のメンバーからメッセージを受信できます。詳細な使用方法については、以下のドキュメントをご覧ください。
Oracle® Fusion Middleware Oracle WebLogic Server JMSアプリケーションの開発 12c (12.2.1.2.0)
JMS宛先の可用性ヘルパーAPIを使用した分散宛先に関する拡張プログラミング
https://docs.oracle.com/cd/E84527_01/wls/JMSPG/dahelper.htm#GUID-516D21A5-EEE5-4397-806F-DB9DB28AD1E8
Oracle® Fusion Middleware Developing JMS Applications for Oracle WebLogic Server 12c (12.2.1.3.0)
Advanced Programming with Distributed Destinations Using the JMS Destination Availability Helper API
https://docs.oracle.com/middleware/12213/wls/JMSPG/dahelper.htm#JMSPG928

Summary

このエントリでは、「Run a WebLogic Sample on Kubernetes」のサンプルを拡張して、外部JMSクライアントを使った、Kubernetesクラスタで動作しているWebLogic JMSサービスとの通信を説明しました。
Run a WebLogic JMS Sample on Kubernetes
https://blogs.oracle.com/weblogicserver/run-a-weblogic-jms-sample-on-kubernetes
https://orablogs-jp.blogspot.jp/2017/12/run-weblogic-jms-sample-on-kubernetes.html
基本的なKubernetesの機能を利用してWebLogic Serverのライフサイクルを管理し、データベースベースのメッセージ永続性(JDBCストア)を使用して、Podのライフサイクルを超えてデータを保持しました。今後、将来予定されている完全に動作保証されたWebLogic KubernetesのオペレータベースのKubernetes環境を使用して、WebLogic JMSクラスタをホストする方法を紹介する予定です。また、WebLogic JMSの自動サービス移行を使用して、JMSインスタンスをシャットダウンされたPodから実行中のPodに移行する方法についても紹介する予定です。

0 件のコメント:

コメントを投稿