Cosminexus V9 BPM/ESB基盤 サービスプラットフォーム 解説
Message Queue受付を利用することで,JMSプロバイダのメッセージキュー(IBM WebSphere MQ)からMQリソースアダプタを介してビジネスプロセスを呼び出すことができます。
Message Queue受付を使用したサービス部品呼び出しの流れを次の図に示します
図2-82 Message Queue受付を使用したJMSプロバイダ(メッセージキュー)からのサービス部品の呼び出し
Message Queue受付は,MQリソースアダプタを経由して要求電文を受け付けます。サービス部品の実行要求を受け付けたMessage Queue受付は,ビジネスプロセスを呼び出し,サービスアダプタを介して各種サービス部品を実行します。
要求電文の受け取りは,MDB(Message-Driven Bean)を使用します。
Message Queue受付からは,応答電文を返しません。
Message Queue受付では,JMSプロバイダとしてWebSphere MQ(IBM社製)を利用します。WebSphere MQは,異機種システムのプログラム間でデータ通信をするためのメッセージキューイング型の非同期通信基盤です。
Message Queue受付は,WebSphere MQのバージョン7.5に対応しています。
WebSphere MQの構成を次に示します。
図2-83 WebSphere MQの構成
メッセージを送信する場合,送信オプション(JMSヘッダおよびプロパティ)を指定できます。Message Queue受付の送信オプションの詳細を次に示します。
送信オプション(JMSヘッダ)の設定値は,すべてString型に変換され,ヘッダ電文の中に設定されます。このとき,値がnull,または空の場合は,空タグになります。
JMSヘッダの詳細を次に示します。
表2-20 JMSヘッダの詳細
ヘッダ名 | 設定内容 | 設定タイミング | クライアントでの設定可否 |
---|---|---|---|
JMSDestination | メッセージが登録されるキュー名 | QueueSession.createSender(Queue queue)メソッド発行時に設定されます。 | × |
JMSDeliveryMode | メッセージの永続性を示す値 | メッセージ送信時に設定されます。 | × |
JMSMessageID | プロバイダによって送信される各メッセージを一意に識別するメッセージ識別子 | メッセージ送信時に設定されます。 | × |
JMSTimestamp | メッセージの送信時刻を表す値(単位:ミリ秒) | メッセージ送信時に設定されます。 | × |
JMSExpiration | メッセージの有効期間となる時刻を表す値(単位:ミリ秒) | メッセージ送信時に設定されます。 | × |
JMSRedelivered | メッセージが再配送中であるかどうかを示す値 | アプリケーションに配送済みのメッセージがリカバリされたなどで再度配送する必要があるときに設定されます。 | × |
JMSPriority | メッセージのプライオリティ | QueueSender.setPriority()メソッド,またはQueueSender.send()メソッドで指定できます。 | ○ |
JMSReplyTo | 応答先のあて先 | Message.setJMSReplyTo()メソッド発行時に設定されます。 | ○ |
JMSCorrelationID | あるメッセージをほかのメッセージと関連づけるための相関識別子 | Message.setJMSCorrelationID()メソッド発行時に設定されます。 | ○ |
JMSType | メッセージが送信されるときに,アプリケーションによって提供されるメッセージタイプ | Message.setJMSType()メソッド発行時に設定されます。 | ○ |
メッセージのプロパティは,JMSプロバイダによって設定されるプロパティと,クライアントでユーザが設定できるプロパティで構成されます。
表2-21 JMS標準プロパティの一覧
項目名 | 説明 |
---|---|
JMSXUserID | メッセージの送信者のユーザID |
JMSXAppID | メッセージの送信アプリケーションのID |
JMSXDeliveryCount | メッセージの再受信回数 |
JMSXGroupID | メッセージが属するグループのID |
JMSXGroupSeq | グループ内でのメッセージ順序番号 |
JMSXProducerTXID | トランザクション識別子 |
JMSXConsumerTXID | トランザクション識別子 |
JMSXRcvTimestamp | メッセージ受信時間 |
JMSXState | プロバイダ内部で使用する項目 |
表2-22 プロパティに設定できるデータ型の一覧
データ型 | 設定するメソッド |
---|---|
Boolean | setBooleanProperty(String name, boolean value) |
Byte※1 | setByteProperty(String name, byte value) |
Short | setShortProperty(String name, short value) |
Integer | setIntProperty(String name, int value) |
Long | setLongProperty(String name, long value) |
Float | setFloatProperty(String name, float value) |
Double | setDoubleProperty(String name, double value) |
String | setStringProperty(String name, String value) |
Object※2 | setObjectProperty(String name, Object value) |
MQリソースアダプタは,JMSプロバイダ(IBM WebSphere MQシステム)からのメッセージをMessage Queue受付に渡すためのリソースアダプタです。
MQリソースアダプタとMessage Queue受付の接続関係は,1つのリソースアダプタに対して複数の受付を関連づけることができますが,1つの受付に対して複数のリソースアダプタを関連づけることができません。
MQリソースアダプタとMessage Queue受付の関連づけは,Message Queue受付定義ファイルで指定します。指定した内容は,Message Queue受付を起動したときに有効になります。このとき,Message Queue受付と関連づけをするMQリソースアダプタを事前に起動しておく必要があります。関連づけをするMQリソースアダプタが起動されていないと,Message Queue受付は起動できないため,Message Queue受付定義ファイルの設定内容も有効になりません。
Message Queue受付とMQリソースアダプタの接続関係を次に示します。
構築できる接続関係は次のどちらかです。
例を次に示します。
(例1)リソースアダプタと受付が1:1の接続関係の場合
(例2)リソースアダプタと受付が1:nの接続関係の場合
1つの受付に対して複数のリソースアダプタを指定できないため,リソースアダプタと受付の接続関係がn:1の構成は構築できません。
例を次に示します。
(例)
キューは,JMSオブジェクトをまとめるキューオブジェクトで,キューマネージャによって管理されます。
キューとMessage Queue受付の接続関係は,1つのキューに対して複数の受付を関連づけることができますが,1つの受付に対して複数のキューを関連づけることができません。
Message Queue受付とキューの接続関係を次に示します。
構築できる接続関係は次のどちらかです。
例を次に示します。
(例1)キューと受付の接続関係が1:1の場合
(例2)キューと受付の接続関係が1:nの場合
1つの受付に対して複数のキューを指定できないため,キューと受付の接続関係がn:1の構成は構築できません。
(例1)キューマネージャが1つの場合
(例2)キューマネージャが複数の場合
ビジネスプロセスを作成するときは,受付アクティビティの通信モデルをMessage Queue受付の通信モデルと同一にする必要があります。
ビジネスプロセスの永続化については,永続化でも非永続化でも設定できます。
ただし,非永続化を設定すると,障害発生時にメッセージの二重配信が発生するおそれがあるので注意が必要です。
ビジネスプロセスとMessage Queue受付の接続関係は,1つのビジネスプロセスに対して複数の受付を関連づけることができますが,1つの受付に対して複数のビジネスプロセスを関連づけることができません。
Message Queue受付とビジネスプロセスの接続関係を次に示します。
構築できる接続関係は次のどちらかです。
例を次に示します。
(例1)ビジネスプロセスと受付の接続関係が1:1の場合
(例2)ビジネスプロセスと受付の接続関係が1:nの場合
1つの受付に対して複数のビジネスプロセスを定義できないため,ビジネスプロセスと受付の接続関係がn:1の構成は構築できません。
例を次に示します。
(例)
Message Queue受付では,使用する通信モデルに応じてさまざまなシステム構成を実現できます。
ここでは,次の場合の構成例を次に示します。
Message Queue受付では,例外発生時はキューをロールバックするため,WebSphere MQのキューマネージャと同一のトランザクションを使用する必要があります。そのため,Message Queue受付のトランザクションはコンテナ管理のトランザクションを使用します。それによって,トランザクションのコミットはWebSphere MQのキューがコミットされるタイミングと同時となります。
Message Queue受付を使用した場合のトランザクションの範囲を次の図に示します。
図2-84 Message Queue受付を使用した場合のトランザクションの範囲
Message Queue受付は,WebSphere MQのキューマネージャと同一のトランザクションを使用して処理しますが,ビジネスプロセスは,WebSphere MQのキューマネージャとは異なるトランザクションで処理します。そのため,Message Queue受付で処理が異常終了し,ロールバックを実行するためにメッセージがキューの先頭に戻った場合でも,ビジネスプロセスのトランザクションが正常終了していることがあります。このような状態のときにロールバックによって再びメッセージが送信されると,一度処理を実行したビジネスプロセスで再び同じ処理が実行されてしまうことになります。このような処理を防ぐには,メッセージの二重配信防止の処理をしてください。メッセージの二重配信防止については,「(8) Message Queue受付使用時のメッセージの二重配信防止」を参照してください。
リクエスト処理が異常終了した場合,ロールバックを実行するためにメッセージはキューの先頭に戻り,再びメッセージが送信されることで,一度処理を実行したビジネスプロセスが再び処理されてしまうことがあります。
Message Queue受付では,メッセージの二重配信防止の設定をすることで,リクエスト処理が異常終了した場合に,メッセージの再送信による実行済みビジネスプロセスの再実行を防止します。
次に示す条件をすべて満たす場合に,二重配信防止のチェックをします。
二重配信防止を設定している場合の注意点を次に示します。
ビジネスプロセスで発生する主な障害の例を挙げ,二重配信防止を設定している場合の動作および対処方法を説明します。
Message Queue受付では,リクエスト処理時に障害が発生した場合,必ずロールバックします。これは,キューマネージャのデッドレターキューまたはキューのバックアウトリキューに指定されたキューへメッセージを移動させることで,無限ループを防ぐためです。
ロールバック回数は,WebSphere MQのキューマネージャおよびキューで設定します。
なお,設定方法については,WebSphere MQのマニュアルを参照してください。
表2-23 キューマネージャで設定するロールバック関連の設定項目
設定項目 | 設定内容 | 設定可能な値 | デフォルト値 |
---|---|---|---|
DEADQ | デッドレターキュー名 | キュー名 | SYSTEM.DEAD.LETTER.QUEUE |
表2-24 キューで設定するロールバック関連の設定項目
設定項目 | 設定内容 | 設定可能な値 | デフォルト値 |
---|---|---|---|
BOTHRESH | バックアウトの閾値 | 0〜999999999 | 0 |
BOQNAME | バックアウトリキュー名 | キュー名 | なし |
Message Queue受付では,同時実行数を設定することで,同時に複数のリクエストを処理できます。
同時実行数は,Message Queue受付およびMQリソースアダプタで設定します。
次に示すMessage Queue受付定義ファイルのプロパティに設定します。
次に示すMQリソースアダプタのアプリケーション統合属性ファイルの要素に値を設定します。
All Rights Reserved. Copyright (C) 2012, 2019, Hitachi, Ltd.