This is an automated email from the ASF dual-hosted git repository.
jinrongtong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
The following commit(s) were added to refs/heads/master by this push:
new c873edae [ISSUE #954] Add ZLib compression method in C# client (#955)
c873edae is described below
commit c873edae57e3a15c5354b7cbd1f1f7f64e074e2e
Author: Jack Tsai <[email protected]>
AuthorDate: Tue Mar 25 09:46:38 2025 +0800
[ISSUE #954] Add ZLib compression method in C# client (#955)
Co-authored-by: tsaitsung-han.tht <[email protected]>
---
.github/workflows/csharp_build.yml | 3 +--
csharp/rocketmq-client-csharp/MessageView.cs | 13 +++++++++++--
csharp/rocketmq-client-csharp/Utilities.cs | 13 +++++++++++++
3 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/csharp_build.yml
b/.github/workflows/csharp_build.yml
index 590ba7b2..eb824f4b 100644
--- a/.github/workflows/csharp_build.yml
+++ b/.github/workflows/csharp_build.yml
@@ -24,6 +24,5 @@ jobs:
working-directory: ./csharp
run: |
dotnet build
- dotnet tool install -g dotnet-format
- dotnet-format --check
+ dotnet format style
dotnet test -l "console;verbosity=detailed"
diff --git a/csharp/rocketmq-client-csharp/MessageView.cs
b/csharp/rocketmq-client-csharp/MessageView.cs
index aaa5ebb4..d38df9e6 100644
--- a/csharp/rocketmq-client-csharp/MessageView.cs
+++ b/csharp/rocketmq-client-csharp/MessageView.cs
@@ -147,7 +147,16 @@ namespace Org.Apache.Rocketmq
{
case Proto.Encoding.Gzip:
{
- body = Utilities.DecompressBytesGzip(raw);
+ // Gzip
+ if (body[0] == 0x1f && body[1] == 0x8b)
+ {
+ body = Utilities.DecompressBytesGzip(raw);
+ }
+ // Zlib
+ else if (body[0] == 0x78 || body[0] == 0x79)
+ {
+ body = Utilities.DecompressBytesZlib(raw);
+ }
break;
}
case Proto.Encoding.Identity:
@@ -158,7 +167,7 @@ namespace Org.Apache.Rocketmq
default:
{
Logger.LogError($"Unsupported message encoding
algorithm," +
- $" topic={topic}, messageId={messageId},
bodyEncoding={bodyEncoding}");
+ $" topic={topic},
messageId={messageId}, bodyEncoding={bodyEncoding}");
break;
}
}
diff --git a/csharp/rocketmq-client-csharp/Utilities.cs
b/csharp/rocketmq-client-csharp/Utilities.cs
index 14e159e1..ef4616ea 100644
--- a/csharp/rocketmq-client-csharp/Utilities.cs
+++ b/csharp/rocketmq-client-csharp/Utilities.cs
@@ -154,5 +154,18 @@ namespace Org.Apache.Rocketmq
gzipStream.CopyTo(outputStream);
return outputStream.ToArray();
}
+
+ public static byte[] DecompressBytesZlib(byte[] src)
+ {
+ if (src == null || src.Length == 0)
+ {
+ throw new ArgumentException("Input cannot be null or empty.",
nameof(src));
+ }
+ using var inputStream = new MemoryStream(src);
+ using var zLibStream = new ZLibStream(inputStream,
CompressionMode.Decompress);
+ using var outputStream = new MemoryStream();
+ zLibStream.CopyTo(outputStream);
+ return outputStream.ToArray();
+ }
}
}