QueueGet - JMSQueueからの入力

JMSQueueシステムからストリームとして読み込みます。

連携時の設定方法の参考情報として、下記トピックで「IBM Websphere MQを使用する場合の設定方法」を説明します。

■ストリーム情報

入力フォーマットすべて
接続数1
説明 入力ストリームは使用せず、すべて無視します。
出力フォーマットすべて
説明読み込んだストリームの種類に応じて設定します。

出力ストリーム変数

名前データ型説明
JMSDestinationstring配信先
JMSDeliveryModeinteger永続化フラグ
JMSMessageIDstringメッセージの識別値
JMSTimestampintegerメッセージが送信された時間
JMSExpirationintegerメッセージの有効期限(1970年1月1日からのミリ秒数)
JMSRedeliveredboolean再配信されたメッセージならtrue
JMSPriorityintegerメッセージの優先順位
JMSReplyTostring返信先を表わす任意の情報
JMSCorrelationIDstring任意の識別子
JMSTypestring任意の情報

■コンポーネントプロパティ

名前プロパティ型マッピング説明
コネクション名connection- 接続先のキューを指定します。 コネクションペインまたは管理コンソールにて作成されたQueue(JMS)接続名を選択します。
各コネクションの詳細については、「はじめに」-「詳細なトピック」-「フローの構成要素」-「コネクションプロパティ」を参照してください。
キュー名string入力&出力 読み込むキューの名前を指定します。
選択条件string入力&出力 SQLのWHERE句に似た文法を指定してメッセージを選別します。
通常は、キューシステムで決められたプライオリティに応じた順番でメッセージを取得しますが、Selectionを指定することによりある条件に応じたメッセージだけを取得することが可能になります。
例えば、QueuePutコンポーネントのメッセージプロパティ に"Age"と"Name"という値をセットしておいて、"Age < 30 AND Name='name1'"と指定するとAgeが30未満でNameがname1のメッセージだけを取得することができます。
LIKE BETWEEN INなども使用できるので以下のような文も可能です。
Name LIKE 'name1 %'
Age BETWEEN 20 and 30
Name IN ('name1', 'name2', 'name3')
読込み件数int入力&出力 JMSQueueシステムに複数のメッセージが溜まっている時に、いくつ読み込むか指定します。「0」の場合はすべてのメッセージを取り出します。
タイムアウト(ミリ秒)int入力&出力 JMSQueueシステムにメッセージが溜まっていない時に、待つ時間をミリ秒で指定します。
ループを開始loopProcess- 結果をまとめて出力するか、読込み件数 での指定回数ループして出力するかを選択します。
はい [true] - ループの起点となって1メッセージずつストリームに出力します。
いいえ [false] - 読込み件数 の値に応じたメッセージをまとめてストリームに出力します。
メッセージプロパティcategory入力&出力 メッセージに付帯されたJMSプロパティ情報を取得するための設定をします。
例えば、QueuePutコンポーネントのメッセージプロパティ で指定した値を取得することなどができます。
このプロパティは自動的にストリーム変数になります。 本コンポーネントの後に連結したマッパーで、ストリーム変数として見えるようになっています。ストリーム変数については、「はじめに」-「詳細なトピック」-「フローの構成要素」-「変数」-「ストリーム変数」を参照してください。

■トランザクション処理

コミットメッセージが取得されたことが確定する
ロールバックメッセージが取得されていない状態に戻される

■エラー処理

タイプパラメーターエラー処理フロー
へのストリーム
エラー
コード
説明
メッセージが存在しない なし コンポーネントの入力ストリーム なし キューにメッセージがなかった場合
汎用 なし コンポーネントの入力ストリーム なし JNDIサーバーとの接続に失敗した場合
なし JMSプロバイダとの接続に失敗した場合
なし メッセージの読み込みに失敗した場合

■MessageType

QueuePutコンポーネントはストリーム型に応じて出力するメッセージタイプが決まっています。

QueueGetコンポーネントはメッセージタイプに応じて復元できるストリーム型が決まっています。

QueuePutQueueGet
XMLBytesMessageBytesMessage
CSVBytesMessageBytesMessage/TextMessage
FixedLengthBytesMessageBytesMessage
ParameterListBytesMessage/MapMessage
(UseMapMessage プロパティの指定に従う)
BytesMessage/MapMessage
TextTextMessageBytesMessage/TextMessage
HTMLTextMessageBytesMessage/TextMessage
JSONTextMessageBytesMessage/TextMessage
BinaryBytesMessageBytesMessage
MIMEBytesMessageBytesMessage
RecordBytesMessageBytesMessage

ParamterListストリームは、QueuePutコンポーネントではUseMapMessage プロパティがtrueの場合MapMessage、falseの場合BytesMessageとして出力します。QueueGetコンポーネントでは、BytesMessageまたはMapMessageから復元することが可能です。

QueueGetコンポーネントでBytesMessageから復元する場合、適宜決まったフォーマットになっていなければ復元はできません。例えばXMLストリームならばBytesMessageの中にXMLのバイト列が入っていなければ復元不可能です。

■IBM MQを使用する場合の設定方法

本コンポーネントからIBM MQにアクセスする場合の設定方法を以下に説明します。

インストール時の事前設定

