3

クラスター内の別のキュー マネージャーで Websphere MQ キューを定義している場合、Perl インターフェースを使用して書き込み用に開く方法はありますか? 以下のコードは、mqrc 2085 に戻ります。

$messageQ = MQSeries::Queue->new
        (
         QueueManager         => $qMgr,
         Queue                => $queue,
         Options              => $openOpt
         ) or die ">>>ERROR2: Unable to open the queue: $queue\n";
}
4

1 に答える 1

4

はい!PerlモジュールはWMQAPIの薄いベニヤであり、すべての基本的なオプションと、本当に難解なもののほとんども公開しています。

キューを開くと、WebSphere MQは、キュー名とQMgr名に指定した値に対して名前解決を実行します。キューとQMgrの両方の名前を指定すると、オブジェクト参照は完全に修飾され、WMQは名前付きでそれを開こうとします。したがって、指定した名前がローカルQMgrであり、クラスター化されたキューにローカルで定義されたインスタンスがない場合、オープンは2085の不明なオブジェクト名で失敗します。

クラスタ化されたキューを開く秘訣は、QMgr名にnull値を指定することです。これにより、名前解決はローカルQMgrで同じ名前のキューをチェックし、何も見つからない場合はクラスターリポジトリをチェックして、クラスター化されたキューへのオープンを解決します。これが機能するには、キューをクラスターにアドバタイズする必要があることに注意してください。具体的には、ターゲットキューのCLUSTERまたはCLUSNL属性は空白ではなく、ソースQMgrが参加するクラスターを参照する必要があります。同様に、宛先QMgrもソースQMgrと同じクラスターに参加する必要があります。

ローカルQMgrではないオープンでQMgr名を指定した場合、WMQはQMgr名のみを解決しようとすることにも注意してください。そのQMgrへのルートを解決できる場合は、そこにメッセージを送信します。これは、クラスター内で、完全修飾名を知っている限り、任意のQMgrの任意のキューにメッセージを送信できることを意味します。

最後に、クラスター化されたキューに対してローカルエイリアスを定義できます。たとえば、QMGRAとDEF QA(TARGET.QUEUE)TARGQ(TARGET.QUEUE)を使用していて、同じクラスター内のQMGRBとQMGRCでDEF QL(TARGET.QUEUE)CLUSTER(MYCLUS)を使用している場合、QMGRを開くことができます。 = QMGRA QUEUE = TARGET.QUEUEでも、期待どおりに機能します。エイリアスはクラスターにアドバタイズされませんが、ターゲットキューはアドバタイズされることに注意してください。このアプローチの唯一の問題は、クラスタークエリに時間がかかりすぎると、API呼び出しが最初に開かれたときに失敗する可能性があることです。本番環境でこれを行うときは、実際のアプリケーションがキューを開く前に、常に事前にエイリアスでamqsputを使用して、QMgrがリポジトリにクエリを実行するようにします。なぜあなたはこれをしますか?セキュリティが懸念される場合は、上記のように、すべてのアプリをクラスターXMitQに直接承認することはおそらく望ましくありません。SYSTEM.ADMIN.COMMAND.QUEUEを含む、クラスター内の任意のQMgr上の任意のキュー。エイリアスは、認証をハングさせ、ユーザーをクラスター内の特定の宛先に制限する場所を提供します。

簡単に言うと、Open呼び出しでnullのQMgr名を指定するか、クラスター化されたキューにローカルエイリアスを設定してください。これのセキュリティ面の詳細については、http://t-rob.net/linksのWMQセキュリティプレゼンテーションを参照してください

于 2010-05-28T01:51:04.700 に答える