0

受信したメッセージの長さを 1000000 に指定しましたが、それでもメッセージが切り捨てられます 完成したコードは以下のとおりです

import java.io.FileInputStream;

import javax.jms.JMSException;
import javax.jms.Session;


import com.ibm.jms.JMSMessage;
import com.ibm.jms.JMSTextMessage;
import com.ibm.mq.jms.JMSC;
import com.ibm.mq.jms.MQQueue;
import com.ibm.mq.jms.MQQueueConnection;
import com.ibm.mq.jms.MQQueueConnectionFactory;
import com.ibm.mq.jms.MQQueueReceiver;
import com.ibm.mq.jms.MQQueueSender;
import com.ibm.mq.jms.MQQueueSession;


public class SimplePTP {

  public static void main(String[] args) {
    try {
      MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
String request= null;
      // Config
      cf.setHostName("CTMQ9000");
      cf.setPort(1414);
      cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
      cf.setQueueManager("CTMQTST01");
      cf.setChannel("SYSTEM.ADMIN.SVRCONN");

      MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
      MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      MQQueue queue = (MQQueue) session.createQueue("CONTPLAT.CPS.DELIVERYPREP.REQUEST.TEST");
      MQQueueSender sender =  (MQQueueSender) session.createSender(queue);
      MQQueue queue1 = (MQQueue) session.createQueue("CONTPLAT.CPS.DELIVERYPREP.RESPONSE.TEST");
      MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue1);      

      String request ="sdfHelp Me Name name for Photo Studio!I'm opening a portrait studio in a my town and am stuck on what to name it. I will be photographing (Portrait, wedding Photography)) children and families both at the studio and on location.sdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffsdf"
      long uniqueNumber = System.currentTimeMillis() % 1000;
      JMSTextMessage message = (JMSTextMessage) session.createTextMessage(request);     

      // Start the connection
      connection.start();

      sender.send(message);
      System.out.println("Sent message:\\n" + message +"lol");
Thread.sleep(2000);
      JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000000);
      System.out.println("\\nReceived message:\\n" + receivedMessage);

      sender.close();
      receiver.close();
      session.close();
      connection.close();

      System.out.println("\\nSUCCESS\\n");
    }
    catch (JMSException jmsex) {
      System.out.println(jmsex);
      System.out.println("\\nFAILURE\\n");
    }
    catch (Exception ex) {
      System.out.println(ex);
      System.out.println("\\nFAILURE\\n");
    }
  }
}

メッセージの長さが制限を超えた場合、どのくらいかはわかりませんが、切り捨てられているため、メッセージ全体を表示するための方法または回避策があります。

4

2 に答える 2

1

Germann が receive メソッドに渡すパラメーターはメッセージ サイズではないことを指摘しているように、実際にはミリ秒単位の待機時間です。メッセージが到着するまで通話が待機する必要がある時間を意味します。たとえば、待機時間を 1000 に設定した場合、受信呼び出しはメッセージが到着するまで 1 秒間待機します。メッセージが 1 秒前に到着すると、呼び出しはすぐに返され、メッセージがアプリケーションに渡されます。1 秒経ってもメッセージが届かない場合、呼び出しはタイムアウトで返され、アプリケーションにはメッセージが渡されません。MQ 用語では、2033 理由コードが表示されます。

メッセージが切り捨てられていることをどのように判断していますか? MQRC_TRUNCATED_MESSAGE_FAILED 例外が発生していますか? この例外は、アプリケーションが提供するバッファが受信メッセージを埋めるのに十分でない場合にスローされます。MQ JMS は、必要なバッファー サイズを内部で処理し、アプリケーションにメッセージを返すため、MQRC_TRUNCATED_MESSAGE_FAILED 例外をスローすることは想定されていません。

送信されたメッセージが JMSTextMessage であるのに、JMSMessage を出力しているため、問題が発生する可能性があると推測しています。JMSMessage.ToString がメッセージ全体を出力していない可能性があります。

于 2012-07-20T05:53:27.433 に答える
0

どこで長さを1000000に設定しますか?MQドキュメントを読むと、receiver.receive(10000000);が見つかります。メッセージサイズは設定しません。

于 2012-07-19T11:20:35.190 に答える