以下の作業がインストール時に一度だけ必要になります。

  1. フローサービスのマシンにMQサーバーまたはMQクライアントをインストールする
  2. フローサービスにMQのJavaライブラリをコピーする
  3. フローサービスの実行アカウントにMQの実行権限を与える
  4. フローサービスを再起動する
  5. MQ上でJMSのJNDI初期設定を行う
  6. フローサービスでJNDIコネクションを作成する

各手順の詳細を以下に説明します。

1. フローサービスのマシンにMQサーバまたはMQクライアントをインストールする

MQのマニュアルに従ってインストールします。標準インストールではJMSサービスのインストールがOFFになっている可能性があるため、カスタムインストールでJMSサービスを有効にしてインストールします。

2.フローサービスにMQのJavaライブラリをコピーする

MQのインストールフォルダー(以降、[MQ_Install]と表記します)のjava/libフォルダーにある、以下のJavaライブラリをフローサービスのフォルダーにコピーします。コピー先のフローサービスのフォルダーは

[DATA_DIR]/system/lib/ext
となります。コピー先に同じファイルがある場合は上書きしてください。OpenJMS用のライブラリは削除しておくことを推奨します。
以下のJavaライブラリはMQ 9.4の場合の例となります。詳しくはMQのヘルプより再配置可能ライブラリをご確認ください。 補足:MQのインストールフォルダー(デフォルト)
Windows − C:\Program Files\IBM\MQ
Linux   − /opt/mqm

3.フローサービスの実行アカウントにMQの実行権限を与える

フローサービスを実行するアカウントからMQにアクセスできるよう、適宜アカウントの設定を変更します。Linuxの場合はフローサービスの実行アカウントがmqmグループに所属するようにします。Windowsでフローサービスの実行アカウントがドメインユーザーである場合は、domain mqmドメイングループに所属するようにします。詳しくはMQのマニュアルを参照してください。

4.フローサービスを再起動する

コピーされたライブラリがフローサービスで有効になります。

5.MQ上でJMSのJNDI初期設定を行う

[MQ_Install]/java/binにあるJMS30Admin.configファイルを編集し、JNDIの設定を行います。通常は「INITIAL_CONTEXT_FACTORY」と「PROVIDER_URL」の設定を行うことになります。 たとえば、ファイルシステムにJNDIのバインディング情報を置く場合には、

INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:/C:[MQ_Install]
のように設定します。

6.フローサービスでJNDIコネクションを作成する

管理コンソールにログインし、[設定]-[コネクション]-[その他]のメニューからJNDIコネクションを作成します。「Provider URL」「Initial Factory」項目にMQ上のJMS30Admin.configファイルに指定した値を設定します。

キュー作成時の事前設定

以下の作業がMQでキューを作成するたびに毎回必要になります。

  1. MQ上でキューをJMSに登録する
  2. フローサービスでQueueコネクションを作成する

各手順の詳細を以下に説明します。

1.MQ上でキューをJMSに登録する

MQ上で作成したキューマネージャ、キューをJMSに登録します。
[MQ_Install]/java/binにあるJMS30Adminツールを起動すると、以下のようにプロンプトが表示されるので、MQへの接続方法に合わせて定義を登録します。

InitCtx>
以下にフローサービスで使用するQueueコネクション名を「QCFNAME」、キュー名を「QNAME」とする場合の設定例を示します。
ローカルマシンのデフォルトのキューマネージャ、デフォルトのローカルキューにバインドモードで接続する場合:
InitCtx> define qcf(QCFNAME)
InitCtx> define q(QNAME) queue(SYSTEM.DEFAULT.LOCAL.QUEUE)
InitCtx> end
ローカルマシンのデフォルトのキューマネージャ、ローカルキューQUEUE1にバインドモードで接続する場合:
InitCtx> define qcf(QCFNAME)
InitCtx> define q(QNAME) queue(QUEUE1)
InitCtx> end
ローカルマシンのキューマネージャQM1、ローカルキューQUEUE1にバインドモードで接続する場合:
InitCtx> define qcf(QCFNAME) qmgr(QM1)
InitCtx> define q(QNAME) queue(QUEUE1) qmgr(QM1)
InitCtx> end
リモートマシンHOST1のキューマネージャQM1、ローカルキューQUEUE1にクライアントモードで接続する場合
(クライアント接続用のチャネルがCHANNEL1、ポート番号が1414、文字コードセットIDが932の場合):
InitCtx> define qcf(QCFNAME) qmgr(QM1) tran(CLIENT) host(HOST1) chan(CHANNEL1) port(1414) ccsid(932)
InitCtx> define q(QNAME) queue(QUEUE1) qmgr(QM1)
InitCtx> end
MQにおけるキューマネージャ、キューの作成方法、クライアント接続のための設定方法、JMS30Adminの使い方などの詳細はMQのマニュアルを参照してください。

2.フローサービスでQueueコネクションを作成する

管理コンソールにログインし、[設定]-[コネクション]-[その他]のメニューからQueueコネクションを作成します。「JNDI接続名」項目にあらかじめ指定しておいたJNDIコネクションの値設定します。「Queue Connection Factory」項目にJMS30Adminで定義した値を設定します。

以上で本コンポーネントからJMS30Adminで定義したキューにアクセスできるようになります。