MQ的消息的最大长怎么设置?
xms client for c/c++中无法发送超过4M的数据,已经把把相关通道、队列和队列管理器的最大消息长度都修改到100M了,
可是在JAVA程序中却可以发送,不知道是什么原因?
[解决办法]
这是.net对文件传输的限制,你可以将.net文件限制增大,mq本身限制修改后直接传输不会有问题。
[解决办法]
在定义mq传输对列的时候,通过maxmsgl参数定义消息最大长度,一般不建议定义很长的消息,如果要发送很长的消息可以采用分段的方式发送.
[解决办法]
我也不知道。
下面仅供参考。
如果你的数据确实很大,比如商业文档,几十 M 可以考虑 MQ File Transfer 来传递,不过这个我没用过。
MQ 支持消息分组按有序发送,并在最后一个段中设置一个标记说明这个段是分组中的最后一个段来提示接收端应用程序整个组已收到。
接收消息时如果得到一个消息的 groupId 不为空,那下一次我们就设置使用 match group id 选项来先取完这个组才尝试取其它消息。
下面这个是 Java 代码片断:
if (isGroupEnabled()) {
msg.messageFlags = MQC.MQMF_MSG_IN_GROUP;
if (isLastMessageInGroup()) {
msg.messageFlags |= MQC.MQMF_LAST_MSG_IN_GROUP;
}
if (isOrderEnabled()) {
putOptions.options |= MQC.MQPMO_LOGICAL_ORDER;
}
msg.messageSequenceNumber = getSequenceInGroup();
String groupId = getGroupId();
if (groupId == null || groupId.trim().length() == 0) {
groupId = UUIDGenerator.getInstance().generateTimeBasedUUID()
.toString();
}
msg.groupId = groupId.getBytes();
}
this.queue.put(msg, putOptions);
// receive:如果得到一个消息的 groupId 不为空,那下一次我们就设置使用 match group id 选项来先取完这个组才尝试取其它消息。
String groupId = getGroupId();
if (groupId != null && groupId.trim().length() > 0) {
msg.groupId = groupId.getBytes();
}
if (isGroupEnabled()) {
// NOT AVAILABLE UNTIL ALL MESSAGES IN SAME GROUP
// ARRIVED.
getOptions.options |= MQC.MQGMO_ALL_MSGS_AVAILABLE;
getOptions.matchOptions |= MQC.MQMO_MATCH_GROUP_ID;
}
if (isOrderEnabled()) {
getOptions.options |= MQC.MQGMO_LOGICAL_ORDER;
}
this.queue.get(msg, getOptions);