如果ServiceBusMessage的大小超过最大大小,如何拆分发送之前

问题描述 投票:0回答:1

我们正在努力从 Microsoft.Azure.ServiceBus 迁移到 Azure.Messaging.ServiceBus。我们有一个非常复杂的实现,其中发送的消息可能超过 ServiceBusMessage(以前是 Microsoft.Azure.ServiceBus.Message)允许的最大大小。

我们有一个方法,从消息的大小开始,如果消息超过最大大小,则将其拆分为多条消息并分别发送。该方法使用 Message 中存在但不再存在于 ServiceBusMessage 中的属性。因此,如果我们尝试发送大于最大值的消息我们将收到一个异常,正如文档所述我们想要阻止它并分割消息,就像我们之前处理消息一样,但我找不到任何方法来知道它的大小。

stackoverflow 中有一个未回答的问题与我的非常相似: 如何获取ServiceBusMessage消息大小?

我指的属性是: https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.servicebus.message.size?view=azure-dotnet-legacy#microsoft-azure-servicebus-message-size

azure azureservicebus
1个回答
0
投票
不幸的是,旧包中的大小属性不准确。 它反映了对时间点的理解,尽管在正式序列化和打包用于服务操作时消息大小预计会扩大。

Azure.Messaging.ServiceBus

的推荐方法是使用
ServiceBusMessageBatch来测量。 如果调用 TryAdd
 返回 
false
,则消息太大而无法包含。

这里需要注意的是,对于大消息大小功能,服务总线引入了新的语义,其中单个消息的大小可能超过批量的大小,这在以前是不可能的。 如果您依赖大消息支持(> 1mb),则无法准确测量,因为消息序列化是在发送消息时发生的。

您最好的方法是使用主体的大小作为一般启发式,保留约 30k 的开销,并为您添加的任何应用程序属性保留保守的估计。

© www.soinside.com 2019 - 2024. All rights reserved.