NewLife/NewLife.RocketMQ

v3.2.2026.0802  新增 MessageConverter 双协议消息模型转换助手,支持 Remoting 与 gRPC 消息互转;优化 gRPC 协议解析健壮性与并发安全,修复枚举偏移与字段编号问题,提升 PushConsumer 稳定性;统一云厂商 Provider 适配并升级依赖;修复 WriteLog 空引用与 TOPIC_NOT_EXIST 日志场景;新增 17 个云厂商单元测试及 gRPC 健壮性测试;优化 GitHub Actions 流程与集成测试自动启动
大石头 authored at 2026-08-02 02:17:08
4daaa37
Tree
1 Parent(s) a4c6ef7
Summary: 4 changed files with 43 additions and 5 deletions.
Modified +26 -0
Modified +4 -4
Modified +12 -0
Modified +1 -1
Modified +26 -0
diff --git a/ChangeLog.md b/ChangeLog.md
index 511e25d..1638577 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,31 @@
 # 更新日志
 
+## v3.2.2026.0802 (2026-08-02)
+
+### gRPC 协议增强与健壮性
+- **MessageConverter 双协议转换助手**:新增公共 API,支持 Remoting(Message/MessageExt)与 gRPC(GrpcMessage)消息模型双向转换,消除调用方手写胶水代码
+- **gRPC 解析与并发健壮性**:修复枚举偏移、字段编号错误,增强 Protobuf 解析容错与并发安全,提升 PushConsumer 稳定性
+- **性能与架构优化**:优化 gRPC 编解码热点路径与整体架构
+
+### 云适配优化
+- **CloudProvider 统一**:统一阿里云、华为云、腾讯云及 Apache ACL 适配逻辑,升级依赖并优化多项细节
+
+### Bug 修复
+- **[fix]** 修复 WriteLog 空引用问题,Topic 名为空时兜底输出
+- **[fix]** 补充 TOPIC_NOT_EXIST 异常场景日志,使用 range slice 优化
+
+### 测试与质量
+- 新增 17 个云厂商单元测试,覆盖四家 Provider 适配器逻辑
+- 新增 gRPC 黄金字节样本、健壮性及 MessageConverter 单元测试
+- 修复 4 个 CI 测试失败(空 Broker 列表、消费初始化等场景)
+- 集成测试支持自动启动本地 RocketMQ 并硬失败
+
+### 其他优化
+- 重构 GitHub Actions RocketMQ 配置生成与下载方式,增强可读性和可维护性
+- 新增竞品分析文档,重构需求/功能清单/架构三件套文档体系并统一格式
+
+---
+
 ## v3.1.2026.0601 (2026-06-01)
 
 ### RocketMQ 5.x 协议增强(F052~F058)
Modified +4 -4
diff --git a/NewLife.RocketMQ/NewLife.RocketMQ.csproj b/NewLife.RocketMQ/NewLife.RocketMQ.csproj
index 6a5b75f..914250d 100644
--- a/NewLife.RocketMQ/NewLife.RocketMQ.csproj
+++ b/NewLife.RocketMQ/NewLife.RocketMQ.csproj
@@ -5,7 +5,7 @@
     <Description>企业级纯托管 RocketMQ 客户端,双协议支持 Remoting 4.x/5.x 和 gRPC 5.x Proxy,零外部依赖,无需 Java、gRPC、Protobuf 第三方库,统一适配阿里云、华为云、腾讯云及 Apache ACL,完整企业级特性(消费重试、死信队列、事务消息、顺序消费、Pop 消费),十亿级项目验证</Description>
     <Company>新生命开发团队</Company>
     <Copyright>©2002-2026 新生命开发团队</Copyright>
-    <VersionPrefix>3.1</VersionPrefix>
+    <VersionPrefix>3.2</VersionPrefix>
     <VersionSuffix>$([System.DateTime]::Now.ToString(`yyyy.MMdd`))</VersionSuffix>
     <Version>$(VersionPrefix).$(VersionSuffix)</Version>
     <FileVersion>$(Version)</FileVersion>
