diff --git a/src/Testing/CoreTests/Serialization/serialization_and_deserialization.cs b/src/Testing/CoreTests/Serialization/serialization_and_deserialization.cs index 693504963..81dc3460f 100644 --- a/src/Testing/CoreTests/Serialization/serialization_and_deserialization.cs +++ b/src/Testing/CoreTests/Serialization/serialization_and_deserialization.cs @@ -43,6 +43,12 @@ private Envelope incoming } } + [Fact] + public void topic_name_is_round_tripped() + { + outgoing.TopicName = Guid.NewGuid().ToString(); + incoming.TopicName.ShouldBe(outgoing.TopicName); + } [Fact] public void accepted_content_types_positive() diff --git a/src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/send_by_topics.cs b/src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/send_by_topics.cs index 7f7393c3d..f7a63fb98 100644 --- a/src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/send_by_topics.cs +++ b/src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/send_by_topics.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Threading.Tasks; +using JasperFx.Core; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Shouldly; @@ -140,6 +141,17 @@ public async Task send_by_explicit_topic_2() .OrderBy(x => x) .ShouldHaveTheSameElementsAs("Second", "Third"); } + + [Fact] + public async Task send_to_topic_with_delay() + { + var session = await theSender + .TrackActivity() + .IncludeExternalTransports() + .WaitForMessageToBeReceivedAt(theSecondReceiver) + .AlsoTrack(theFirstReceiver, theSecondReceiver, theThirdReceiver) + .InvokeMessageAndWaitAsync(new TriggerTopicMessage()); + } } [Topic("color.purple")] @@ -165,8 +177,15 @@ public class ThirdMessage : FirstMessage { } +public class TriggerTopicMessage{} + public class MessagesHandler { + public object Handle(TriggerTopicMessage message) + { + return new FirstMessage().ToTopic("color.blue", new DeliveryOptions { ScheduleDelay = 3.Seconds() }); + } + public void Handle(FirstMessage message) { } diff --git a/src/Wolverine/EnvelopeConstants.cs b/src/Wolverine/EnvelopeConstants.cs index f1b06c7f3..a6e1439e8 100644 --- a/src/Wolverine/EnvelopeConstants.cs +++ b/src/Wolverine/EnvelopeConstants.cs @@ -23,4 +23,5 @@ public static class EnvelopeConstants public const string IsResponseKey = "is-response"; public const string TenantIdKey = "tenant-id"; public const string GroupIdKey = "group-id"; + public const string TopicNameKey = "topic-name"; } \ No newline at end of file diff --git a/src/Wolverine/Runtime/Serialization/EnvelopeSerializer.cs b/src/Wolverine/Runtime/Serialization/EnvelopeSerializer.cs index cacff4e08..77f801a43 100644 --- a/src/Wolverine/Runtime/Serialization/EnvelopeSerializer.cs +++ b/src/Wolverine/Runtime/Serialization/EnvelopeSerializer.cs @@ -94,6 +94,10 @@ public static void ReadDataElement(Envelope env, string key, string value) case EnvelopeConstants.TenantIdKey: env.TenantId = value; break; + + case EnvelopeConstants.TopicNameKey: + env.TopicName = value; + break; default: env.Headers.Add(key, value); @@ -220,6 +224,7 @@ private static int writeHeaders(BinaryWriter writer, Envelope env) writer.WriteProp(ref count, EnvelopeConstants.SagaIdKey, env.SagaId); writer.WriteProp(ref count, EnvelopeConstants.ParentIdKey, env.ParentId); writer.WriteProp(ref count, EnvelopeConstants.TenantIdKey, env.TenantId); + writer.WriteProp(ref count, EnvelopeConstants.TopicNameKey, env.TopicName); if (env.AcceptedContentTypes.Any()) {