c# - Azure ServiceBus 消息序列化/反序列化

标签 c# azure .net-core azureservicebus azure-webjobs

我正在使用 .NET Core 应用程序通过 Azure 服务总线队列发送对象,并由 Web 作业(也包括 .NET Core)接收该对象。

我的问题是如何序列化/反序列化以发送/接收对象?

我发现很多对旧版 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)
{
}

最佳答案

可以使用 JSON 序列化来传输这些对象/实体。

假设以下类是将对象实例发送到 Azure 服务总线队列或从 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://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messages-payloads

关于c# - Azure ServiceBus 消息序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710568/

相关文章:

c# - 在 visual studio 2012 中查找所有注释行

c# - System.diagnostics.process.start -System.ComponentModel.Win32Exception

json - 如何在 Azure Data Lake Analytics 上下文中分别使用 JSON 文件格式 usql

javascript - 在 Azure 移动服务自定义 API 中使用事务

c# - 查询父实体时导航属性为空

c# - FreePascal 64 位 DLL 和调用 C# 应用程序

wcf - Azure 计划程序 SSL 证书错误

.net - 在.NET Core中找不到ElasticSearch Nest客户端

C# .net Core 连接字符串格式不正确

c# - 如何仅导入类型而不导入实例?