1

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

谢谢。

4

2 回答 2

1

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

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

SolAdmin - 入口假脱机丢弃统计

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


请注意,您已选择使用 MessageDeliveryMode.Direct,这意味着消息将通过可靠但不保证的通道传递。如果无法传递直接消息,则没有否定确认。

如果必须保证消息,则应使用 MessageDeliveryMode.Persistent。如果无法传递消息,将触发 RejectedMessageError 会话事件以指示发生了问题。有关详细信息,您可能需要参考 Solace .NET API 中的 AdPubAck.cs 示例代码。

于 2015-10-19T08:48:01.320 回答
0

Eclipse 还可能存在打印错误。您是否能够验证 Java 应用程序是否确实收到了消息?

String myReceivedText = ((TextMessage) message).getText();
System.out.println("myReceivedText.length = " + myReceivedText.length());

如果可以接收到正确长度的消息,那么很可能是这个 Eclipse 错误: java System.out.println() 奇怪的行为长字符串

通过命令行运行 Java 应用程序将显示长字符串。

于 2015-10-19T08:52:01.127 回答