我正在使用应用程序(.net core)通过azure服务总线发送对象,并由web作业(.net core)接收。
问题是如何serialize/deserializesend/receive对象?
我发现有很多参考资料可以让LegacyBroakerMessage.GetBody()接收消息,但不是新的.net核心方法,请给出建议,谢谢。
发件人代码:

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服务总线队列发送/接收对象实例的类型:

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函数(service bus queue trigger/.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版)。
json(11.0.2版)。
考虑阅读:下面是json.net的性能提示文章:
https://www.newtonsoft.com/json/help/html/Performance.htm
设计原理:在最新的Microsoft.azure.ServiceBus中删除了内置POCO序列化支持。这是因为“虽然这种隐藏的序列化魔术很方便,但应用程序应该对对象序列化进行显式控制,并在将其对象图包含到消息中之前将其转换为流,然后在接收方执行相反的操作。这将产生可互操作的结果。”
https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messages-payloads

08-26 18:42
查看更多