gpt4 book ai didi

java - 收到的 JMS 消息被截断

转载 作者:行者123 更新时间:2023-12-01 15:16:15 26 4
gpt4 key购买 nike

我已将收到的消息长度指定为 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");
}
}
}

如果消息的长度超过某个限制,我不知道多少,但它会被截断,任何增加或解决方法来显示完整的消息。

最佳答案

正如 Germann 指出的,传递给接收方法的参数不是消息大小,它实际上是等待时间(以毫秒为单位)。意味着调用必须等待消息到达的时间。例如,如果您将等待时间设置为 1000,则接收调用将等待 1 秒消息到达。如果消息在 1 秒之前到达,调用将立即返回并将消息提供给应用程序。如果一秒钟后消息仍未到达,则调用将返回并超时,并且不会向应用程序发送任何消息。在 MQ 术语中,您将看到 2033 原因代码。

您如何确定消息已被截断?您是否收到 MQRC_TRUNCATED_MESSAGE_FAILED 异常?如果应用程序提供的缓冲区不足以填充传入消息,则会抛出此异常。 MQ JMS 预计不会抛出 MQRC_TRUNCATED_MESSAGE_FAILED 异常,因为它在内部处理所需的缓冲区大小并向应用程序返回消息。

我猜测问题可能是因为您正在打印 JMSMessage,而发送的消息是 JMSTextMessage。 JMSMessage.ToString 可能不会打印整个消息。

关于java - 收到的 JMS 消息被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com