使用Solace .NET发布者将大文本发布到队列

时间:2015-10-15 10:05:02

标签: solace solace-mq

我正在尝试使用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)?

感谢。

2 个答案:

答案 0 :(得分:1)

Solace设备/虚拟消息路由器(VMR)可能已放弃该消息。

在Appliance / VMR上,您可以查看队列统计信息以确定消息发生了什么。在SolAdmin中双击队列名称以显示以下窗口。

SolAdmin - Ingress Spool Discard Statistics

在此屏幕截图中,我的邮件被丢弃,因为超出了假脱机配额。 (请注意,我已为快速复制配置了极小的配额。)

请注意您已选择使用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应用程序将显示长字符串。