Сериализация / десериализация сообщений Azure ServiceBus - PullRequest
0 голосов
/ 06 июня 2018

Я использую приложение (.Net Core) для отправки объекта через служебную шину Azure и получения веб-задания (.Net Core)

Вопрос в том, как serialize/deserialize send/receive объект?

Я нашел много ссылок на устаревшее BroakerMessage.GetBody() для получения сообщения, но не новый метод .Net Core, пожалуйста, совет, спасибо.

Код отправителя:

using Microsoft.Azure.ServiceBus;

MyClass object = new MyClass();
var message = new Message(object);
await queueClient.SendAsync(message);

Код получателя:

using Microsoft.Azure.ServiceBus;

public void ProcessQueueMessage([ServiceBusTrigger("queue")] Message message, TextWriter log)
{
}

Ответы [ 2 ]

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

Можно использовать сериализацию JSON, чтобы разрешить передачу этих объектов / сущностей.

Предположим, что следующий класс - это тип экземпляров объектов, которые будут отправляться / получаться из очереди служебной шины Azure:

public class Customer{ public string Name { get; set; } public string Email { get; set; } }

--- Отправить ---

Найдите ниже пример кода (консольное приложение .NET Core 2.0) для отправки экземпляра объекта клиента:

QueueClient queueClient = new QueueClient(connectionString, queueName);
string messageBody = JsonConvert.SerializeObject(obj);
Message message = new Message(Encoding.UTF8.GetBytes(messageBody))
{
    SessionId = sessionId
};
await queueClient.SendAsync(message);

--- получение ---

Найдите ниже пример кода Azure Function (триггер очереди служебной шины / .NET Standard 2.0), чтобы получить сообщение и десериализовать его:

[FunctionName("ServiceBusQueueFunction")]
public static void Run([ServiceBusTrigger("taskqueue", Connection = "ServiceBusConnectionString")] Message message, TraceWriter log)
{
    Customer customer = JsonConvert.DeserializeObject<Customer>(Encoding.UTF8.GetString(message.Body));
}

Следующие пакеты NuGet были использованы / протестированы для приведенных выше примеров:

  • Microsoft.Azure.ServiceBus (версия 3.0.2).
  • Newtonsoft.Json (версия 11.0.2).

Подумайте над чтением: Найдите ниже статью с советами по производительности для JSON.NET: https://www.newtonsoft.com/json/help/html/Performance.htm


Обоснование проекта : Встроенная поддержка сериализации POCO была удалена в последней версии.Microsoft.Azure.ServiceBus.Это объясняется тем, что «хотя эта скрытая магия сериализации удобна, приложения должны четко контролировать сериализацию объектов и превращать свои графы объектов в потоки, прежде чем включать их в сообщение, и делать обратное на стороне получателя. Это дает совместимые результаты».

https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messages-payloads

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

как сериализовать / десериализовать для отправки / получения объекта?

Пожалуйста, обратитесь к демонстрационному коду удара:

Отправьте сообщение:

var body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(obj));
await  queueClient.SendAsync(new Message { Body = body, ContentType = "text/plain" });

В ядре .net WebJob

var body = Encoding.UTF8.GetString(message.Body);
var obj = JsonConvert.DeserializeObject<T>(body);

Результат теста:

enter image description here

...