2012-07-19 2 views
0

내가 1000000로 수신 된 메시지 길이를 부여했지만 메시지의 길이는 몇 가지 한계를 초과하면 내가 얼마나 모르는 Recived JMS 메시지는

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"); 
    } 
    } 
} 

아래 여전히 메시지가 잘립니다 완료됩니다 코드가 잘립니다 그러나 잘려나 가면서, 메시지를 표시하기 위해 어떤 방법 으로든 늘리거나 해결할 수 있습니다.

답변

1

메서드를 수신하기 위해 전달하는 매개 변수가 메시지 크기가 아니라고 지적 했으므로 실제로는 밀리 초 단위의 대기 시간입니다. 메시지가 도착할 때까지 통화가 대기해야하는 기간을 의미합니다. 예를 들어 대기 시간을 1000으로 설정 한 경우 수신 호출은 메시지가 도착할 때까지 1 초 동안 대기합니다. 메시지가 1 초 전에 도착하면 통화가 즉시 반환되고 응용 프로그램에 메시지가 전달됩니다. 메시지가 1 초 후에 도착하지 않으면 시간 초과와 함께 호출이 반환되고 응용 프로그램에 메시지가 제공되지 않습니다. MQ 용어로 2033 년 이유 코드가 표시됩니다.

메시지가 잘린 것을 어떻게 결정합니까? MQRC_TRUNCATED_MESSAGE_FAILED 예외가 발생 했습니까? 이 예외는, 어플리케이션이 제공하는 버퍼가 수신 메세지를 묻는 것으로 충분하지 않은 경우에 Throw됩니다. MQ JMS는 내부적으로 필요한 버퍼 크기를 처리하고 메시지를 응용 프로그램에 리턴하므로 MQRC_TRUNCATED_MESSAGE_FAILED 예외를 발생시킬 것으로 예상되지 않습니다.

보내진 메시지가 JMSTextMessage 인 반면 JMSMessage를 인쇄하고 있기 때문에 문제가 있다고 생각합니다. JMSMessage.ToString은 전체 메시지를 인쇄하지 않을 수 있습니다.

+0

나는 너희 둘 모두에 동의한다. 내 보낸 메시지를 소비하는 다른 응용 프로그램이 있고 해당 응답이 내 수신자 큐에 넣습니다.받은 메시지와 인쇄 된 메시지가 완전한 메시지가 아닙니다. 그래서 그 메시지가 잘린 것입니다. 전체 메시지를 인쇄 할 수있는 방법이 있습니까? ? –

+0

나는 다른 쪽에서 당신이 기대하는 메시지를 분명히 보내고 있는지 확인하고 싶다. 그리고 로컬 컴퓨터에서 ActiveMq (또는 다른 것)를 설정하여 코드를 테스트하고 응용 프로그램이 로컬 대기열을 가리킬 수도 있습니다. 그런 다음 내용 일치를 확인할 수 있습니다. – DaveRlz

+0

해결책을 얻었습니다 System.out.println ("\\ n받은 메시지 : \\ n"+ receivedMessage.getText()); 방금 .getText()라는 메시지를 받았습니다. –

0

어디에서 길이를 1000000으로 설정합니까? MQ 문서를 읽으면 receiver.receive (10000000); 메시지 크기를 설정하지 않습니다.

+0

나는 잘 모르겠다. 왜 잘라내는지 아십니까? –

+0

잘리는 내용. 어떤예요? 메시지를 보내려고 시도하고 있습니까? JMSTextMessage를 작성하여 보내고 JMSMessage 수신을 시도했음을 유의하십시오. 행동의 약간의 차이로 인해 무엇이 왜 잘리는 지 설명 할 수 있습니다. –