原文はこちら。
https://blogs.oracle.com/weblogicserver/run-standalone-weblogic-jms-clients-on-kubernetes
最初に、GitHubにあるサンプルWebLogicドメインをベースにして、管理サーバー、およびWebLogicクラスタをもつWebLogicドメインを作成します。
REST APIを使用して、管理サーバーPodに対してスクリプトを実行して、クラスタをターゲットとするリソースをデプロイします。
これでWebLogic JMSサービスの準備は完了です。このサービスに送信されたJMSメッセージはMySQLデータベースに格納されます。
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その際、ファイルベースのメッセージ永続性を使用しました。このエントリでは、前回のエントリから一歩進めて、WebLogic JMSサービスを使用して相互に通信するスタンドアロンJMSクライアントを説明します。今回はデータベースベースのメッセージ永続性を使用します。
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
最初に、GitHubにあるサンプルWebLogicドメインをベースにして、管理サーバー、およびWebLogicクラスタをもつWebLogicドメインを作成します。
WebLogic Sample on Kubernetes with Shared Domain Home次に、データソース、JDBCストア、およびJMSリソースをKubernetesクラスタ上のWebLogicドメインにデプロイします。WebLogic JMSサービスの準備ができて稼働した後、WebLogic JMS宛先との間でメッセージを送受信するために、同じKubernetesクラスタにJavaマイクロサービスを作成してデプロイします。
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/wls-k8s-domain
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
- "Creating the WebLogic Base Domain"
- "Setting Up and Running MySQL Server in Kubernetes"
- "Creating a Data Source for the WebLogic Server Domain"
Deploying the JMS Resources with a JDBC Store
まず、1つのデータベースストア、1つのJMSサーバー、および1つのJMSモジュールの定義を含むJSONデータファイルを準備します。ファイルはPythonスクリプトで処理され、WebLogic Server REST APIを使ってリソースを1つずつ作成します。File jms2.json:続いて、JMSモジュールファイルを準備します。これには接続ファクトリ、分散キュー、分散トピックが含まれています。{"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" ]
}]
}
}
}}
File module2-jms.xml:これらの2ファイルを管理サーバーのPodにコピーしてから、管理サーバーPodでPythonスクリプトを実行し、すべてのJMSリソースを作成します。<?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>
WebLogic Server管理コンソール($ 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
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関連のスクリプト(注意)インストール済みのWebLogicディレクトリ(
https://github.com/lilyhe123/jms-client/
$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の宛先からメッセージを送受信します。$clientPod
with を実際の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に移行する方法についても紹介する予定です。