NewLife/NewLife.RocketMQ

使用docker部署rocketmqv5.2.0,测试通过
智能大石头 authored at 2025-06-15 03:23:30
d4aedea
Tree
1 Parent(s) 37872f0
Summary: 5 changed files with 90 additions and 4 deletions.
Modified +1 -1
Modified +1 -1
Modified +3 -1
Modified +60 -0
Modified +25 -1
Modified +1 -1
diff --git a/NewLife.RocketMQ/MqBase.cs b/NewLife.RocketMQ/MqBase.cs
index 403cc27..c99b66d 100644
--- a/NewLife.RocketMQ/MqBase.cs
+++ b/NewLife.RocketMQ/MqBase.cs
@@ -325,7 +325,7 @@ public abstract class MqBase : DisposeBase
                 for (var i = 0; i < addrs.Length; i++)
                 {
                     var addr = addrs[i];
-                    if (addr.StartsWithIgnoreCase("10.", "192.", "172.") && !ext.IsNullOrEmpty())
+                    if (addr.StartsWithIgnoreCase("127.", "10.", "192.", "172.") && !ext.IsNullOrEmpty())
                     {
                         var p = addr.IndexOf(':');
                         addrs[i] = p > 0 ? ext + addr[p..] : ext;
Modified +1 -1
diff --git a/NewLife.RocketMQ/NewLife.RocketMQ.csproj b/NewLife.RocketMQ/NewLife.RocketMQ.csproj
index 29a7626..644e8a0 100644
--- a/NewLife.RocketMQ/NewLife.RocketMQ.csproj
+++ b/NewLife.RocketMQ/NewLife.RocketMQ.csproj
@@ -61,7 +61,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="NewLife.Core" Version="11.5.2025.601" />
+    <PackageReference Include="NewLife.Core" Version="11.5.2025.614-beta1824" />
   </ItemGroup>
 
 </Project>
Modified +3 -1
diff --git a/Test/Program.cs b/Test/Program.cs
index cd2f693..6528d9d 100644
--- a/Test/Program.cs
+++ b/Test/Program.cs
@@ -27,7 +27,7 @@ class Program
 
     static void Test1()
     {
-        JsonHelper.Default = new SystemJson();
+        //JsonHelper.Default = new SystemJson();
 
         XTrace.WriteLine("");
         XTrace.WriteLine("创建生产者……");
@@ -36,6 +36,7 @@ class Program
             Topic = "nx_test",
             NameServerAddress = "rocketmq.newlifex.com:9876",
             Version = MQVersion.V5_2_0,
+            ExternalBroker = true,
 
             Log = XTrace.Log,
         };
@@ -52,6 +53,7 @@ class Program
             Topic = producer.Topic,
             Group = "test",
             NameServerAddress = producer.NameServerAddress,
+            ExternalBroker = true,
 
             FromLastOffset = false,
             //SkipOverStoredMsgCount = 0,
Modified +60 -0
diff --git a/XUnitTestRocketMQ/CommandTests.cs b/XUnitTestRocketMQ/CommandTests.cs
index ea5902d..8305051 100644
--- a/XUnitTestRocketMQ/CommandTests.cs
+++ b/XUnitTestRocketMQ/CommandTests.cs
@@ -512,6 +512,7 @@ public class CommandTests
         Assert.Equal("R01_producer_123", ext["a"]);
         Assert.Equal("TeZ_Test_Lng", ext["b"]);
         Assert.Equal("TBW102", ext["c"]);
+        Assert.Equal("UNIQ_KEY\u00012400DD02100800152B2B7D0419D6DD5E9EFC18B4AAC246212A7D0000\u0002WAIT\u0001true\u0002TAGS\u0001*\u0002", ext["i"]);
 
         var pk = cmd.Payload;
         Assert.NotNull(pk);
@@ -641,4 +642,63 @@ public class CommandTests
         var json = pk.ToStr();
         Assert.Equal("2025-06-13 22:54:12", json);
     }
+
+    [Fact]
+    public void SendMessageV2_v520_Dotnet2()
+    {
+        var data = """
+            00 00 01 45 00 00 01 2e 7b 22 43 6f 64 65 22 3a
+            33 31 30 2c 22 45 78 74 46 69 65 6c 64 73 22 3a
+            7b 22 61 22 3a 22 52 30 31 5f 70 72 6f 64 75 63
+            65 72 5f 31 32 33 22 2c 22 62 22 3a 22 54 65 5a
+            5f 54 65 73 74 5f 4c 6e 67 22 2c 22 63 22 3a 22
+            54 42 57 31 30 32 22 2c 22 64 22 3a 22 34 22 2c
+            22 65 22 3a 22 30 22 2c 22 66 22 3a 22 30 22 2c
+            22 67 22 3a 22 31 37 34 39 39 32 33 33 35 32 34
+            38 36 22 2c 22 68 22 3a 22 30 22 2c 22 69 22 3a
+            22 54 41 47 53 5c 75 30 30 30 31 2a 5c 75 30 30
+            30 32 57 41 49 54 5c 75 30 30 30 31 54 72 75 65
+            5c 75 30 30 30 32 22 2c 22 6a 22 3a 22 30 22 2c
+            22 6b 22 3a 22 46 61 6c 73 65 22 7d 2c 22 4c 61
+            6e 67 75 61 67 65 22 3a 22 44 4f 54 4e 45 54 22
+            2c 22 4f 70 61 71 75 65 22 3a 31 2c 22 53 65 72
+            69 61 6c 69 7a 65 54 79 70 65 43 75 72 72 65 6e
+            74 52 50 43 22 3a 22 4a 53 4f 4e 22 2c 22 56 65
+            72 73 69 6f 6e 22 3a 34 35 33 2c 22 52 65 6d 61
+            72 6b 22 3a 22 53 45 4e 44 5f 4d 45 53 53 41 47
+            45 5f 56 32 22 7d 32 30 32 35 2d 30 36 2d 31 35
+            20 30 31 3a 34 39 3a 30 39
+            """;
+        var ms = new MemoryStream(data.ToHex());
+
+        var cmd = new Command();
+        var rs = cmd.Read(ms);
+        Assert.True(rs);
+        Assert.False(cmd.Reply);
+        Assert.Equal("""
+            {"Code":310,"ExtFields":{"a":"R01_producer_123","b":"TeZ_Test_Lng","c":"TBW102","d":"4","e":"0","f":"0","g":"1749923352486","h":"0","i":"TAGS\u0001*\u0002WAIT\u0001True\u0002","j":"0","k":"False"},"Language":"DOTNET","Opaque":1,"SerializeTypeCurrentRPC":"JSON","Version":453,"Remark":"SEND_MESSAGE_V2"}
+            """, cmd.RawJson);
+
+        var header = cmd.Header;
+        Assert.NotNull(header);
+        Assert.Equal((Int32)RequestCode.SEND_MESSAGE_V2, header.Code);
+        Assert.Equal(0, header.Flag);
+        Assert.Equal(LanguageCode.DOTNET + "", header.Language);
+        Assert.Equal(SerializeType.JSON + "", header.SerializeTypeCurrentRPC);
+        Assert.Equal(MQVersion.V5_2_0, header.Version);
+        //Assert.Null(header.Remark);
+        Assert.Equal("SEND_MESSAGE_V2", header.Remark);
+
+        var ext = header.GetExtFields();
+        //Assert.Equal(13, ext.Count);
+        Assert.Equal("R01_producer_123", ext["a"]);
+        Assert.Equal("TeZ_Test_Lng", ext["b"]);
+        Assert.Equal("TBW102", ext["c"]);
+
+        var pk = cmd.Payload;
+        Assert.NotNull(pk);
+
+        var json = pk.ToStr();
+        Assert.Equal("2025-06-15 01:49:09", json);
+    }
 }
