我正在尝试使用Solace .NET API将大型文本消息发布到Solace队列。我已经在不同的JAVA应用程序中订阅了该队列。当邮件大小很小时,它可以正常工作。但如果邮件很大,订阅者就无法阅读邮件。
messageToPublish = readFile();
IMessage message = ContextFactory.Instance.CreateMessage();
message.Destination = queue;
message.DeliveryMode = MessageDeliveryMode.Direct;
//message.BinaryAttachment = Encoding.ASCII.GetBytes(messageToPublish);
SDTUtils.SetText(message, messageToPublish);
session.Send(message);
有没有办法同步运行session.send(message)?
感谢。
答案 0 :(得分:1)
Solace设备/虚拟消息路由器(VMR)可能已放弃该消息。
在Appliance / VMR上,您可以查看队列统计信息以确定消息发生了什么。在SolAdmin中双击队列名称以显示以下窗口。
在此屏幕截图中,我的邮件被丢弃,因为超出了假脱机配额。 (请注意,我已为快速复制配置了极小的配额。)
请注意您已选择使用MessageDeliveryMode.Direct,这意味着邮件将通过可靠但不保证的渠道提供。 如果无法传递直接消息,则不会有任何否定确认。
如果必须保证消息,则应使用MessageDeliveryMode.Persistent。 如果无法传递消息,将触发RejectedMessageError会话事件以指示出现问题。 您可能需要参考Solace .NET API中的AdPubAck.cs示例代码以获取详细信息。
答案 1 :(得分:0)
Eclipse也存在可能的打印错误。 您是否能够验证Java应用程序是否实际收到了该消息?
String myReceivedText = ((TextMessage) message).getText();
System.out.println("myReceivedText.length = " + myReceivedText.length());
如果可以使用正确的长度接收消息,那么很可能是这个Eclipse错误: java System.out.println() strange behavior long string
通过命令行运行Java应用程序将显示长字符串。