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その際、JMSストアとしてファイルストアを使用しました。このエントリでは、前回のエントリから一歩進めて、WebLogic JMSサービスを使用して相互に通信するスタンドアロンJMSクライアントを説明します。今回はJMSストアとしてJDBCストアを使用します。
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に移行する方法についても紹介する予定です。
0 件のコメント:
コメントを投稿