Fix the problem of determining whether there is a MetadataSeparator error (#900)

* add  original topic metadata support
Signed-off-by: saberwang <saberwang@hotmail.com>

* Add topicmetadata sample
Signed-off-by: saberwang <saberwang@hotmail.com>

* fix: v2 route metadata acquisition error
Signed-off-by: saberwang <saberwang@hotmail.com>

* feat:  Support setting metadata separator
Signed-off-by: saberwang <saberwang@hotmail.com>

* chore: Note modification
Signed-off-by: saberwang <saberwang@hotmail.com>

* style:
Signed-off-by: saberwang <saberwang@hotmail.com>

* commit
Signed-off-by: saberwang <saberwang@hotmail.com>

* fix: Whether there is a problem of MetadataSeparator judgment error
Signed-off-by: saberwang <saberwang@hotmail.com>

* TopicAttribute.Metadataseparator default should be null
Signed-off-by: saberwang <saberwang@hotmail.com>

* formatting code
Signed-off-by: saberwang <saberwang@hotmail.com>

Co-authored-by: halspang <70976921+halspang@users.noreply.github.com>
This commit is contained in:
saber-wang 2022-07-20 23:32:33 +08:00 committed by GitHub
parent d061164ec8
commit e58b1de56a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 7 deletions

View File

@ -97,7 +97,7 @@ namespace Microsoft.AspNetCore.Builder
{
var first = e.First();
var rawPayload = e.Any(e => e.EnableRawPayload.GetValueOrDefault());
var metadataSeparator = e.FirstOrDefault(e => string.IsNullOrEmpty(e.MetadataSeparator)).MetadataSeparator ?? ",";
var metadataSeparator = e.FirstOrDefault(e => !string.IsNullOrEmpty(e.MetadataSeparator)).MetadataSeparator ?? ",";
var rules = e.Where(e => !string.IsNullOrEmpty(e.Match)).ToList();
var defaultRoutes = e.Where(e => string.IsNullOrEmpty(e.Match)).Select(e => RoutePatternToString(e.RoutePattern)).ToList();
var defaultRoute = defaultRoutes.FirstOrDefault();

View File

@ -28,7 +28,7 @@ namespace Dapr
/// <param name="name">The topic name.</param>
/// <param name="ownedMetadatas">The topic owned metadata ids.</param>
/// <param name="metadataSeparator">Separator to use for metadata.</param>
public TopicAttribute(string pubsubName, string name, string[] ownedMetadatas = null,string metadataSeparator = ",")
public TopicAttribute(string pubsubName, string name, string[] ownedMetadatas = null, string metadataSeparator = null)
{
ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName));
ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name));
@ -47,7 +47,7 @@ namespace Dapr
/// <param name="enableRawPayload">The enable/disable raw pay load flag.</param>
/// <param name="ownedMetadatas">The topic owned metadata ids.</param>
/// <param name="metadataSeparator">Separator to use for metadata.</param>
public TopicAttribute(string pubsubName, string name, bool enableRawPayload, string[] ownedMetadatas = null, string metadataSeparator = ",")
public TopicAttribute(string pubsubName, string name, bool enableRawPayload, string[] ownedMetadatas = null, string metadataSeparator = null)
{
ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName));
ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name));
@ -68,7 +68,7 @@ namespace Dapr
/// <param name="priority">The priority of the rule (low-to-high values).</param>
/// <param name="ownedMetadatas">The topic owned metadata ids.</param>
/// <param name="metadataSeparator">Separator to use for metadata.</param>
public TopicAttribute(string pubsubName, string name, string match, int priority, string[] ownedMetadatas = null, string metadataSeparator = ",")
public TopicAttribute(string pubsubName, string name, string match, int priority, string[] ownedMetadatas = null, string metadataSeparator = null)
{
ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName));
ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name));
@ -91,7 +91,7 @@ namespace Dapr
/// <param name="priority">The priority of the rule (low-to-high values).</param>
/// <param name="ownedMetadatas">The topic owned metadata ids.</param>
/// <param name="metadataSeparator">Separator to use for metadata.</param>
public TopicAttribute(string pubsubName, string name, bool enableRawPayload, string match, int priority, string[] ownedMetadatas = null, string metadataSeparator = ",")
public TopicAttribute(string pubsubName, string name, bool enableRawPayload, string match, int priority, string[] ownedMetadatas = null, string metadataSeparator = null)
{
ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName));
ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name));

View File

@ -78,6 +78,14 @@ namespace Dapr.AspNetCore.IntegrationTest.App
{
}
[Topic("pubsub", "metadataseparator", metadataSeparator: "|")]
[HttpPost("/topicmetadataseparatorattr")]
[TopicMetadata("n1", "v1")]
[TopicMetadata("n1", "v2")]
public void TopicMetadataSeparator()
{
}
[Topic("pubsub", "splitTopicAttr", true)]
[HttpPost("/splitTopics")]
public void SplitTopic()

View File

@ -39,7 +39,7 @@ namespace Dapr.AspNetCore.IntegrationTest
var json = await JsonSerializer.DeserializeAsync<JsonElement>(stream);
json.ValueKind.Should().Be(JsonValueKind.Array);
json.GetArrayLength().Should().Be(15);
json.GetArrayLength().Should().Be(16);
var subscriptions = new List<(string PubsubName, string Topic, string Route, string rawPayload, string match, string metadata)>();
foreach (var element in json.EnumerateArray())
{
@ -107,7 +107,7 @@ namespace Dapr.AspNetCore.IntegrationTest
subscriptions.Should().Contain(("pubsub", "metadata", "multiMetadataTopicAttr", string.Empty, string.Empty, "n1=v1;n2=v2,v3"));
subscriptions.Should().Contain(("pubsub", "metadata.1", "multiMetadataTopicAttr", "true", string.Empty, "n1=v1"));
subscriptions.Should().Contain(("pubsub", "splitMetadataTopicBuilder", "splitMetadataTopics", string.Empty, string.Empty, "n1=v1;n2=v1"));
subscriptions.Should().Contain(("pubsub", "metadataseparator", "topicmetadataseparatorattr", string.Empty, string.Empty, "n1=v1|v2"));
// Test priority route sorting
var eTopic = subscriptions.FindAll(e => e.Topic == "E");
eTopic.Count.Should().Be(3);