You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by aa...@apache.org on 2023/02/28 12:07:22 UTC
[rocketmq-clients] 01/06: Polish example
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 690ff181e4d92ef555b77cb718ec107cb3e9fa54
Author: Aaron Ai <ya...@gmail.com>
AuthorDate: Tue Feb 28 13:52:01 2023 +0800
Polish example
---
csharp/examples/ProducerBenchmark.cs | 9 +-
csharp/examples/ProducerDelayMessageExample.cs | 9 +-
csharp/examples/ProducerFifoMessageExample.cs | 11 +--
csharp/examples/ProducerNormalMessageExample.cs | 10 +-
.../examples/ProducerTransactionMessageExample.cs | 9 +-
csharp/rocketmq-client-csharp/Message.cs | 38 ++++++--
csharp/rocketmq-client-csharp/PublishingMessage.cs | 2 +-
csharp/tests/MessageTest.cs | 107 ++++++++++++++++++++-
8 files changed, 144 insertions(+), 51 deletions(-)
diff --git a/csharp/examples/ProducerBenchmark.cs b/csharp/examples/ProducerBenchmark.cs
index c20d6f09..59a3a0a6 100644
--- a/csharp/examples/ProducerBenchmark.cs
+++ b/csharp/examples/ProducerBenchmark.cs
@@ -79,17 +79,12 @@ namespace examples
// Define your message body.
var bytes = Encoding.UTF8.GetBytes("foobar");
const string tag = "yourMessageTagA";
- // You could set multiple keys for the single message.
- var keys = new List<string>
- {
- "yourMessageKey-7044358f98fc",
- "yourMessageKey-f72539fbc246"
- };
var message = new Message.Builder()
.SetTopic(topic)
.SetBody(bytes)
.SetTag(tag)
- .SetKeys(keys)
+ // You could set multiple keys for the single message actually.
+ .SetKeys("yourMessageKey-7044358f98fc")
.Build();
DoStats();
diff --git a/csharp/examples/ProducerDelayMessageExample.cs b/csharp/examples/ProducerDelayMessageExample.cs
index 6c879bc2..72e2cadd 100644
--- a/csharp/examples/ProducerDelayMessageExample.cs
+++ b/csharp/examples/ProducerDelayMessageExample.cs
@@ -53,17 +53,12 @@ namespace examples
// Define your message body.
var bytes = Encoding.UTF8.GetBytes("foobar");
const string tag = "yourMessageTagA";
- // You could set multiple keys for the single message.
- var keys = new List<string>
- {
- "yourMessageKey-2f00df144e48",
- "yourMessageKey-49df1dd332b7"
- };
var message = new Message.Builder()
.SetTopic(topic)
.SetBody(bytes)
.SetTag(tag)
- .SetKeys(keys)
+ // You could set multiple keys for the single message actually.
+ .SetKeys("yourMessageKey-2f00df144e48")
.SetDeliveryTimestamp(DateTime.UtcNow + TimeSpan.FromSeconds(30))
.Build();
diff --git a/csharp/examples/ProducerFifoMessageExample.cs b/csharp/examples/ProducerFifoMessageExample.cs
index c0a8337d..1eeaa2e2 100644
--- a/csharp/examples/ProducerFifoMessageExample.cs
+++ b/csharp/examples/ProducerFifoMessageExample.cs
@@ -54,24 +54,21 @@ namespace examples
// Define your message body.
var bytes = Encoding.UTF8.GetBytes("foobar");
const string tag = "yourMessageTagA";
- // You could set multiple keys for the single message.
- var keys = new List<string>
- {
- "yourMessageKey-7044358f98fc",
- "yourMessageKey-f72539fbc246"
- };
const string messageGroup = "yourMessageGroup";
var message = new Message.Builder()
.SetTopic(topic)
.SetBody(bytes)
.SetTag(tag)
- .SetKeys(keys)
+ // You could set multiple keys for the single message actually.
+ .SetKeys("yourMessageKey-7044358f98fc")
+ // Message group decides the message delivery order.
.SetMessageGroup(messageGroup)
.Build();
var sendReceipt = await producer.Send(message);
Logger.Info($"Send message successfully, sendReceipt={sendReceipt}");
Thread.Sleep(9999999);
+ // Or you could close the producer manually.
// await producer.DisposeAsync();
}
}
diff --git a/csharp/examples/ProducerNormalMessageExample.cs b/csharp/examples/ProducerNormalMessageExample.cs
index db2ccd18..27b805ff 100644
--- a/csharp/examples/ProducerNormalMessageExample.cs
+++ b/csharp/examples/ProducerNormalMessageExample.cs
@@ -53,18 +53,12 @@ namespace examples
// Define your message body.
var bytes = Encoding.UTF8.GetBytes("foobar");
const string tag = "yourMessageTagA";
- // You could set multiple keys for the single message.
- var keys = new List<string>
- {
- "yourMessageKey-7044358f98fc",
- "yourMessageKey-f72539fbc246"
- };
- // Set topic for current message.
var message = new Message.Builder()
.SetTopic(topic)
.SetBody(bytes)
.SetTag(tag)
- .SetKeys(keys)
+ // You could set multiple keys for the single message actually.
+ .SetKeys("yourMessageKey-7044358f98fc")
.Build();
var sendReceipt = await producer.Send(message);
diff --git a/csharp/examples/ProducerTransactionMessageExample.cs b/csharp/examples/ProducerTransactionMessageExample.cs
index 54cebcdd..b19f95d7 100644
--- a/csharp/examples/ProducerTransactionMessageExample.cs
+++ b/csharp/examples/ProducerTransactionMessageExample.cs
@@ -62,17 +62,12 @@ namespace examples
// Define your message body.
var bytes = Encoding.UTF8.GetBytes("foobar");
const string tag = "yourMessageTagA";
- // You could set multiple keys for the single message.
- var keys = new List<string>
- {
- "yourMessageKey-7044358f98fc",
- "yourMessageKey-f72539fbc246"
- };
var message = new Message.Builder()
.SetTopic(topic)
.SetBody(bytes)
.SetTag(tag)
- .SetKeys(keys)
+ // You could set multiple keys for the single message actually.
+ .SetKeys("yourMessageKey-7044358f98fc")
.Build();
var sendReceipt = await producer.Send(message, transaction);
diff --git a/csharp/rocketmq-client-csharp/Message.cs b/csharp/rocketmq-client-csharp/Message.cs
index fe2dee79..14d932a2 100644
--- a/csharp/rocketmq-client-csharp/Message.cs
+++ b/csharp/rocketmq-client-csharp/Message.cs
@@ -23,13 +23,13 @@ namespace Org.Apache.Rocketmq
public class Message
{
private Message(string topic, byte[] body, string tag, List<string> keys,
- Dictionary<string, string> userProperties, DateTime? deliveryTimestamp, string messageGroup)
+ Dictionary<string, string> properties, DateTime? deliveryTimestamp, string messageGroup)
{
Topic = topic;
Tag = tag;
Keys = keys;
Body = body;
- UserProperties = userProperties;
+ Properties = properties;
DeliveryTimestamp = deliveryTimestamp;
MessageGroup = messageGroup;
}
@@ -40,7 +40,7 @@ namespace Org.Apache.Rocketmq
Tag = message.Tag;
Keys = message.Keys;
Body = message.Body;
- UserProperties = message.UserProperties;
+ Properties = message.Properties;
MessageGroup = message.MessageGroup;
DeliveryTimestamp = message.DeliveryTimestamp;
}
@@ -52,7 +52,7 @@ namespace Org.Apache.Rocketmq
public string Tag { get; }
public List<string> Keys { get; }
- public Dictionary<string, string> UserProperties { get; }
+ public Dictionary<string, string> Properties { get; }
public DateTime? DeliveryTimestamp { get; }
@@ -64,37 +64,51 @@ namespace Org.Apache.Rocketmq
private byte[] _body;
private string _tag;
private List<string> _keys = new();
- private Dictionary<string, string> _userProperties = new();
+ private readonly Dictionary<string, string> _properties = new();
private DateTime? _deliveryTimestamp;
private string _messageGroup;
public Builder SetTopic(string topic)
{
+ Preconditions.CheckArgument(null != topic, "topic should not be null");
_topic = topic;
return this;
}
public Builder SetBody(byte[] body)
{
+ Preconditions.CheckArgument(null != body, "body should not be null");
_body = body;
return this;
}
public Builder SetTag(string tag)
{
+ Preconditions.CheckArgument(!string.IsNullOrWhiteSpace(tag), "tag should not be null or white space");
_tag = tag;
return this;
}
- public Builder SetKeys(List<string> keys)
+ public Builder SetKeys(params string[] keys)
{
- _keys = keys;
+ _keys = new List<string>();
+ foreach (var key in keys)
+ {
+ Preconditions.CheckArgument(!string.IsNullOrWhiteSpace(key),
+ "key should not be null or white space");
+ _keys.Add(key);
+ }
+
return this;
}
- public Builder SetUserProperties(Dictionary<string, string> userProperties)
+ public Builder AddProperty(string key, string value)
{
- _userProperties = userProperties;
+ Preconditions.CheckArgument(!string.IsNullOrWhiteSpace(key),
+ "key should not be null or white space");
+ Preconditions.CheckArgument(!string.IsNullOrWhiteSpace(value),
+ "value should not be null or white space");
+ _properties[key!] = value;
return this;
}
@@ -106,13 +120,17 @@ namespace Org.Apache.Rocketmq
public Builder SetMessageGroup(string messageGroup)
{
+ Preconditions.CheckArgument(!string.IsNullOrWhiteSpace(messageGroup),
+ "messageGroup should not be null or white space");
_messageGroup = messageGroup;
return this;
}
public Message Build()
{
- return new Message(_topic, _body, _tag, _keys, _userProperties, _deliveryTimestamp, _messageGroup);
+ Preconditions.CheckArgument(null != _topic, "topic has not been set yet");
+ Preconditions.CheckArgument(null != _body, "body has not been set yet");
+ return new Message(_topic, _body, _tag, _keys, _properties, _deliveryTimestamp, _messageGroup);
}
}
}
diff --git a/csharp/rocketmq-client-csharp/PublishingMessage.cs b/csharp/rocketmq-client-csharp/PublishingMessage.cs
index efdc568f..369b7270 100644
--- a/csharp/rocketmq-client-csharp/PublishingMessage.cs
+++ b/csharp/rocketmq-client-csharp/PublishingMessage.cs
@@ -109,7 +109,7 @@ namespace Org.Apache.Rocketmq
Topic = topicResource,
Body = ByteString.CopyFrom(Body),
SystemProperties = systemProperties,
- UserProperties = { UserProperties }
+ UserProperties = { Properties }
};
}
}
diff --git a/csharp/tests/MessageTest.cs b/csharp/tests/MessageTest.cs
index 6ba00b8e..59db04a6 100644
--- a/csharp/tests/MessageTest.cs
+++ b/csharp/tests/MessageTest.cs
@@ -16,6 +16,7 @@
*/
using System;
+using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Text;
@@ -28,10 +29,108 @@ namespace Org.Apache.Rocketmq
[ExpectedException(typeof(ArgumentException))]
public void TestIllegalTopic0()
{
- // const string topic = "\t\n";
- // const string bodyString = "body";
- // var body = Encoding.ASCII.GetBytes(bodyString);
- // var _ = new Message(topic, body);
+ const string topic = null;
+ new Message.Builder().SetTopic(topic);
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalTag0()
+ {
+ new Message.Builder().SetTag(null);
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalTag1()
+ {
+ new Message.Builder().SetTag("");
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalTag2()
+ {
+ new Message.Builder().SetTag("\t");
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalTag3()
+ {
+ new Message.Builder().SetTag("\t\n");
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalMessageGroup0()
+ {
+ new Message.Builder().SetMessageGroup(null);
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalMessageGroup1()
+ {
+ new Message.Builder().SetMessageGroup("");
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalMessageGroup2()
+ {
+ new Message.Builder().SetMessageGroup("\t");
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalMessageGroup3()
+ {
+ new Message.Builder().SetMessageGroup("\t\n");
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalProperty0()
+ {
+ new Message.Builder().AddProperty(null, "b");
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalProperty1()
+ {
+ new Message.Builder().AddProperty("a", null);
+ }
+
+ [TestMethod]
+ public void TestAddProperty()
+ {
+ var message = new Message.Builder()
+ .SetTopic("topic")
+ .AddProperty("a", "b")
+ .SetBody(Encoding.UTF8.GetBytes("foobar"))
+ .Build();
+ var properties = new Dictionary<string, string>
+ {
+ ["a"] = "b"
+ };
+ Assert.AreEqual(1, message.Properties.Count);
+ Assert.AreEqual(properties["a"], message.Properties["a"]);
+
+ }
+
+ [TestMethod]
+ [ExpectedException(typeof(ArgumentException))]
+ public void TestIllegalKey()
+ {
+ new Message.Builder().SetKeys("\t");
+ }
+
+ [TestMethod]
+ public void TestKeys()
+ {
+ new Message.Builder().SetKeys("a", "b");
}
}
}
\ No newline at end of file