Получение пустого байтового массива для Imessage.content от служебной шины Azure - PullRequest
0 голосов
/ 05 июня 2018

В настоящее время я использую две разные платформы для выполнения действий по синхронизации.Итак, когда действие происходит на платформе 1 (C # -визуальная студия) , то такое же действие должно происходить на платформе 2 (Java) .Для этого я использую SB (служебная шина Azure) для обмена сообщениями Json между двумя платформами.

Действие 1: платформа 1 ----> Сервисная шина -----> платформа 2.

Работает нормально .Сообщение отправляется и принимается в точности так, как и должно быть.

Действие 2: платформа 2 ----> Сервисная шина ----> платформа 1.

не работает .Сообщение отправляется правильно в SB, но когда оно поднято, свойство content содержит только пустой массив, когда он должен быть массивом байтов (содержащим сообщение).Остальные атрибуты сообщения, такие как contentType, replyTo и т. Д., Установлены правильно, поэтому сообщение получается в порядке.Просто отсутствует содержимое или, другими словами, тело сообщения.

Действие 3: Azure SB / Отправка сообщений -----> Сервисная шина -----> платформа 1.

Работает нормально .Другой вариант - отправить сообщение JSON непосредственно в служебную шину с помощью служебной шины Azure / отправить сообщения и поместить туда сообщение JSON.

Для действий 2 и 3 на служебную шину отправляется одно и то же сообщение (когда я его просматриваю).Один отправляется непосредственно на служебную шину, другой генерируется платформой 2. Я думаю, что фактическое сообщение как-то кажется другим в фоновом режиме, поэтому тело сообщения пусто в действии 2.

Потоки и процессы обрабатываются правильно.

Для настройки получателя:

IMessageReceiver receive r= null;

if (config.isSessionsEnabled()) {
    receiver = ClientFactory.acceptSessionFromConnectionStringBuilder(new ConnectionStringBuilder(connString), config.getSessionID(), ReceiveMode.PEEKLOCK);
} else {
    receiver = ClientFactory.createMessageReceiverFromConnectionStringBuilder(new ConnectionStringBuilder(connString), ReceiveMode.PEEKLOCK);
}

Для получения сообщения:

try {
       message = receiver.receive(Duration.ofSeconds(1)); //message.Content will be empty array
       if(message != null){
         //process message
       }                    
    } catch (Exception e) {

    }
}

Правильно ли мое пониманиеили, может быть, есть другое объяснение этому!

1 Ответ

0 голосов
/ 11 июня 2018

Правильно ли мое понимание или, возможно, есть другое объяснение этому!

Очень странно, что если вы отправляете сообщение с платформы Java, а содержание сообщения пустое.

Насколько я понимаю, при отправке в ABS кажется, что содержимое сообщения пустое.Я рекомендую вам проверить код отправки Java-сообщения перед отправкой в ​​ABS.

Вы также можете использовать Обозреватель служебной шины Azure , чтобы получить информацию о сообщении после его отправки в ABS [До получения от платформы .Net ].

...