You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Azure.Messaging.EventHubs至5.9.0后,EventData.Body属性替代方案咨询

Azure.Messaging.EventHubs 5.9.0 中 EventData.Body 的替代方案

升级到5.9.0版本后,EventData.Body的类型从旧版的ArraySegment<byte>改为了ReadOnlyMemory<byte>,因此原代码中的Array、Offset、Count属性无法直接使用,以下是两种可行的替代方案:

方案一:修改Decompress函数适配ReadOnlyMemory

这种方式更高效,无需额外内存复制,直接基于ReadOnlyMemory<byte>处理:

public static string Decompress(ReadOnlyMemory<byte> input)
{
    using var memoryStream = new MemoryStream();
    memoryStream.Write(input.Span);
    memoryStream.Position = 0;
    
    using var decompressedStream = new GZipStream(memoryStream, CompressionMode.Decompress);
    using var streamReader = new StreamReader(decompressedStream, Encoding.UTF8);

    return streamReader.ReadToEnd();
}

调用时直接传入eventData.Body:

var decompressed = Decompress(eventData.Body);

方案二:保留原Decompress函数,转换参数适配

如果不想修改现有函数签名,可通过MemoryMarshal.TryGetArray获取底层数组片段(避免内存复制);若无法获取则转为字节数组:

if (MemoryMarshal.TryGetArray(eventData.Body, out ArraySegment<byte> segment))
{
    var decompressed = Decompress(segment.Array, segment.Offset, segment.Count);
    // 后续业务逻辑
}
else
{
    var bodyBytes = eventData.Body.ToArray();
    var decompressed = Decompress(bodyBytes, 0, bodyBytes.Length);
    // 后续业务逻辑
}

相关信息的查找方法

  • 通过IDE的「转到定义」功能查看EventData.Body的类型定义及注释,直接了解属性使用方式
  • 查阅SDK版本变更日志,重点关注5.5.0到5.9.0之间的破坏性更新(Breaking Changes)
  • 参考官方迁移指南,梳理从旧版Microsoft.Azure.EventHubs到新版Azure.Messaging.EventHubs的核心API变化

内容的提问来源于stack exchange,提问作者yoyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:19:54