EventHub EventDataBatch超过MaxMessageSize

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

我正在使用Microsoft.Azure.EventHubs 2.0.0 NuGet向批处理添加消息:

private EventDataBatch _currentBatch;
_currentBatch = _eventHubClient.CreateBatch();
...
var json = @event.ToEventJson();
var data = new EventData(Encoding.UTF8.GetBytes(json));
if (_currentBatch.TryAdd(data))
            {
                return;
            }

但是随机创建的批次(不是在所有创建的批次上)抛出:

{Microsoft.Azure.EventHubs.MessageSizeExceededException:收到的消息(delivery-id:0,大小:262192字节)超出了链接上当前允许的限制(262144字节)。

await _eventHubClient.SendBatchAsync(batch);

这是确定性的,因为我有一组数据在测试期间始终抛出此错误。

azure-eventhub
1个回答
0
投票

更新:

如果您使用Microsoft.Azure.EventHubs 2.0.0 NuGet,并且邮件大小大于256kb,您应该看到以下错误消息:

System.ArgumentException: 'There are no event data supplied. Please make sure input events are not empty.
Parameter name: eventDatas'.

如果未明确设置最大大小(可能长达1M),则默认最大大小为256kb。

方法_currentBatch.TryAdd(data)将检查尺寸是否超过您设置的最大尺寸。如果它超过最大大小,则返回false,如果返回false,则SendAsync()方法将抛出异常;否则返回true。

您可以使用以下代码显式设置最大大小(可以长达1M):

BatchOptions bo = new BatchOptions() { MaxMessageSize = 1048576 }; 
_currentBatch = eventHubClient.CreateBatch(bo);

示例代码为blow,要发送的数据大于256kb且小于1M:

private static async Task SendTest()
    {
        var connectionStringBuilder = new EventHubsConnectionStringBuilder(EventHubConnectionString)
        {
            EntityPath = EventHubName
        };
        eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
        EventDataBatch _currentBatch;
        BatchOptions bo = new BatchOptions() { MaxMessageSize = 1048576 }; // the max size can be 1M
        _currentBatch = eventHubClient.CreateBatch(bo);            
        StreamReader sr = new StreamReader(@"D:\azure stack overflow\2019\04\18\test1.txt");
        string s = sr.ReadToEnd();
        Console.WriteLine(s.Length);
        var data = new EventData(Encoding.UTF8.GetBytes(s));
        if (_currentBatch.TryAdd(data))
        {
            Console.WriteLine("data has been added successfully!!!");
            //return;                
        }
        else
        {
            Console.WriteLine("no data added,the data is too larger!!!");
        }
       await eventHubClient.SendAsync(_currentBatch);
    }

并且它没有抛出异常:

enter image description here


由于这个原因引发了“MessageSizeExceededException”例外情况:

如果eventDataList的序列化大小超过一个事件传输的允许大小限制(默认为256k),则抛出该异常。

请确保尺寸不超过256k。

您可以参考文档here了解更多详情。

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