This is an automated email from the ASF dual-hosted git repository. aaronai pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
commit cd4302c5f23c9602b5bc9d70587ff5c856963aee Author: Aaron Ai <yangkun....@gmail.com> AuthorDate: Tue Mar 7 14:50:53 2023 +0800 Support to use DateTime.Now to send message --- csharp/examples/ProducerDelayMessageExample.cs | 2 +- csharp/rocketmq-client-csharp/IClientManager.cs | 3 +-- csharp/rocketmq-client-csharp/Message.cs | 4 +++- csharp/rocketmq-client-csharp/MessageView.cs | 5 +++-- csharp/rocketmq-client-csharp/Producer.cs | 3 ++- csharp/rocketmq-client-csharp/PublishingMessage.cs | 2 +- csharp/tests/EndpointsTest.cs | 4 ++-- csharp/tests/MessageTest.cs | 25 ++++++++++++++++++++++ 8 files changed, 38 insertions(+), 10 deletions(-) diff --git a/csharp/examples/ProducerDelayMessageExample.cs b/csharp/examples/ProducerDelayMessageExample.cs index f1119245..84808872 100644 --- a/csharp/examples/ProducerDelayMessageExample.cs +++ b/csharp/examples/ProducerDelayMessageExample.cs @@ -59,7 +59,7 @@ namespace examples .SetTag(tag) // You could set multiple keys for the single message actually. .SetKeys("yourMessageKey-2f00df144e48") - .SetDeliveryTimestamp(DateTime.UtcNow + TimeSpan.FromSeconds(30)) + .SetDeliveryTimestamp(DateTime.Now + TimeSpan.FromSeconds(30)) .Build(); var sendReceipt = await producer.Send(message); diff --git a/csharp/rocketmq-client-csharp/IClientManager.cs b/csharp/rocketmq-client-csharp/IClientManager.cs index d69b0506..19f9459f 100644 --- a/csharp/rocketmq-client-csharp/IClientManager.cs +++ b/csharp/rocketmq-client-csharp/IClientManager.cs @@ -90,8 +90,7 @@ namespace Org.Apache.Rocketmq /// <param name="timeout">Request max duration.</param> /// <returns></returns> Task<RpcInvocation<ReceiveMessageRequest, List<ReceiveMessageResponse>>> ReceiveMessage(Endpoints endpoints, - ReceiveMessageRequest request, - TimeSpan timeout); + ReceiveMessageRequest request, TimeSpan timeout); /// <summary> /// Message acknowledgement towards remote endpoints. diff --git a/csharp/rocketmq-client-csharp/Message.cs b/csharp/rocketmq-client-csharp/Message.cs index 42c271a5..b71a4650 100644 --- a/csharp/rocketmq-client-csharp/Message.cs +++ b/csharp/rocketmq-client-csharp/Message.cs @@ -131,7 +131,9 @@ namespace Org.Apache.Rocketmq { Preconditions.CheckArgument(null == _messageGroup, "deliveryTimestamp and messageGroup should not be set at same time"); - _deliveryTimestamp = deliveryTimestamp; + _deliveryTimestamp = DateTimeKind.Utc == deliveryTimestamp.Kind + ? TimeZoneInfo.ConvertTimeFromUtc(deliveryTimestamp, TimeZoneInfo.Local) + : deliveryTimestamp; return this; } diff --git a/csharp/rocketmq-client-csharp/MessageView.cs b/csharp/rocketmq-client-csharp/MessageView.cs index 57a10619..2581f48b 100644 --- a/csharp/rocketmq-client-csharp/MessageView.cs +++ b/csharp/rocketmq-client-csharp/MessageView.cs @@ -158,11 +158,12 @@ namespace Org.Apache.Rocketmq var messageGroup = systemProperties.HasMessageGroup ? systemProperties.MessageGroup : null; DateTime? deliveryTime = null == systemProperties.DeliveryTimestamp ? null - : systemProperties.DeliveryTimestamp.ToDateTime(); + : TimeZoneInfo.ConvertTimeFromUtc(systemProperties.DeliveryTimestamp.ToDateTime(), TimeZoneInfo.Local); var keys = systemProperties.Keys.ToList(); var bornHost = systemProperties.BornHost; - var bornTime = systemProperties.BornTimestamp.ToDateTime(); + var bornTime = + TimeZoneInfo.ConvertTimeFromUtc(systemProperties.BornTimestamp.ToDateTime(), TimeZoneInfo.Local); var deliveryAttempt = systemProperties.DeliveryAttempt; var queueOffset = systemProperties.QueueOffset; var properties = new Dictionary<string, string>(); diff --git a/csharp/rocketmq-client-csharp/Producer.cs b/csharp/rocketmq-client-csharp/Producer.cs index 95ddf98b..eebc24a2 100644 --- a/csharp/rocketmq-client-csharp/Producer.cs +++ b/csharp/rocketmq-client-csharp/Producer.cs @@ -188,7 +188,8 @@ namespace Org.Apache.Rocketmq } } - throw exception!; + throw new Exception($"Failed to send message finally, topic={message.Topic}, clientId={ClientId}", + exception); } public async Task<ISendReceipt> Send(Message message) diff --git a/csharp/rocketmq-client-csharp/PublishingMessage.cs b/csharp/rocketmq-client-csharp/PublishingMessage.cs index b65f4660..ff681fe7 100644 --- a/csharp/rocketmq-client-csharp/PublishingMessage.cs +++ b/csharp/rocketmq-client-csharp/PublishingMessage.cs @@ -92,7 +92,7 @@ namespace Org.Apache.Rocketmq if (DeliveryTimestamp.HasValue) { - systemProperties.DeliveryTimestamp = Timestamp.FromDateTime(DeliveryTimestamp.Value); + systemProperties.DeliveryTimestamp = Timestamp.FromDateTime(DeliveryTimestamp.Value.ToUniversalTime()); } if (null != MessageGroup) diff --git a/csharp/tests/EndpointsTest.cs b/csharp/tests/EndpointsTest.cs index 4c85209e..8e71ae23 100644 --- a/csharp/tests/EndpointsTest.cs +++ b/csharp/tests/EndpointsTest.cs @@ -35,8 +35,8 @@ namespace tests public void TestGrpcTargetWithSsl() { var endpoints = new Endpoints("127.0.0.1"); - var targetWithoutSsl = endpoints.GrpcTarget(true); - Assert.AreEqual("https://127.0.0.1:80", targetWithoutSsl); + var targetWithSsl = endpoints.GrpcTarget(true); + Assert.AreEqual("https://127.0.0.1:80", targetWithSsl); } } } \ No newline at end of file diff --git a/csharp/tests/MessageTest.cs b/csharp/tests/MessageTest.cs index d8191d28..56d942cf 100644 --- a/csharp/tests/MessageTest.cs +++ b/csharp/tests/MessageTest.cs @@ -148,6 +148,31 @@ namespace tests new Message.Builder().SetKeys("a", "b"); } + [TestMethod] + public void TestSetDeliveryTimestampWithLocalTime() + { + var deliveryTimestamp = DateTime.Now; + var message = new Message.Builder().SetTopic("yourTopic").SetDeliveryTimestamp(deliveryTimestamp) + .SetBody(Encoding.UTF8.GetBytes("foobar")) + .Build(); + Assert.IsTrue(message.DeliveryTimestamp.HasValue); + Assert.AreEqual(DateTimeKind.Local, message.DeliveryTimestamp.Value.Kind); + Assert.AreEqual(deliveryTimestamp, message.DeliveryTimestamp.Value); + } + + [TestMethod] + public void TestSetDeliveryTimestampWithUtcTime() + { + var deliveryTimestamp = DateTime.UtcNow; + var message = new Message.Builder().SetTopic("yourTopic").SetDeliveryTimestamp(deliveryTimestamp) + .SetBody(Encoding.UTF8.GetBytes("foobar")) + .Build(); + Assert.IsTrue(message.DeliveryTimestamp.HasValue); + Assert.AreEqual(DateTimeKind.Local, message.DeliveryTimestamp.Value.Kind); + var localTimestamp = TimeZoneInfo.ConvertTimeFromUtc(deliveryTimestamp, TimeZoneInfo.Local); + Assert.AreEqual(localTimestamp, message.DeliveryTimestamp.Value); + } + [TestMethod] [ExpectedException(typeof(ArgumentException))] public void TestSetDeliveryTimestampAndMessageGroup()