Modified +25 -1
diff --git a/XUnitTestRocketMQ/MessageTests.cs b/XUnitTestRocketMQ/MessageTests.cs
index 9c10780..d4d545c 100644
--- a/XUnitTestRocketMQ/MessageTests.cs
+++ b/XUnitTestRocketMQ/MessageTests.cs
@@ -1,5 +1,8 @@
-using NewLife;
+using System;
+using NewLife;
+using NewLife.RocketMQ;
 using NewLife.RocketMQ.Protocol;
+using NewLife.Serialization;
 using Xunit;
 
 namespace XUnitTestRocketMQ;
@@ -55,6 +58,27 @@ public class MessageTests
         Assert.Contains("KEYS\u0001Key1\u0002", properties);
         Assert.Contains("DELAY\u00012\u0002", properties);
         Assert.Contains("WAIT\u0001False\u0002", properties);
+
+        var header = new SendMessageRequestHeader
+        {
+            ProducerGroup = "TestGroup",
+            Topic = "TestTopic",
+            SysFlag = 0,
+            BornTimestamp = DateTime.UtcNow.ToLong(),
+            Flag = message.Flag,
+            Properties = message.GetProperties(),
+        };
+
+        var ext = header.GetProperties();
+        //Assert.Equal(11, ext.Count);
+        Assert.Equal("WAIT\u0001False\u0002TAGS\u0001Tag1\u0002KEYS\u0001Key1\u0002DELAY\u00012\u0002", ext["i"]);
+
+        var broker = new BrokerClient([""]);
+        var cmd = broker.CreateCommand(RequestCode.SEND_MESSAGE_V2, null, ext);
+        var json = cmd.Header.ToJson(false, false, false);
+        var js = new SystemJson();
+        var json2 = js.Write(cmd.Header, false, false, true);
+        //Assert.Equal(json, json2);
     }
 
     [Fact]