使用docker部署rocketmqv5.2.0,测试通过智能大石头 authored at 2025-06-15 03:23:30
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;
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>
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,
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);
+ }
}
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]