Публикация большого текста с использованием Solace .NET издатель в очередь

Я пытаюсь опубликовать большое текстовое сообщение в очереди Solace с помощью Solace .NET API. И я подписался на эту очередь в другом приложении 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(сообщение) синхронно?

Благодарю.

2 ответа

Возможно, что Solace Appliance/Virtual Message Router(VMR) отклонил сообщение.

В Appliance/VMR вы можете посмотреть статистику очереди, чтобы определить, что произошло с сообщением. Дважды щелкните имя очереди в SolAdmin, чтобы открыть следующее окно.

SolAdmin - Ingress Spool Статистика сброса

На этом снимке экрана мое сообщение было отклонено из-за превышения квоты буфера. (Обратите внимание, что я настроил очень маленькую квоту для быстрого воспроизведения.)


Обратите внимание, что вы решили использовать MessageDeliveryMode.Direct, что означает, что сообщение будет доставлено по надежному, но не гарантированному каналу. Нет отрицательных подтверждений, если прямое сообщение не может быть доставлено.

Если сообщение должно быть гарантировано, следует использовать MessageDeliveryMode.Persistent. Если сообщение не может быть доставлено, будет инициировано событие сеанса RejectedMessageError, чтобы указать, что возникла проблема. Вы можете обратиться к образцу кода AdPubAck.cs в Solace .NET API для получения подробной информации.

Существует также возможная ошибка печати с Eclipse. Можете ли вы проверить, действительно ли сообщение было получено приложением Java?

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

Если сообщение может быть получено с правильной длиной, то, скорее всего, это ошибка Eclipse: java System.out.println () странное поведение длинная строка

Запуск приложения Java через командную строку отобразит длинную строку.

Другие вопросы по тегам