2

私はibmmqに非常に慣れていないので、mbに関連するドキュメントや本が非常に少ないことがわかりました。見つけたのは、2004年に書かれた「WebSphereMQ Using Java」だけです。しかし、現実の世界は大きく変わりました。これに従って、redhatlinux64ビットにmqserver7.5を正常にインストールして検証しまし

また、キューマネージャーmyqm1、キューLQ.TEST、チャネルJAVA.CHANNELを作成し、サーバーのコマンドラインでテストを行って、それらが正常に機能することを確認しました。ただし、Windows XPにmqクライアントをインストールし、以下のJavaコードを記述した場合、常にexception:com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2035'

私のコード:

インポートcom.ibm.mq。*; インポートcom.ibm.mq.constants.MQConstants;

/***簡単なサンプルプログラム*/public class MQSample {

// code identifier
static final String sccsid = "@(#) MQMBID sn=p000-L120604 su=_H-IvIK4nEeGko6IWl3MDhA pn=MQJavaSamples/wmqjava/MQSample.java";

// define the name of the QueueManager
private static final String qManager = "myqm1";
// and define the name of the Queue
private static final String qName = "LQ.TEST";

/**
 * Main entry point
 *
 * @param args - command line arguments (ignored)
 */
public static void main(String args[]) {
    try {
        MQEnvironment.hostname = "58.2.221.196"; 
        MQEnvironment.channel = "JAVA.CHANNEL"; 
        MQEnvironment.port = 1414;
        MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
        MQEnvironment.userID = "mqm"; 
        MQEnvironment.password = "mqm";
        MQEnvironment.CCSID = 1208;

        // Create a connection to the QueueManager
        System.out.println("Connecting to queue manager: " + qManager);
        MQQueueManager qMgr = new MQQueueManager(qManager);

        // Set up the options on the queue we wish to open
        int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT;

        // Now specify the queue that we wish to open and the open options
        System.out.println("Accessing queue: " + qName);
        MQQueue queue = qMgr.accessQueue(qName, openOptions);

        // Define a simple WebSphere MQ Message ...
        MQMessage msg = new MQMessage();
        // ... and write some text in UTF8 format
        msg.writeUTF("Hello, World!");

        // Specify the default put message options
        MQPutMessageOptions pmo = new MQPutMessageOptions();

        // Put the message to the queue
        System.out.println("Sending a message...");
        queue.put(msg, pmo);

        // Now get the message back again. First define a WebSphere MQ
        // message
        // to receive the data
        MQMessage rcvMessage = new MQMessage();

        // Specify default get message options
        MQGetMessageOptions gmo = new MQGetMessageOptions();

        // Get the message off the queue.
        System.out.println("...and getting the message back again");
        queue.get(rcvMessage, gmo);

        // And display the message text...
        String msgText = rcvMessage.readUTF();
        System.out.println("The message is: " + msgText);

        // Close the queue
        System.out.println("Closing the queue");
        queue.close();

        // Disconnect from the QueueManager
        System.out.println("Disconnecting from the Queue Manager");
        qMgr.disconnect();
        System.out.println("Done!");
    } catch (MQException ex) {
        ex.printStackTrace();
        System.out.println("A WebSphere MQ Error occured : Completion Code " + ex.completionCode
                + " Reason Code " + ex.reasonCode);


    } catch (java.io.IOException ex) {
        System.out.println("An IOException occured whilst writing to the message buffer: " + ex);
    }
    return;
} }

誰かが私に光を当てることができますか?私は完全にダウンしています。

4

2 に答える 2

5

Shashi の回答を拡張するには、WMQ V7.1 以降、デフォルトの CHLAUTH ルールがすべての SVRCONN チャネルでのすべてのアクセスをブロックし、すべての SVRCONN チャネルの管理アクセスをブロックします。JAVA.CHANNEL本当にasに接続したい場合は、これらの動作の両方mqmをオーバーライドする必要があります。

管理ユーザー ID を使用して QMgr への認証されていないリモート接続を実際に許可する場合は、CHLAUTH ルールを完全に無効にするオプションがあります。ALTER QMGR CHLAUTH(DISABLED)コマンドを発行することでこれを行うことができますがrunmqsc、WMQ 管理ユーザー ID を使用した匿名のリモート コード実行に対して QMgr が開かれたままになるため、これはお勧めできません。ただし、これはあなたがやろうとしているように見えることです。

推奨されるアプローチは、管理用ではないID を使用することです 。たとえばmquser、プライベート グループも呼び出された ID を作成した場合mquser、QMgr に接続して照会し、指定されたキューを開いて put、get、browse、inquire する権利を付与できます。ID は管理用ではないため、認証されていないチャネルで使用しても比較的安全です。mquserの代わりにID を指定するようにコードを変更しmqm、CHLAUTH ルールを使用して接続を許可することができます。例えば:

SET CHLAUTH('JAVA.CHANNEL') TYPE(USERMAP) +
    CLNTUSER('mquser') USERSRC(MAP) +
    MCAUSER('mquser') ACTION(ADD) 

上記のルールは、QMgr に「 のmquserIDからの接続が表示されたらJAVA.CHANNEL、MCAUSER を に設定しmquserて接続を許可する」ことを伝えます。

アクセス許可を付与するときは、ユーザーではなくグループに対して付与することを忘れないでください。たとえば、使用する場合は、オプションではなくオプションをsetmqaut使用します。認証エラーに問題がある場合は、イベント メッセージを使用して簡単に解決できます。まず、 を使用してイベントを有効にします。これにより、QMgr はイベント メッセージをキューに送信します。SupportPac MH05またはSupportPac MS0Pを使用して、イベント メッセージを解析できます。特定の承認イベントについて、メッセージは、アクセスを要求した ID、API 呼び出し (接続、開く、閉じるなど)、呼び出しが行われたオブジェクト、および使用された正確なオプションを通知します。-g-pALTER QMGR AUTHOREV(ENABLED)SYSTEM.ADMIN.QMGR.EVENT

WMQ V7.1 より前は、WebSphere MQ はすべてのリモート接続を許可しており、匿名の管理用の接続も含めていました。これにより簡単に接続できましたが、今日のより敵対的なネットワーク環境では、QMgr のホスト サーバー上でコードをリモートで匿名で実行する機能は、容認できないセキュリティ リスクと見なされています。そのため、新しい QMgr はデフォルトでリモート管理アクセスを許可しないように設定されています。管理者は、セキュリティを明示的に無効にして古い動作を取得するか、安全なアクセスを明示的にプロビジョニングする必要があります。

于 2012-08-24T16:48:20.897 に答える
3

MQ v7.5 では、デフォルトでキュー マネージャーへのアクセスがブロックされます。JAVA.CHANNELユーザーがキュー・マネージャーにアクセスできるようにするには、作成したチャネルのチャネル認証レコードを作成する必要があります。チャネル認証レコードの詳細については、このリンクをたどってください

于 2012-08-24T16:22:15.170 に答える