Skip to content

Commit

Permalink
Override message name via attribute (#36)
Browse files Browse the repository at this point in the history
* Extract InMemoryBusEngine into its own project
* Add support for MessageAttribute to InMemoryBusEngine
* Add support for MessageAttribute to RabbitMqBusEngine
  • Loading branch information
Kralizek committed Jan 9, 2019
1 parent 6354ffd commit d8d29bf
Show file tree
Hide file tree
Showing 48 changed files with 1,245 additions and 158 deletions.
60 changes: 45 additions & 15 deletions Nybus.sln
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SenderFeedback", "samples\R
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Types", "samples\RabbitMQ\Types\Types.csproj", "{5EADDCA9-0316-4596-85B1-6C91EDFE8460}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.Integration.Nybus", "tests\Tests.Integration.Nybus\Tests.Integration.Nybus.csproj", "{C498B46D-26EF-4AAE-ADFA-5763609A688B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUtils", "tests\TestUtils\TestUtils.csproj", "{6DAC88A4-9DCF-490B-81D3-B0AA72993EA4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nybus.Engine.InMemory", "src\engines\Nybus.Engine.InMemory\Nybus.Engine.InMemory.csproj", "{C59D94B8-9869-4E12-B393-2645E9C38BF3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.Nybus.Engine.InMemory", "tests\Tests.Nybus.Engine.InMemory\Tests.Nybus.Engine.InMemory.csproj", "{8AA01AE0-1F81-41E4-917C-682E22B645D2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.Integration.Nybus.Engine.InMemory", "tests\Tests.Integration.Nybus.Engine.InMemory\Tests.Integration.Nybus.Engine.InMemory.csproj", "{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -225,18 +229,6 @@ Global
{5EADDCA9-0316-4596-85B1-6C91EDFE8460}.Release|x64.Build.0 = Release|Any CPU
{5EADDCA9-0316-4596-85B1-6C91EDFE8460}.Release|x86.ActiveCfg = Release|Any CPU
{5EADDCA9-0316-4596-85B1-6C91EDFE8460}.Release|x86.Build.0 = Release|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Debug|x64.ActiveCfg = Debug|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Debug|x64.Build.0 = Debug|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Debug|x86.ActiveCfg = Debug|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Debug|x86.Build.0 = Debug|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Release|Any CPU.Build.0 = Release|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Release|x64.ActiveCfg = Release|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Release|x64.Build.0 = Release|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Release|x86.ActiveCfg = Release|Any CPU
{C498B46D-26EF-4AAE-ADFA-5763609A688B}.Release|x86.Build.0 = Release|Any CPU
{6DAC88A4-9DCF-490B-81D3-B0AA72993EA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6DAC88A4-9DCF-490B-81D3-B0AA72993EA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6DAC88A4-9DCF-490B-81D3-B0AA72993EA4}.Debug|x64.ActiveCfg = Debug|Any CPU
Expand All @@ -249,6 +241,42 @@ Global
{6DAC88A4-9DCF-490B-81D3-B0AA72993EA4}.Release|x64.Build.0 = Release|Any CPU
{6DAC88A4-9DCF-490B-81D3-B0AA72993EA4}.Release|x86.ActiveCfg = Release|Any CPU
{6DAC88A4-9DCF-490B-81D3-B0AA72993EA4}.Release|x86.Build.0 = Release|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Debug|x64.ActiveCfg = Debug|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Debug|x64.Build.0 = Debug|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Debug|x86.ActiveCfg = Debug|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Debug|x86.Build.0 = Debug|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Release|Any CPU.Build.0 = Release|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Release|x64.ActiveCfg = Release|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Release|x64.Build.0 = Release|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Release|x86.ActiveCfg = Release|Any CPU
{C59D94B8-9869-4E12-B393-2645E9C38BF3}.Release|x86.Build.0 = Release|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Debug|x64.ActiveCfg = Debug|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Debug|x64.Build.0 = Debug|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Debug|x86.ActiveCfg = Debug|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Debug|x86.Build.0 = Debug|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Release|Any CPU.Build.0 = Release|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Release|x64.ActiveCfg = Release|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Release|x64.Build.0 = Release|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Release|x86.ActiveCfg = Release|Any CPU
{8AA01AE0-1F81-41E4-917C-682E22B645D2}.Release|x86.Build.0 = Release|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Debug|x64.ActiveCfg = Debug|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Debug|x64.Build.0 = Debug|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Debug|x86.ActiveCfg = Debug|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Debug|x86.Build.0 = Debug|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Release|Any CPU.Build.0 = Release|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Release|x64.ActiveCfg = Release|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Release|x64.Build.0 = Release|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Release|x86.ActiveCfg = Release|Any CPU
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -271,8 +299,10 @@ Global
{05B81794-040C-49B4-A248-C72558582953} = {18B7CFF6-C18A-48FF-ADB2-557333ABCD6D}
{E2016F0E-AEB0-4D33-9456-33DCCBD41F09} = {18B7CFF6-C18A-48FF-ADB2-557333ABCD6D}
{5EADDCA9-0316-4596-85B1-6C91EDFE8460} = {18B7CFF6-C18A-48FF-ADB2-557333ABCD6D}
{C498B46D-26EF-4AAE-ADFA-5763609A688B} = {3566B926-8E32-4B0D-8DC0-6DB1EB82D2CB}
{6DAC88A4-9DCF-490B-81D3-B0AA72993EA4} = {3566B926-8E32-4B0D-8DC0-6DB1EB82D2CB}
{C59D94B8-9869-4E12-B393-2645E9C38BF3} = {22CE8614-4057-44E0-8140-FFB46C642539}
{8AA01AE0-1F81-41E4-917C-682E22B645D2} = {3566B926-8E32-4B0D-8DC0-6DB1EB82D2CB}
{6B36CB22-F186-4AD9-8A6D-13E7A3E6D3A2} = {3566B926-8E32-4B0D-8DC0-6DB1EB82D2CB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {087BE4A7-5329-4F83-84DF-7AA56A3944EE}
Expand Down
2 changes: 1 addition & 1 deletion Nybus.sln.DotSettings
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/FilterSettingsManager/AttributeFilterXml/@EntryValue">&lt;data /&gt;</s:String>
<s:String x:Key="/Default/FilterSettingsManager/CoverageFilterXml/@EntryValue">&lt;data&gt;&lt;IncludeFilters&gt;&lt;Filter ModuleMask="Nybus*" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /&gt;&lt;/IncludeFilters&gt;&lt;ExcludeFilters&gt;&lt;Filter ModuleMask="*" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /&gt;&lt;/ExcludeFilters&gt;&lt;/data&gt;</s:String>
<s:String x:Key="/Default/FilterSettingsManager/CoverageFilterXml/@EntryValue">&lt;data&gt;&lt;IncludeFilters&gt;&lt;Filter ModuleMask="Nybus*" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="False" /&gt;&lt;/IncludeFilters&gt;&lt;ExcludeFilters&gt;&lt;Filter ModuleMask="*" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="False" /&gt;&lt;Filter ModuleMask="Test*" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="False" /&gt;&lt;/ExcludeFilters&gt;&lt;/data&gt;</s:String>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nybus/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
21 changes: 12 additions & 9 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ artifacts:
name: packages
- path: outputs\*.snupkg
name: symbols
- path: outputs\tests\report
name: coverage report
type: zip

deploy:
provider: NuGet
Expand All @@ -40,12 +43,12 @@ deploy:
secure: yP12k1vrHJyValU1UWnW3NySjKfXlRomR8p4qqmYs26FDztsGMlCQeT5jdCVHlz6
artifact: packages

for:
-
branches:
only:
- master
only_commits:
message: /build/
files:
- src/
# for:
# -
# branches:
# only:
# - master
# only_commits:
# message: /build/
# files:
# - src/
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\src\engines\Nybus.Engine.InMemory\Nybus.Engine.InMemory.csproj" />
<ProjectReference Include="..\..\..\src\Nybus\Nybus.csproj" />
</ItemGroup>

Expand Down
1 change: 0 additions & 1 deletion samples/InMemory/NetCoreConsoleApp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
using Microsoft.Extensions.Configuration;
using System.Collections.Generic;
using System.Threading;
using Nybus.Policies;
using Nybus.Utils;

namespace NetCoreConsoleApp
Expand Down
38 changes: 34 additions & 4 deletions src/Nybus.Abstractions/Message.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ public abstract class Message
public abstract MessageType MessageType { get; }

public abstract Type Type { get; }

public MessageDescriptor Descriptor => MessageDescriptor.CreateFromType(Type);

protected object Item { get; set; }
}

public enum MessageType
Expand Down Expand Up @@ -47,24 +51,50 @@ public static class Headers
public abstract class CommandMessage : Message
{
public override MessageType MessageType => MessageType.Command;

public void SetCommand(ICommand command) => Item = command ?? throw new ArgumentNullException(nameof(command));
}

public class CommandMessage<TCommand> : CommandMessage where TCommand: class, ICommand
public sealed class CommandMessage<TCommand> : CommandMessage where TCommand: class, ICommand
{
public TCommand Command { get; set; }
public TCommand Command
{
get => Item as TCommand;
set => Item = value;
}

public override Type Type => typeof(TCommand);
}

public abstract class EventMessage : Message
{
public override MessageType MessageType => MessageType.Event;

public void SetEvent(IEvent @event) => Item = @event ?? throw new ArgumentNullException(nameof(@event));
}

public class EventMessage<TEvent> : EventMessage where TEvent : class, IEvent
public sealed class EventMessage<TEvent> : EventMessage where TEvent : class, IEvent
{
public TEvent Event { get; set; }
public TEvent Event
{
get => Item as TEvent;
set => Item = value;
}

public override Type Type => typeof(TEvent);
}

[AttributeUsage(AttributeTargets.Class)]
public class MessageAttribute : Attribute
{
public MessageAttribute(string name, string @namespace)
{
Name = name ?? throw new ArgumentNullException(nameof(name));
Namespace = @namespace ?? throw new ArgumentNullException(nameof(@namespace));
}

public string Name { get; }

public string Namespace { get; }
}
}
87 changes: 87 additions & 0 deletions src/Nybus.Abstractions/Utils/IMessageDescriptorStore.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;

namespace Nybus.Utils
{
public interface IMessageDescriptorStore
{
bool RegisterType(Type type);

bool TryGetDescriptorForType(Type type, out MessageDescriptor descriptor);

bool TryGetTypeForDescriptor(MessageDescriptor descriptor, out Type type);
}

public class MessageDescriptor
{
public static MessageDescriptor CreateFromType(Type type)
{
if (type == null)
{
throw new ArgumentNullException(nameof(type));
}

return new MessageDescriptor(type.Name, type.Namespace);
}

public static MessageDescriptor CreateFromAttribute (MessageAttribute attribute)
{
if (attribute == null)
{
throw new ArgumentNullException(nameof(attribute));
}

return new MessageDescriptor(attribute.Name, attribute.Namespace);
}


private static readonly char[] Separators = new []{':'};

public static bool TryParse(string descriptorName, out MessageDescriptor descriptor)
{
var strings = descriptorName.Split(':');

if (strings.Length != 2)
{
descriptor = null;
return false;
}

descriptor = new MessageDescriptor(strings[1], strings[0]);
return true;
}

public MessageDescriptor(string name, string @namespace)
{
Name = name ?? throw new ArgumentNullException(nameof(name));
Namespace = @namespace ?? throw new ArgumentNullException(nameof(@namespace));
}

public string Name { get; }

public string Namespace { get; }

public override string ToString() => $"{Namespace}:{Name}";

public static implicit operator MessageDescriptor(Type type) => CreateFromType(type);

public static readonly IEqualityComparer<MessageDescriptor> EqualityComparer = new MessageDescriptorEqualityComparer();

private class MessageDescriptorEqualityComparer : IEqualityComparer<MessageDescriptor>
{
public bool Equals(MessageDescriptor x, MessageDescriptor y)
{
if (x == null && y == null) return true;

if ((x != null) != (y != null)) return false;

return string.Equals(x.ToString(), y.ToString(), StringComparison.Ordinal);
}

public int GetHashCode(MessageDescriptor obj)
{
return obj.ToString().GetHashCode();
}
}
}
}
5 changes: 0 additions & 5 deletions src/Nybus/NybusConfiguratorExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,6 @@ namespace Nybus
{
public static class NybusConfiguratorExtensions
{
public static void UseInMemoryBusEngine(this INybusConfigurator configurator)
{
configurator.UseBusEngine<InMemoryBusEngine>();
}

#region Subscribe to Command

public static void SubscribeToCommand<TCommand, TCommandHandler>(this INybusConfigurator configurator)
Expand Down
12 changes: 4 additions & 8 deletions src/Nybus/NybusHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ public NybusHost(IBusEngine busEngine, INybusConfiguration configuration, IServi
private bool _isStarted;
private IDisposable _disposable;

public Task StartAsync()
public async Task StartAsync()
{
_logger.LogTrace("Bus starting");

var incomingMessages = _engine.StartAsync().Result;
var incomingMessages = await _engine.StartAsync().ConfigureAwait(false);

var observable = from message in incomingMessages
where message != null
Expand All @@ -80,23 +80,19 @@ public Task StartAsync()
_logger.LogTrace("Bus started");

_isStarted = true;

return Task.CompletedTask;
}

public Task StopAsync()
public async Task StopAsync()
{
if (_isStarted)
{
_logger.LogTrace("Bus stopping");

_engine.StopAsync().Wait();
await _engine.StopAsync().ConfigureAwait(false);
_disposable.Dispose();

_logger.LogTrace("Bus stopped");
}

return Task.CompletedTask;
}

private readonly List<MessagePipeline> _messagePipelines = new List<MessagePipeline>();
Expand Down
2 changes: 1 addition & 1 deletion src/Nybus/NybusHostBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public void SubscribeToCommand<TCommand>(Type commandHandlerType)

_subscriptions.Add(host =>
{
host.SubscribeToCommand<TCommand>((dispatcher, context) => host.ExecutionEnvironment.ExecuteCommandHandlerAsync(dispatcher,context,commandHandlerType));
host.SubscribeToCommand<TCommand>((dispatcher, context) => host.ExecutionEnvironment.ExecuteCommandHandlerAsync(dispatcher, context, commandHandlerType));
});
}

Expand Down
3 changes: 3 additions & 0 deletions src/Nybus/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Nybus.Policies;
using Nybus.Utils;

namespace Nybus
{
Expand Down Expand Up @@ -49,6 +50,8 @@ public static IServiceCollection AddNybus(this IServiceCollection services, Acti
return options;
});

services.AddSingleton<IMessageDescriptorStore, MessageDescriptorStore>();

configurator.ConfigureServices(services);

services.AddSingleton(sp =>
Expand Down
Loading

0 comments on commit d8d29bf

Please sign in to comment.