azureservicebus - 超出了 Azure 服务总线 SDK 的 SendBatch() 方法上的链接异常当前允许的限制(262144 字节)

标签 azureservicebus azure-eventhub

我们使用 Azure 服务总线 SDK 3.1.7 的 SendBatch() 方法将数据发送到 Azure 事件中心。以下是代码片段:

foreach (var packet in transformedPackets)
        {
            EventData eventData = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(packet, settings)));;
            try
            {
                eventData.Properties.Add(AppConstants.TenantDeploymentUniqueIdKey, tenantDeploymentUniqueId);
                eventData.Properties.Add(AppConstants.DataTypeKey, DataTypeKey);
                byteCount += eventData.SerializedSizeInBytes;                   
                if (byteCount > MaxBatchSize)
                {
                    sender.SendBatch(transformedMessages);
                    transformedMessages.Clear();
                    byteCount = eventData.SerializedSizeInBytes;
                }
                transformedMessages.Add(eventData);
            }
            catch (System.Exception)
            {
                eventData.Dispose();
                throw;
            }

        }

在将事件数据添加到批处理之前检查 SerializedSizeInBytes 属性后的事件(最大允许限制:256 KB),我们收到以下异常:

接收到的消息(delivery-id:0,大小:262279 字节)超过了当前链路上允许的限制(262144 字节)。
在 Microsoft.ServiceBus.Common.ExceptionDispatcher.Throw(异常异常)
在 Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult 结果)
在 Microsoft.ServiceBus.Common.AsyncResult 1.End(IAsyncResult asyncResult) at Microsoft.ServiceBus.Messaging.MessageSender.RetrySenderEventDataAsyncResult.End(IAsyncResult r) at Microsoft.ServiceBus.Messaging.MessageSender.EndSendEventData(IAsyncResult result) at Microsoft.ServiceBus.Messaging.EventHubSender.SendBatch(IEnumerable 1 eventDataList)

最佳答案

当事件被翻译成单个 AmqpMessage 时,一些额外的信息被添加到批处理头中。

确保所有 EventData 的总大小低于 250k。

您可以在此处找到有关此问题的详细信息:How to use client-side event batching functionality while Sending to Microsoft Azure EventHubs

关于azureservicebus - 超出了 Azure 服务总线 SDK 的 SendBatch() 方法上的链接异常当前允许的限制(262144 字节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37044878/

相关文章:

azure - 为什么 Azure 事件中心 EventData 的 PartitionKey 字段为空?

c# - Azure Functions 的事件中心输入绑定(bind)

sql - 当我从 Azure 流作业插入数据时,如何在 CosmosDB 中使用 GUID 作为 ID

azure - 连接到 Azure ServiceBus 队列

c# - 无法将 REST API 用于 Windows Server 1.1(本地)的服务总线

azure - 具有 azure 服务总线的持久订阅者模式

c# - 服务总线 : Can't receive any message in first 15-20 sec, 然后就可以工作了

具有 session 的 Azure 服务总线/函数,不等待函数完成

python-3.x - Azure 组合器函数,用于使用 Python 接收数据并将其写入 Azure Blob 存储

azure - 为什么我的事件中心指数重试策略不会永远持续?