Message Routing サンプルの ESQL に変更を加えることにより、他のメッセージ・フローでも使用できるようになります。
ESQL ファイル Routing_using_database_and_memory_cache には、キャッシュを使用するバージョンのサンプルで使用されるすべての ESQL が含まれています。このファイルを開き、以下のセクション (ESQL で Section 1 というマークが付けられている) を探してください。
ESQL によって経路指定される予定のメッセージに応じて、強調表示されている 3 つの部分 (Section 1、2、および 3) を変更する必要があります。
別のメッセージ・フローで経路指定機能を提供するためにこの ESQL を再利用する場合に、残りの ESQL をそのままにしておくことができます。データベース表は、新しいフローに必要な新規エントリーを追加して、更新する必要があります。メッセージ・ブローカー・プロジェクトのサンプルと共に提供されている setupRoutingDatabase データベース・スクリプトを参照してください。
ESQL を使用する際には、Compute ノード・プロパティーの「計算モード」が以下のいずれかの値に設定されていることを確認する必要があります。設定されていない場合、ルーティング情報は失われます。
また、データベース ODBC ソース名「データ・ソース」を Compute ノード・プロパティーに追加する必要もあります。
BEGIN ATOMIC ... END; ステートメントは、一度に 1 つのスレッドのみがメモリー・キャッシュを使用するようにするため、Routing_using_memory_cache メッセージ・フローで使用されます。ESQL のこの部分の単一スレッドの制限が重要なのは、キャッシュを動的にリフレッシュする場合だけです。 メッセージ・フローの存続期間中にキャッシュのリフレッシュの必要がないと判断するのであれば、キャッシュの初期化だけをカバーするよう、atomic ブロックの有効範囲を小さくできます。次の図は、現在の ESQL (ESQL で「Section 4」というマークが付けられている) を示しています。
この変更を加えた後、キャッシュ内のキュー名の検索は単一スレッドではなくなります。 複数の異なるメッセージが同時にキャッシュから読み取りを行えるようになります。
外部変数を使うと、メッセージ・フロー内のハードコーディングされた値がメッセージ・フロー・レベルにプロモートされ、デプロイ時にそれらを変更できるようになります。デプロイ時に、デプロイ先の環境に合わせてメッセージ・フローをカスタマイズできます。これは、メッセージ・フローの ESQL に変更を加えることなく、行えます。
Routing_using_database_and_memory_cache メッセージ・フローには、Variable1 という変数があります。この変数はデータベース検索を行うために使用されます。この変数は値 SAMPLE_QUEUES にハードコーディングされます。デプロイ時には、デプロイ先のシステムに応じて値を変更できるように、この変数を外部化する必要があります。 この外部化により、システムごとに異なるキューとキュー・マネージャーのセットを使用しながら、それでもなお同一のデータベース表を使用できます。
Variable1 を外部変数にするには次のようにします。
DECLARE Variable1 CHAR 'SAMPLE_QUEUES'このように変更します。
DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES'ESQL はたとえば次のようになります。
-- Section 1
DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
DECLARE Variable2 CHAR;
DECLARE Variable3 CHAR;
この外部変数を使用するには、Variable1 のさまざまなパラメーターが含まれている、ROUTING データベースの ROUTING_TABLE 表に新規エントリーを作成する必要があります。 Variable1 の値を変更せずにこのフローをデプロイすると、フローの機能は今までと同じです。 (Variable1 はデフォルトで SAMPLE_QUEUES になります)
データベース表の Message Routing サンプル・キャッシュについての現行リフレッシュ基準は次のとおりです。
キャッシュのリフレッシュのタイミングを決定する際、他の基準も使用できると便利です。 以下の基準を使用できます。
このいずれかの基準を使用するように、サンプルを変更できます。 キャッシュのリフレッシュに関する ESQL の重要箇所は次のとおりです。
60 秒の期間を使用するようにリフレッシュ基準を変更するには、以下を行います。
IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP - CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN
SET CacheQueueTable.valid = true;このように変更します。
SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;
メッセージの数が 100 に達するとリフレッシュ基準が true になるように変更するには、次のようにします。
IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN
SET CacheQueueTable.valid = true;このように変更します。
SET CacheQueueTable.MessageCount = 0;
SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;