@@ -30,7 +30,7 @@
     <RepositoryUrl>https://github.com/NewLifeX/NewLife.RocketMQ</RepositoryUrl>
     <RepositoryType>git</RepositoryType>
     <PackageTags>新生命团队;X组件;NewLife;RocketMQ;纯托管;零依赖;Remoting;gRPC;阿里云;华为云;腾讯云;消息队列;MQ;分布式;事务消息;延迟消息;顺序消息;死信队列;$(AssemblyName)</PackageTags>
-    <PackageReleaseNotes>新增 F052~F058 协议特性:消息压缩可插拔(ZLIB/LZ4/ZSTD)、gRPC 优先级消息、ACL 2.0、LMQ 轻量队列、gRPC PushConsumer;支持 RocketMQ 5.5.0+ Lite Topic 动态创建(F057);新增 Producer/Consumer 消息钩子注册方法;修复 MessageExt 解压 Body 错误;新增 Windows 一键安装脚本</PackageReleaseNotes>
+    <PackageReleaseNotes>新增 MessageConverter 双协议消息模型转换助手,支持 Remoting 与 gRPC 消息互转;优化 gRPC 协议解析健壮性与并发安全,修复枚举偏移与字段编号问题,提升 PushConsumer 稳定性;统一云厂商 Provider 适配并升级依赖;修复 WriteLog 空引用与 TOPIC_NOT_EXIST 日志场景;新增 17 个云厂商单元测试及 gRPC 健壮性测试;优化 GitHub Actions 流程与集成测试自动启动</PackageReleaseNotes>
     <PackageLicenseExpression>MIT</PackageLicenseExpression>
     <PublishRepositoryUrl>true</PublishRepositoryUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
@@ -40,7 +40,7 @@
   </PropertyGroup>
   
   <ItemGroup>
-    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.300">
+    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.301">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
@@ -62,7 +62,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="NewLife.Core" Version="11.17.2026.706-beta0929" />
+    <PackageReference Include="NewLife.Core" Version="11.18.2026.801" />
   </ItemGroup>
 
 </Project>
Modified +12 -0
diff --git a/Readme.MD b/Readme.MD
index c7ed789..5208200 100644
--- a/Readme.MD
+++ b/Readme.MD
@@ -166,6 +166,17 @@ consumer.OnConsume = (q, messages) =>
 };
 ```
 
+### 双协议消息转换
+
+```csharp
+// Remoting 消息转 gRPC 消息(需 netstandard2.1+)
+var grpcMsg = message.ToGrpcMessage();
+
+// gRPC 消息转 Remoting 扩展消息 / 基础消息
+var ext = grpcMsg.ToMessageExt();   // MessageExt(含全部系统属性)
+var msg = grpcMsg.ToMessage();      // Message(基础字段)
+```
+
 ---
 
 ## 消费者高级特性
@@ -324,6 +335,7 @@ MqBase (业务基类)
 └── gRPC 协议(5.x Proxy,netstandard2.1+)
     ├── GrpcClient (HTTP/2,Unary + Server Streaming)
     ├── GrpcMessagingService (11 个 RPC 方法)
+    ├── MessageConverter (Remoting ↔ gRPC 消息互转)
     └── ProtoWriter/ProtoReader (自研 Protobuf 编解码)
 
 云厂商适配层
Modified +1 -1
diff --git a/XUnitTestRocketMQ/XUnitTest.csproj b/XUnitTestRocketMQ/XUnitTest.csproj
index 5d3dd1d..4581761 100644
--- a/XUnitTestRocketMQ/XUnitTest.csproj
+++ b/XUnitTestRocketMQ/XUnitTest.csproj
@@ -13,7 +13,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.7.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.8.1" />
     <PackageReference Include="Moq" Version="4.20.72" />
     <PackageReference Include="xunit" Version="2.9.3" />
     <PackageReference Include="Xunit.SkippableFact" Version="1.5.61" />