From c27fe65c47aaa3d2b6ae01dbc3d3065abb093396 Mon Sep 17 00:00:00 2001 From: Tomasz Maruszak Date: Sat, 22 Feb 2020 10:57:04 +0100 Subject: [PATCH] Avro serializer for Kafka #11 --- README.md | 8 +- build/tasks.ps1 | 3 +- docs/serialization.md | 24 ++++++ .../DivideRequest.cs | 11 --- .../DivideResponse.cs | 8 -- .../README.md | 5 -- .../Sample.AvroSer.Messages.CodeFirst.csproj | 11 --- .../SubtractCommand.cs | 9 -- .../Program.cs | 69 ++++++++------- .../Sample.Serialization.ConsoleApp.csproj} | 10 +-- .../appsettings.json | 0 .../Contract-IDL/AddCommand.avdl | 2 +- .../Contract-IDL/MultiplyRequest.avdl | 2 +- .../Contract-IDL/SampleContract.avdl | 2 +- .../Contract-Protocol/SampleContract.avpr | 2 +- .../MultiplyRequest.cs | 2 +- .../README.md | 0 .../Sample.Serialization.MessagesAvro.csproj} | 2 +- .../Serialization/MessagesAvro}/AddCommand.cs | 8 +- .../MessagesAvro}/MultiplyRequest.cs | 8 +- .../MessagesAvro}/MultiplyResponse.cs | 8 +- .../MessagesAvro}/SampleProtocol.cs | 4 +- .../MessagesAvro}/SampleProtocolCallback.cs | 2 +- .../Tools/.gitignore | 0 .../Tools/gen.ps1 | 5 +- ...mMessageBus.Host.Serialization.Avro.csproj | 6 +- .../AvroConvertMessageSerializer.cs | 46 ---------- .../README.md | 4 - ...eBus.Host.Serialization.AvroConvert.csproj | 36 -------- .../HybridMessageSerializer.cs} | 8 +- .../README.md | 0 ...ssageBus.Host.Serialization.Hybrid.csproj} | 4 +- ...mMessageBus.Host.Serialization.Json.csproj | 4 +- src/SlimMessageBus.sln | 84 +++++++------------ .../SerDesBenchmark.cs | 13 +-- ...ageBus.Host.Serialization.Benchmark.csproj | 5 +- 36 files changed, 139 insertions(+), 276 deletions(-) create mode 100644 docs/serialization.md delete mode 100644 src/Samples/Sample.AvroSer.Messages.CodeFirst/DivideRequest.cs delete mode 100644 src/Samples/Sample.AvroSer.Messages.CodeFirst/DivideResponse.cs delete mode 100644 src/Samples/Sample.AvroSer.Messages.CodeFirst/README.md delete mode 100644 src/Samples/Sample.AvroSer.Messages.CodeFirst/Sample.AvroSer.Messages.CodeFirst.csproj delete mode 100644 src/Samples/Sample.AvroSer.Messages.CodeFirst/SubtractCommand.cs rename src/Samples/{Sample.AvroSer.ConsoleApp => Sample.Serialization.ConsoleApp}/Program.cs (80%) rename src/Samples/{Sample.AvroSer.ConsoleApp/Sample.AvroSer.ConsoleApp.csproj => Sample.Serialization.ConsoleApp/Sample.Serialization.ConsoleApp.csproj} (72%) rename src/Samples/{Sample.AvroSer.ConsoleApp => Sample.Serialization.ConsoleApp}/appsettings.json (100%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst => Sample.Serialization.MessagesAvro}/Contract-IDL/AddCommand.avdl (62%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst => Sample.Serialization.MessagesAvro}/Contract-IDL/MultiplyRequest.avdl (72%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst => Sample.Serialization.MessagesAvro}/Contract-IDL/SampleContract.avdl (63%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst => Sample.Serialization.MessagesAvro}/Contract-Protocol/SampleContract.avpr (88%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst => Sample.Serialization.MessagesAvro}/MultiplyRequest.cs (80%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst => Sample.Serialization.MessagesAvro}/README.md (100%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst/Sample.AvroSer.Messages.ContractFirst.csproj => Sample.Serialization.MessagesAvro/Sample.Serialization.MessagesAvro.csproj} (78%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst => Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro}/AddCommand.cs (82%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst => Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro}/MultiplyRequest.cs (82%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst => Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro}/MultiplyResponse.cs (82%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst => Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro}/SampleProtocol.cs (51%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst => Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro}/SampleProtocolCallback.cs (89%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst => Sample.Serialization.MessagesAvro}/Tools/.gitignore (100%) rename src/Samples/{Sample.AvroSer.Messages.ContractFirst => Sample.Serialization.MessagesAvro}/Tools/gen.ps1 (69%) delete mode 100644 src/SlimMessageBus.Host.Serialization.AvroConvert/AvroConvertMessageSerializer.cs delete mode 100644 src/SlimMessageBus.Host.Serialization.AvroConvert/README.md delete mode 100644 src/SlimMessageBus.Host.Serialization.AvroConvert/SlimMessageBus.Host.Serialization.AvroConvert.csproj rename src/{SlimMessageBus.Host.Serialization.Routing/RoutingMessageSerializer.cs => SlimMessageBus.Host.Serialization.Hybrid/HybridMessageSerializer.cs} (88%) rename src/{SlimMessageBus.Host.Serialization.Routing => SlimMessageBus.Host.Serialization.Hybrid}/README.md (100%) rename src/{SlimMessageBus.Host.Serialization.Routing/SlimMessageBus.Host.Serialization.Routing.csproj => SlimMessageBus.Host.Serialization.Hybrid/SlimMessageBus.Host.Serialization.Hybrid.csproj} (84%) diff --git a/README.md b/README.md index 272ac9ee..1e80cbcb 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ SlimMessageBus is a client façade for message brokers for .NET. It comes with i * [Azure EventHubs](docs/provider_azure_eventhubs.md) * [Redis](docs/provider_redis.md) * [Memory](docs/provider_memory.md) +* [Serialization Plugins](docs/serialization.md) ## Packages @@ -46,10 +47,9 @@ SlimMessageBus is a client façade for message brokers for .NET. It comes with i | `SlimMessageBus.Host.Redis` | Transport provider for Redis | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Redis.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Redis) | | `SlimMessageBus.Host.Memory` | Transport provider implementation for in-process (in memory) message passing (no messaging infrastructure required) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Memory.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Memory) | | **Serialization** | | | -| `SlimMessageBus.Host.Serialization.Json` | Message serialization adapter for JSON (Json.NET) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Serialization.Json.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Json) | -| `SlimMessageBus.Host.Serialization.Avro` | Message serialization adapter for Avro (Apache.Avro library) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Serialization.Avro.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Avro) | -| `SlimMessageBus.Host.Serialization.AvroConvert` | Message serialization adapter for Avro (AvroConvert library) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Serialization.AvroConvert.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.AvroConvert) | -| `SlimMessageBus.Host.Serialization.Routing` | Serialization router that delegates serialization to other serializers based on message type | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Serialization.Routing.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Routing) | +| `SlimMessageBus.Host.Serialization.Json` | Serialization plugin for JSON (Json.NET library) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Serialization.Json.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Json) | +| `SlimMessageBus.Host.Serialization.Avro` | Serialization plugin for Avro (Apache.Avro library) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Serialization.Avro.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Avro) | +| `SlimMessageBus.Host.Serialization.Hybrid` | Plugin that delegates serialization to other serializers based on message type | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Serialization.Hybrid.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Hybrid) | | **Container** | | | | `SlimMessageBus.Host.AspNetCore` | Integration for ASP.NET Core 2.x (DI adapter, config helpers) | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.AspNetCore.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.AspNetCore) | | `SlimMessageBus.Host.Autofac` | DI adapter for Autofac container | [![NuGet](https://img.shields.io/nuget/v/SlimMessageBus.Host.Autofac.svg)](https://www.nuget.org/packages/SlimMessageBus.Host.Autofac) | diff --git a/build/tasks.ps1 b/build/tasks.ps1 index 2cc8d905..954f0681 100644 --- a/build/tasks.ps1 +++ b/build/tasks.ps1 @@ -12,10 +12,9 @@ $projects = @( "SlimMessageBus", "SlimMessageBus.Host", "SlimMessageBus.Host.Serialization", - "SlimMessageBus.Host.Serialization.Routing", + "SlimMessageBus.Host.Serialization.Hybrid", "SlimMessageBus.Host.Serialization.Json", "SlimMessageBus.Host.Serialization.Avro", - "SlimMessageBus.Host.Serialization.AvroConvert", "SlimMessageBus.Host.DependencyResolver", "SlimMessageBus.Host.ServiceLocator", "SlimMessageBus.Host.Autofac", diff --git a/docs/serialization.md b/docs/serialization.md new file mode 100644 index 00000000..bd145802 --- /dev/null +++ b/docs/serialization.md @@ -0,0 +1,24 @@ +# Serialization plugins for SlimMessageBus + +## Introduction + +Please read the [Introduction](intro.md) before reading this serialization documentation. + +## Json + +Nuget package: [SlimMessageBus.Host.Serialization.Json](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Json) + +> ToDo + +## Avro + +Nuget package: [SlimMessageBus.Host.Serialization.Avro](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Avro) + +> ToDo + +## Hybrid + +Nuget package: [SlimMessageBus.Host.Serialization.Hybrid](https://www.nuget.org/packages/SlimMessageBus.Host.Serialization.Hybrid) + +> ToDo + diff --git a/src/Samples/Sample.AvroSer.Messages.CodeFirst/DivideRequest.cs b/src/Samples/Sample.AvroSer.Messages.CodeFirst/DivideRequest.cs deleted file mode 100644 index d865ba17..00000000 --- a/src/Samples/Sample.AvroSer.Messages.CodeFirst/DivideRequest.cs +++ /dev/null @@ -1,11 +0,0 @@ -using SlimMessageBus; - -namespace Sample.AvroSer.Messages.CodeFirst -{ - public class DivideRequest : IRequestMessage - { - public string OperationId { get; set; } - public int Left { get; set; } - public int Right { get; set; } - } -} diff --git a/src/Samples/Sample.AvroSer.Messages.CodeFirst/DivideResponse.cs b/src/Samples/Sample.AvroSer.Messages.CodeFirst/DivideResponse.cs deleted file mode 100644 index 222c1dbb..00000000 --- a/src/Samples/Sample.AvroSer.Messages.CodeFirst/DivideResponse.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Sample.AvroSer.Messages.CodeFirst -{ - public class DivideResponse - { - public string OperationId { get; set; } - public int Result { get; set; } - } -} diff --git a/src/Samples/Sample.AvroSer.Messages.CodeFirst/README.md b/src/Samples/Sample.AvroSer.Messages.CodeFirst/README.md deleted file mode 100644 index c9eff956..00000000 --- a/src/Samples/Sample.AvroSer.Messages.CodeFirst/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# What - -This shows the C# code first apprach for using Avro serialization. -We define plain C# classes, then the AvroConvert library generates the schema at runtime. - diff --git a/src/Samples/Sample.AvroSer.Messages.CodeFirst/Sample.AvroSer.Messages.CodeFirst.csproj b/src/Samples/Sample.AvroSer.Messages.CodeFirst/Sample.AvroSer.Messages.CodeFirst.csproj deleted file mode 100644 index aa493439..00000000 --- a/src/Samples/Sample.AvroSer.Messages.CodeFirst/Sample.AvroSer.Messages.CodeFirst.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - netstandard2.0 - - - - - - - diff --git a/src/Samples/Sample.AvroSer.Messages.CodeFirst/SubtractCommand.cs b/src/Samples/Sample.AvroSer.Messages.CodeFirst/SubtractCommand.cs deleted file mode 100644 index 3ed80804..00000000 --- a/src/Samples/Sample.AvroSer.Messages.CodeFirst/SubtractCommand.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Sample.AvroSer.Messages.CodeFirst -{ - public class SubtractCommand - { - public string OperationId { get; set; } - public int Left { get; set; } - public int Right { get; set; } - } -} \ No newline at end of file diff --git a/src/Samples/Sample.AvroSer.ConsoleApp/Program.cs b/src/Samples/Sample.Serialization.ConsoleApp/Program.cs similarity index 80% rename from src/Samples/Sample.AvroSer.ConsoleApp/Program.cs rename to src/Samples/Sample.Serialization.ConsoleApp/Program.cs index 7f45924f..813b1100 100644 --- a/src/Samples/Sample.AvroSer.ConsoleApp/Program.cs +++ b/src/Samples/Sample.Serialization.ConsoleApp/Program.cs @@ -1,18 +1,15 @@ using Microsoft.Extensions.Configuration; -using Sample.AvroSer.Messages.ContractFirst; -using Sample.AvroSer.Messages.CodeFirst; +using Sample.Serialization.MessagesAvro; using SecretStore; using SlimMessageBus; using SlimMessageBus.Host.Config; using SlimMessageBus.Host.DependencyResolver; -using SlimMessageBus.Host.Kafka; -using SlimMessageBus.Host.Kafka.Configs; using SlimMessageBus.Host.Memory; using SlimMessageBus.Host.Redis; using SlimMessageBus.Host.Serialization; using SlimMessageBus.Host.Serialization.Avro; -using SlimMessageBus.Host.Serialization.AvroConvert; -using SlimMessageBus.Host.Serialization.Routing; +using SlimMessageBus.Host.Serialization.Hybrid; +using SlimMessageBus.Host.Serialization.Json; using System; using System.Collections.Generic; using System.Threading; @@ -22,7 +19,7 @@ namespace Sample.Avro.ConsoleApp { enum Provider { - Kafka, + //Kafka, //AzureServiceBus, //AzureEventHub, Redis, @@ -31,9 +28,8 @@ enum Provider /// /// This sample shows: - /// 1. How tu use the Avro serializer (for contract IDL first apprach) - /// 2. How to use the AvroConvert serializer (for C# code first approach) - /// 3. How to combine two serializer approaches in one app (using the Routing serializer). + /// 1. How tu use the Avro serializer (for contract Avro IDL first apprach to generate C# code) + /// 2. How to combine two serializer approaches in one app (using the Hybrid serializer). /// class Program { @@ -53,7 +49,7 @@ static async Task Main(string[] args) private static IMessageBus CreateBus(IConfiguration configuration) { // Note: remember that Memory provider does not support req-resp yet. - var provider = Provider.Memory; + var provider = Provider.Redis; /* var sl = new DictionarySchemaLookupStrategy(); @@ -76,34 +72,27 @@ private static IMessageBus CreateBus(IConfiguration configuration) var avroSerializer = new AvroMessageSerializer(); // Avro serialized using the AvroConvert library - no schema generation neeeded upfront. - var avroConvertSerializer = new AvroConvertMessageSerializer(); + var jsonSerializer = new JsonMessageSerializer(); - // Note: Certain messages will be serialized by one Avro serializer, other using the other Avro serializer - var routingSerializer = new RoutingMessageSerializer(new Dictionary + // Note: Certain messages will be serialized by one Avro serializer, other using the Json serializer + var routingSerializer = new HybridMessageSerializer(new Dictionary { - [avroConvertSerializer] = new Type[] { typeof(SubtractCommand) }, // the first one will be the default serializer, no need to declare types here - [avroSerializer] = new Type[] { typeof(AddCommand), typeof(MultiplyRequest), typeof(MultiplyResponse) }, + [jsonSerializer] = new[] { typeof(SubtractCommand) }, // the first one will be the default serializer, no need to declare types here + [avroSerializer] = new[] { typeof(AddCommand), typeof(MultiplyRequest), typeof(MultiplyResponse) }, }); return MessageBusBuilder.Create() .Produce(x => x.DefaultTopic("AddCommand")) - .Consume(x => x.Topic("AddCommand").WithConsumer() - .Group("ConsoleApp") // for Kafka only - ) + .Consume(x => x.Topic("AddCommand").WithConsumer()) .Produce(x => x.DefaultTopic("SubtractCommand")) - .Consume(x => x.Topic("SubtractCommand").WithConsumer() - .Group("ConsoleApp") // for Kafka only - ) + .Consume(x => x.Topic("SubtractCommand").WithConsumer()) .Produce(x => x.DefaultTopic("MultiplyRequest")) - .Handle(x => x.Topic("MultiplyRequest").WithHandler() - .Group("ConsoleApp") // for Kafka only - ) + .Handle(x => x.Topic("MultiplyRequest").WithHandler()) - .ExpectRequestResponses(x => x.ReplyToTopic("ConsoleApp") - .Group("ConsoleApp") // for Kafka only - ) + + .ExpectRequestResponses(x => x.ReplyToTopic("ConsoleApp")) .WithSerializer(routingSerializer) // Use Avro for message serialization .WithDependencyResolver(new LookupDependencyResolver(type => @@ -139,14 +128,14 @@ private static IMessageBus CreateBus(IConfiguration configuration) // builder.WithProviderEventHub(new EventHubMessageBusSettings(eventHubConnectionString, storageConnectionString, storageContainerName)); // Use Azure Event Hub as provider // break; - case Provider.Kafka: - // Ensure your Kafka broker is running - var kafkaBrokers = configuration["Kafka:Brokers"]; - var kafkaUsername = Secrets.Service.PopulateSecrets(configuration["Kafka:Username"]); - var kafkaPassword = Secrets.Service.PopulateSecrets(configuration["Kafka:Password"]); + //case Provider.Kafka: + // // Ensure your Kafka broker is running + // var kafkaBrokers = configuration["Kafka:Brokers"]; + // var kafkaUsername = Secrets.Service.PopulateSecrets(configuration["Kafka:Username"]); + // var kafkaPassword = Secrets.Service.PopulateSecrets(configuration["Kafka:Password"]); - builder.WithProviderKafka(new KafkaMessageBusSettings(kafkaBrokers)); // Or use Apache Kafka as provider - break; + // builder.WithProviderKafka(new KafkaMessageBusSettings(kafkaBrokers)); // Or use Apache Kafka as provider + // break; case Provider.Redis: // Ensure your Redis broker is running @@ -259,4 +248,14 @@ public async Task OnHandle(MultiplyRequest request, string nam return new MultiplyResponse { Result = request.Left * request.Right, OperationId = request.OperationId }; } } + + /// + /// This will be serialized as JSON. + /// + public class SubtractCommand + { + public string OperationId { get; set; } + public int Left { get; set; } + public int Right { get; set; } + } } \ No newline at end of file diff --git a/src/Samples/Sample.AvroSer.ConsoleApp/Sample.AvroSer.ConsoleApp.csproj b/src/Samples/Sample.Serialization.ConsoleApp/Sample.Serialization.ConsoleApp.csproj similarity index 72% rename from src/Samples/Sample.AvroSer.ConsoleApp/Sample.AvroSer.ConsoleApp.csproj rename to src/Samples/Sample.Serialization.ConsoleApp/Sample.Serialization.ConsoleApp.csproj index a7b967e9..4c7ee303 100644 --- a/src/Samples/Sample.AvroSer.ConsoleApp/Sample.AvroSer.ConsoleApp.csproj +++ b/src/Samples/Sample.Serialization.ConsoleApp/Sample.Serialization.ConsoleApp.csproj @@ -1,4 +1,4 @@ - + Exe @@ -6,7 +6,6 @@ - @@ -17,12 +16,11 @@ - - + + - - + diff --git a/src/Samples/Sample.AvroSer.ConsoleApp/appsettings.json b/src/Samples/Sample.Serialization.ConsoleApp/appsettings.json similarity index 100% rename from src/Samples/Sample.AvroSer.ConsoleApp/appsettings.json rename to src/Samples/Sample.Serialization.ConsoleApp/appsettings.json diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/AddCommand.avdl b/src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/AddCommand.avdl similarity index 62% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/AddCommand.avdl rename to src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/AddCommand.avdl index f721a592..c594de1e 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/AddCommand.avdl +++ b/src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/AddCommand.avdl @@ -1,4 +1,4 @@ -@namespace("Sample.AvroSer.Messages.ContractFirst") +@namespace("Sample.Serialization.MessagesAvro") protocol SampleProtocol { diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/MultiplyRequest.avdl b/src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/MultiplyRequest.avdl similarity index 72% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/MultiplyRequest.avdl rename to src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/MultiplyRequest.avdl index e92ff76b..fcb0a037 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/MultiplyRequest.avdl +++ b/src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/MultiplyRequest.avdl @@ -1,4 +1,4 @@ -@namespace("Sample.AvroSer.Messages.ContractFirst") +@namespace("Sample.Serialization.MessagesAvro") protocol SampleProtocol { diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/SampleContract.avdl b/src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/SampleContract.avdl similarity index 63% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/SampleContract.avdl rename to src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/SampleContract.avdl index 82801287..f5f307a9 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-IDL/SampleContract.avdl +++ b/src/Samples/Sample.Serialization.MessagesAvro/Contract-IDL/SampleContract.avdl @@ -1,4 +1,4 @@ -@namespace("Sample.AvroSer.Messages.ContractFirst") +@namespace("Sample.Serialization.MessagesAvro") protocol SampleProtocol { import idl "AddCommand.avdl"; diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-Protocol/SampleContract.avpr b/src/Samples/Sample.Serialization.MessagesAvro/Contract-Protocol/SampleContract.avpr similarity index 88% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-Protocol/SampleContract.avpr rename to src/Samples/Sample.Serialization.MessagesAvro/Contract-Protocol/SampleContract.avpr index 43d0369e..772af51e 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Contract-Protocol/SampleContract.avpr +++ b/src/Samples/Sample.Serialization.MessagesAvro/Contract-Protocol/SampleContract.avpr @@ -1,6 +1,6 @@ { "protocol" : "SampleProtocol", - "namespace" : "Sample.AvroSer.Messages.ContractFirst", + "namespace" : "Sample.Serialization.MessagesAvro", "types" : [ { "type" : "record", "name" : "AddCommand", diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/MultiplyRequest.cs b/src/Samples/Sample.Serialization.MessagesAvro/MultiplyRequest.cs similarity index 80% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/MultiplyRequest.cs rename to src/Samples/Sample.Serialization.MessagesAvro/MultiplyRequest.cs index 4ad61378..ded75016 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/MultiplyRequest.cs +++ b/src/Samples/Sample.Serialization.MessagesAvro/MultiplyRequest.cs @@ -1,6 +1,6 @@ using SlimMessageBus; -namespace Sample.AvroSer.Messages.ContractFirst +namespace Sample.Serialization.MessagesAvro { /// /// Adds the marker interface to the generated class . diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/README.md b/src/Samples/Sample.Serialization.MessagesAvro/README.md similarity index 100% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/README.md rename to src/Samples/Sample.Serialization.MessagesAvro/README.md diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample.AvroSer.Messages.ContractFirst.csproj b/src/Samples/Sample.Serialization.MessagesAvro/Sample.Serialization.MessagesAvro.csproj similarity index 78% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample.AvroSer.Messages.ContractFirst.csproj rename to src/Samples/Sample.Serialization.MessagesAvro/Sample.Serialization.MessagesAvro.csproj index 506ba7b1..0ac124c9 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample.AvroSer.Messages.ContractFirst.csproj +++ b/src/Samples/Sample.Serialization.MessagesAvro/Sample.Serialization.MessagesAvro.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/AddCommand.cs b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/AddCommand.cs similarity index 82% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/AddCommand.cs rename to src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/AddCommand.cs index f523c105..1d121814 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/AddCommand.cs +++ b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/AddCommand.cs @@ -5,7 +5,7 @@ // is regenerated // // ------------------------------------------------------------------------------ -namespace Sample.AvroSer.Messages.ContractFirst +namespace Sample.Serialization.MessagesAvro { using System; using System.Collections.Generic; @@ -15,9 +15,9 @@ namespace Sample.AvroSer.Messages.ContractFirst public partial class AddCommand : ISpecificRecord { - public static Schema _SCHEMA = Avro.Schema.Parse("{\"type\":\"record\",\"name\":\"AddCommand\",\"namespace\":\"Sample.AvroSer.Messages.Contrac" + - "tFirst\",\"fields\":[{\"name\":\"OperationId\",\"type\":\"string\"},{\"name\":\"Left\",\"type\":\"" + - "int\"},{\"name\":\"Right\",\"type\":\"int\"}]}"); + public static Schema _SCHEMA = Avro.Schema.Parse("{\"type\":\"record\",\"name\":\"AddCommand\",\"namespace\":\"Sample.Serialization.MessagesAv" + + "ro\",\"fields\":[{\"name\":\"OperationId\",\"type\":\"string\"},{\"name\":\"Left\",\"type\":\"int\"" + + "},{\"name\":\"Right\",\"type\":\"int\"}]}"); private string _OperationId; private int _Left; private int _Right; diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/MultiplyRequest.cs b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/MultiplyRequest.cs similarity index 82% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/MultiplyRequest.cs rename to src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/MultiplyRequest.cs index d2902990..f2ac94a7 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/MultiplyRequest.cs +++ b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/MultiplyRequest.cs @@ -5,7 +5,7 @@ // is regenerated // // ------------------------------------------------------------------------------ -namespace Sample.AvroSer.Messages.ContractFirst +namespace Sample.Serialization.MessagesAvro { using System; using System.Collections.Generic; @@ -15,9 +15,9 @@ namespace Sample.AvroSer.Messages.ContractFirst public partial class MultiplyRequest : ISpecificRecord { - public static Schema _SCHEMA = Avro.Schema.Parse("{\"type\":\"record\",\"name\":\"MultiplyRequest\",\"namespace\":\"Sample.AvroSer.Messages.Co" + - "ntractFirst\",\"fields\":[{\"name\":\"OperationId\",\"type\":\"string\"},{\"name\":\"Left\",\"ty" + - "pe\":\"int\"},{\"name\":\"Right\",\"type\":\"int\"}]}"); + public static Schema _SCHEMA = Avro.Schema.Parse("{\"type\":\"record\",\"name\":\"MultiplyRequest\",\"namespace\":\"Sample.Serialization.Messa" + + "gesAvro\",\"fields\":[{\"name\":\"OperationId\",\"type\":\"string\"},{\"name\":\"Left\",\"type\":" + + "\"int\"},{\"name\":\"Right\",\"type\":\"int\"}]}"); private string _OperationId; private int _Left; private int _Right; diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/MultiplyResponse.cs b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/MultiplyResponse.cs similarity index 82% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/MultiplyResponse.cs rename to src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/MultiplyResponse.cs index 84b1f815..f2198144 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/MultiplyResponse.cs +++ b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/MultiplyResponse.cs @@ -5,7 +5,7 @@ // is regenerated // // ------------------------------------------------------------------------------ -namespace Sample.AvroSer.Messages.ContractFirst +namespace Sample.Serialization.MessagesAvro { using System; using System.Collections.Generic; @@ -15,9 +15,9 @@ namespace Sample.AvroSer.Messages.ContractFirst public partial class MultiplyResponse : ISpecificRecord { - public static Schema _SCHEMA = Avro.Schema.Parse("{\"type\":\"record\",\"name\":\"MultiplyResponse\",\"namespace\":\"Sample.AvroSer.Messages.C" + - "ontractFirst\",\"fields\":[{\"name\":\"OperationId\",\"type\":\"string\"},{\"name\":\"Result\"," + - "\"type\":\"int\"}]}"); + public static Schema _SCHEMA = Avro.Schema.Parse("{\"type\":\"record\",\"name\":\"MultiplyResponse\",\"namespace\":\"Sample.Serialization.Mess" + + "agesAvro\",\"fields\":[{\"name\":\"OperationId\",\"type\":\"string\"},{\"name\":\"Result\",\"typ" + + "e\":\"int\"}]}"); private string _OperationId; private int _Result; public virtual Schema Schema diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/SampleProtocol.cs b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/SampleProtocol.cs similarity index 51% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/SampleProtocol.cs rename to src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/SampleProtocol.cs index 0e45e054..6e0e7bad 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/SampleProtocol.cs +++ b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/SampleProtocol.cs @@ -5,7 +5,7 @@ // is regenerated // // ------------------------------------------------------------------------------ -namespace Sample.AvroSer.Messages.ContractFirst +namespace Sample.Serialization.MessagesAvro { using System; using System.Collections.Generic; @@ -15,7 +15,7 @@ namespace Sample.AvroSer.Messages.ContractFirst public abstract class SampleProtocol : Avro.Specific.ISpecificProtocol { - private static readonly Avro.Protocol protocol = Avro.Protocol.Parse(@"{""protocol"":""SampleProtocol"",""namespace"":""Sample.AvroSer.Messages.ContractFirst"",""types"":[{""type"":""record"",""name"":""AddCommand"",""namespace"":""Sample.AvroSer.Messages.ContractFirst"",""fields"":[{""name"":""OperationId"",""type"":""string""},{""name"":""Left"",""type"":""int""},{""name"":""Right"",""type"":""int""}]},{""type"":""record"",""name"":""MultiplyRequest"",""namespace"":""Sample.AvroSer.Messages.ContractFirst"",""fields"":[{""name"":""OperationId"",""type"":""string""},{""name"":""Left"",""type"":""int""},{""name"":""Right"",""type"":""int""}]},{""type"":""record"",""name"":""MultiplyResponse"",""namespace"":""Sample.AvroSer.Messages.ContractFirst"",""fields"":[{""name"":""OperationId"",""type"":""string""},{""name"":""Result"",""type"":""int""}]}],""messages"":{}}"); + private static readonly Avro.Protocol protocol = Avro.Protocol.Parse(@"{""protocol"":""SampleProtocol"",""namespace"":""Sample.Serialization.MessagesAvro"",""types"":[{""type"":""record"",""name"":""AddCommand"",""namespace"":""Sample.Serialization.MessagesAvro"",""fields"":[{""name"":""OperationId"",""type"":""string""},{""name"":""Left"",""type"":""int""},{""name"":""Right"",""type"":""int""}]},{""type"":""record"",""name"":""MultiplyRequest"",""namespace"":""Sample.Serialization.MessagesAvro"",""fields"":[{""name"":""OperationId"",""type"":""string""},{""name"":""Left"",""type"":""int""},{""name"":""Right"",""type"":""int""}]},{""type"":""record"",""name"":""MultiplyResponse"",""namespace"":""Sample.Serialization.MessagesAvro"",""fields"":[{""name"":""OperationId"",""type"":""string""},{""name"":""Result"",""type"":""int""}]}],""messages"":{}}"); public Avro.Protocol Protocol { get diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/SampleProtocolCallback.cs b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/SampleProtocolCallback.cs similarity index 89% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/SampleProtocolCallback.cs rename to src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/SampleProtocolCallback.cs index 8ec6f339..6b8d5650 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Sample/AvroSer/Messages/ContractFirst/SampleProtocolCallback.cs +++ b/src/Samples/Sample.Serialization.MessagesAvro/Sample/Serialization/MessagesAvro/SampleProtocolCallback.cs @@ -5,7 +5,7 @@ // is regenerated // // ------------------------------------------------------------------------------ -namespace Sample.AvroSer.Messages.ContractFirst +namespace Sample.Serialization.MessagesAvro { using System; using System.Collections.Generic; diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Tools/.gitignore b/src/Samples/Sample.Serialization.MessagesAvro/Tools/.gitignore similarity index 100% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Tools/.gitignore rename to src/Samples/Sample.Serialization.MessagesAvro/Tools/.gitignore diff --git a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Tools/gen.ps1 b/src/Samples/Sample.Serialization.MessagesAvro/Tools/gen.ps1 similarity index 69% rename from src/Samples/Sample.AvroSer.Messages.ContractFirst/Tools/gen.ps1 rename to src/Samples/Sample.Serialization.MessagesAvro/Tools/gen.ps1 index 368e00b9..a0deb737 100644 --- a/src/Samples/Sample.AvroSer.Messages.ContractFirst/Tools/gen.ps1 +++ b/src/Samples/Sample.Serialization.MessagesAvro/Tools/gen.ps1 @@ -5,12 +5,13 @@ # $FILE = 'avro-tools.jar' -$VERSION = '1.9.1' +$VERSION = '1.9.2' # download the avro tools (if havent done so already) if(!(Test-Path -Path $FILE -PathType leaf)) { - wget "http://apache.mirrors.tworzy.net/avro/avro-$VERSION/java/avro-tools-$VERSION.jar" -outfile $FILE + # if the link doesn't work check latest mirror link here: http://avro.apache.org/releases.html#Download + wget "http://archive.apache.org/dist/avro/avro-$VERSION/java/avro-tools-$VERSION.jar" -outfile $FILE } Remove-Item –path ../Contract-Protocol/* -Filter *.avpr diff --git a/src/SlimMessageBus.Host.Serialization.Avro/SlimMessageBus.Host.Serialization.Avro.csproj b/src/SlimMessageBus.Host.Serialization.Avro/SlimMessageBus.Host.Serialization.Avro.csproj index 2efaddc4..f0ead358 100644 --- a/src/SlimMessageBus.Host.Serialization.Avro/SlimMessageBus.Host.Serialization.Avro.csproj +++ b/src/SlimMessageBus.Host.Serialization.Avro/SlimMessageBus.Host.Serialization.Avro.csproj @@ -2,11 +2,11 @@ netstandard2.0 - 1.0.0-beta4 + 1.0.0 zarusz zarusz SlimMessageBus - Extension to SlimMessageBus that provides Apache Avro serialization + Plugin for SlimMessageBus that provides Apache.Avro serialization. Copyright © 2020 https://github.com/zarusz/SlimMessageBus https://github.com/zarusz/SlimMessageBus @@ -19,7 +19,7 @@ - + diff --git a/src/SlimMessageBus.Host.Serialization.AvroConvert/AvroConvertMessageSerializer.cs b/src/SlimMessageBus.Host.Serialization.AvroConvert/AvroConvertMessageSerializer.cs deleted file mode 100644 index 97349dbb..00000000 --- a/src/SlimMessageBus.Host.Serialization.AvroConvert/AvroConvertMessageSerializer.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Common.Logging; -using SolTechnology.Avro.Codec; -using System; -using System.Globalization; -using System.Reflection; - -namespace SlimMessageBus.Host.Serialization.AvroConvert -{ - /// - /// AvroConvert library serialization implementation of - /// - public class AvroConvertMessageSerializer : IMessageSerializer - { - private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - private readonly CodecType _codecType; - - public AvroConvertMessageSerializer(CodecType codecType) - { - _codecType = codecType; - } - - public AvroConvertMessageSerializer() - : this(CodecType.Null) - { - } - - #region Implementation of IMessageSerializer - - public byte[] Serialize(Type t, object message) - { - var payload = SolTechnology.Avro.AvroConvert.Serialize(message); - Log.DebugFormat(CultureInfo.InvariantCulture, "Type {0} serialized from {1} to Avro bytes (size {2})", t, message, payload.Length); - return payload; - } - - public object Deserialize(Type t, byte[] payload) - { - var message = SolTechnology.Avro.AvroConvert.Deserialize(payload, t); - Log.DebugFormat(CultureInfo.InvariantCulture, "Type {0} deserialized from Avro bytes (size {2}) to {1}", t, message, payload.Length); - return message; - } - - #endregion - } -} diff --git a/src/SlimMessageBus.Host.Serialization.AvroConvert/README.md b/src/SlimMessageBus.Host.Serialization.AvroConvert/README.md deleted file mode 100644 index 909cd51a..00000000 --- a/src/SlimMessageBus.Host.Serialization.AvroConvert/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# What - -Message serialization for Avro based on the [AvroConvert](https://github.com/AdrianStrugala/AvroConvert) library. - diff --git a/src/SlimMessageBus.Host.Serialization.AvroConvert/SlimMessageBus.Host.Serialization.AvroConvert.csproj b/src/SlimMessageBus.Host.Serialization.AvroConvert/SlimMessageBus.Host.Serialization.AvroConvert.csproj deleted file mode 100644 index 6ac4c653..00000000 --- a/src/SlimMessageBus.Host.Serialization.AvroConvert/SlimMessageBus.Host.Serialization.AvroConvert.csproj +++ /dev/null @@ -1,36 +0,0 @@ - - - - netstandard2.0 - Extension to SlimMessageBus that provides Avro serialization based on the AvroConvert library - SlimMessageBus - Copyright © 2020 - https://github.com/zarusz/SlimMessageBus - https://github.com/zarusz/SlimMessageBus - SlimMessageBus Avro Apache Serialization messaging AvroConvert - See https://github.com/zarusz/SlimMessageBus/releases - 1.0.0-beta4 - zarusz - true - icon.png - - Apache-2.0 - - - - - - - - - - True - - - - - - - - - diff --git a/src/SlimMessageBus.Host.Serialization.Routing/RoutingMessageSerializer.cs b/src/SlimMessageBus.Host.Serialization.Hybrid/HybridMessageSerializer.cs similarity index 88% rename from src/SlimMessageBus.Host.Serialization.Routing/RoutingMessageSerializer.cs rename to src/SlimMessageBus.Host.Serialization.Hybrid/HybridMessageSerializer.cs index 5eeae9a1..f0dab841 100644 --- a/src/SlimMessageBus.Host.Serialization.Routing/RoutingMessageSerializer.cs +++ b/src/SlimMessageBus.Host.Serialization.Hybrid/HybridMessageSerializer.cs @@ -4,12 +4,12 @@ using System.Globalization; using System.Reflection; -namespace SlimMessageBus.Host.Serialization.Routing +namespace SlimMessageBus.Host.Serialization.Hybrid { /// /// implementation that delegates (routes) the serialization to the respective serializer based on message type. /// - public class RoutingMessageSerializer : IMessageSerializer + public class HybridMessageSerializer : IMessageSerializer { private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -17,11 +17,11 @@ public class RoutingMessageSerializer : IMessageSerializer private readonly IDictionary _serializerByType = new Dictionary(); public IMessageSerializer DefaultSerializer { get; set; } - public RoutingMessageSerializer() + public HybridMessageSerializer() { } - public RoutingMessageSerializer(IDictionary registration) + public HybridMessageSerializer(IDictionary registration) { foreach (var entry in registration) { diff --git a/src/SlimMessageBus.Host.Serialization.Routing/README.md b/src/SlimMessageBus.Host.Serialization.Hybrid/README.md similarity index 100% rename from src/SlimMessageBus.Host.Serialization.Routing/README.md rename to src/SlimMessageBus.Host.Serialization.Hybrid/README.md diff --git a/src/SlimMessageBus.Host.Serialization.Routing/SlimMessageBus.Host.Serialization.Routing.csproj b/src/SlimMessageBus.Host.Serialization.Hybrid/SlimMessageBus.Host.Serialization.Hybrid.csproj similarity index 84% rename from src/SlimMessageBus.Host.Serialization.Routing/SlimMessageBus.Host.Serialization.Routing.csproj rename to src/SlimMessageBus.Host.Serialization.Hybrid/SlimMessageBus.Host.Serialization.Hybrid.csproj index 7fbf8063..2b194b0c 100644 --- a/src/SlimMessageBus.Host.Serialization.Routing/SlimMessageBus.Host.Serialization.Routing.csproj +++ b/src/SlimMessageBus.Host.Serialization.Hybrid/SlimMessageBus.Host.Serialization.Hybrid.csproj @@ -4,8 +4,8 @@ netstandard2.0 zarusz zarusz - 1.0.0-beta4 - Extension to SlimMessageBus that routes serialization to the respective serialization plugin based on message type. + 1.0.0 + Extension to SlimMessageBus that delegates serialization to the respective serialization plugin based on message type. Copyright © 2020 SlimMessageBus https://github.com/zarusz/SlimMessageBus diff --git a/src/SlimMessageBus.Host.Serialization.Json/SlimMessageBus.Host.Serialization.Json.csproj b/src/SlimMessageBus.Host.Serialization.Json/SlimMessageBus.Host.Serialization.Json.csproj index 72d37ac9..3e405acb 100644 --- a/src/SlimMessageBus.Host.Serialization.Json/SlimMessageBus.Host.Serialization.Json.csproj +++ b/src/SlimMessageBus.Host.Serialization.Json/SlimMessageBus.Host.Serialization.Json.csproj @@ -2,14 +2,14 @@ netstandard2.0 - Extension to SlimMessageBus that provides JSON serialization based on the Json.NET library + Plugin for SlimMessageBus that provides JSON serialization based on the Json.NET library Copyright © 2020 zarusz zarusz SlimMessageBus JSON Serialization messaging See https://github.com/zarusz/SlimMessageBus/releases SlimMessageBus - 1.3.5 + 1.3.6 https://github.com/zarusz/SlimMessageBus diff --git a/src/SlimMessageBus.sln b/src/SlimMessageBus.sln index 44d9f5d7..46f9a96e 100644 --- a/src/SlimMessageBus.sln +++ b/src/SlimMessageBus.sln @@ -123,17 +123,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.AvroSer.ConsoleApp", "Samples\Sample.AvroSer.ConsoleApp\Sample.AvroSer.ConsoleApp.csproj", "{14E51EED-157D-41A4-86F9-A2C5CF51EB7F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlimMessageBus.Host.Serialization.Benchmark", "Tests\SlimMessageBus.Host.Serialization.Benchmark\SlimMessageBus.Host.Serialization.Benchmark.csproj", "{88D66F27-B71C-44B6-8F73-C412FA20F065}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlimMessageBus.Host.Serialization.AvroConvert", "SlimMessageBus.Host.Serialization.AvroConvert\SlimMessageBus.Host.Serialization.AvroConvert.csproj", "{51AFCD56-86E5-4356-8E75-F03129BEDFF7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.Serialization.ConsoleApp", "Samples\Sample.Serialization.ConsoleApp\Sample.Serialization.ConsoleApp.csproj", "{7D5E4522-8D44-471B-AB01-70FC65948B36}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlimMessageBus.Host.Serialization.Routing", "SlimMessageBus.Host.Serialization.Routing\SlimMessageBus.Host.Serialization.Routing.csproj", "{1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.Serialization.MessagesAvro", "Samples\Sample.Serialization.MessagesAvro\Sample.Serialization.MessagesAvro.csproj", "{81D3FE99-67E6-40AC-A893-AAC4002A30B1}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.AvroSer.Messages.CodeFirst", "Samples\Sample.AvroSer.Messages.CodeFirst\Sample.AvroSer.Messages.CodeFirst.csproj", "{F91E0286-BFB3-47BA-AF47-DB0D8BB63630}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.AvroSer.Messages.ContractFirst", "Samples\Sample.AvroSer.Messages.ContractFirst\Sample.AvroSer.Messages.ContractFirst.csproj", "{4D982EBB-0319-489F-80E1-4C7388DB3785}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SlimMessageBus.Host.Serialization.Benchmark", "Tests\SlimMessageBus.Host.Serialization.Benchmark\SlimMessageBus.Host.Serialization.Benchmark.csproj", "{88D66F27-B71C-44B6-8F73-C412FA20F065}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlimMessageBus.Host.Serialization.Hybrid", "SlimMessageBus.Host.Serialization.Hybrid\SlimMessageBus.Host.Serialization.Hybrid.csproj", "{A6E0EF17-5D09-481A-90F9-16FC24E12AA8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -383,46 +379,6 @@ Global {6AF37CE1-4074-467B-91E2-7FA5CF6D6CB4}.Release|Any CPU.Build.0 = Release|Any CPU {6AF37CE1-4074-467B-91E2-7FA5CF6D6CB4}.Release|x86.ActiveCfg = Release|Any CPU {6AF37CE1-4074-467B-91E2-7FA5CF6D6CB4}.Release|x86.Build.0 = Release|Any CPU - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F}.Debug|x86.ActiveCfg = Debug|Any CPU - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F}.Debug|x86.Build.0 = Debug|Any CPU - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F}.Release|Any CPU.Build.0 = Release|Any CPU - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F}.Release|x86.ActiveCfg = Release|Any CPU - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F}.Release|x86.Build.0 = Release|Any CPU - {51AFCD56-86E5-4356-8E75-F03129BEDFF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51AFCD56-86E5-4356-8E75-F03129BEDFF7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51AFCD56-86E5-4356-8E75-F03129BEDFF7}.Debug|x86.ActiveCfg = Debug|Any CPU - {51AFCD56-86E5-4356-8E75-F03129BEDFF7}.Debug|x86.Build.0 = Debug|Any CPU - {51AFCD56-86E5-4356-8E75-F03129BEDFF7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51AFCD56-86E5-4356-8E75-F03129BEDFF7}.Release|Any CPU.Build.0 = Release|Any CPU - {51AFCD56-86E5-4356-8E75-F03129BEDFF7}.Release|x86.ActiveCfg = Release|Any CPU - {51AFCD56-86E5-4356-8E75-F03129BEDFF7}.Release|x86.Build.0 = Release|Any CPU - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}.Debug|x86.ActiveCfg = Debug|Any CPU - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}.Debug|x86.Build.0 = Debug|Any CPU - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}.Release|Any CPU.Build.0 = Release|Any CPU - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}.Release|x86.ActiveCfg = Release|Any CPU - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D}.Release|x86.Build.0 = Release|Any CPU - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630}.Debug|x86.ActiveCfg = Debug|Any CPU - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630}.Debug|x86.Build.0 = Debug|Any CPU - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630}.Release|Any CPU.Build.0 = Release|Any CPU - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630}.Release|x86.ActiveCfg = Release|Any CPU - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630}.Release|x86.Build.0 = Release|Any CPU - {4D982EBB-0319-489F-80E1-4C7388DB3785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D982EBB-0319-489F-80E1-4C7388DB3785}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D982EBB-0319-489F-80E1-4C7388DB3785}.Debug|x86.ActiveCfg = Debug|Any CPU - {4D982EBB-0319-489F-80E1-4C7388DB3785}.Debug|x86.Build.0 = Debug|Any CPU - {4D982EBB-0319-489F-80E1-4C7388DB3785}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D982EBB-0319-489F-80E1-4C7388DB3785}.Release|Any CPU.Build.0 = Release|Any CPU - {4D982EBB-0319-489F-80E1-4C7388DB3785}.Release|x86.ActiveCfg = Release|Any CPU - {4D982EBB-0319-489F-80E1-4C7388DB3785}.Release|x86.Build.0 = Release|Any CPU {88D66F27-B71C-44B6-8F73-C412FA20F065}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {88D66F27-B71C-44B6-8F73-C412FA20F065}.Debug|Any CPU.Build.0 = Debug|Any CPU {88D66F27-B71C-44B6-8F73-C412FA20F065}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -431,6 +387,30 @@ Global {88D66F27-B71C-44B6-8F73-C412FA20F065}.Release|Any CPU.Build.0 = Release|Any CPU {88D66F27-B71C-44B6-8F73-C412FA20F065}.Release|x86.ActiveCfg = Release|Any CPU {88D66F27-B71C-44B6-8F73-C412FA20F065}.Release|x86.Build.0 = Release|Any CPU + {7D5E4522-8D44-471B-AB01-70FC65948B36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D5E4522-8D44-471B-AB01-70FC65948B36}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D5E4522-8D44-471B-AB01-70FC65948B36}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D5E4522-8D44-471B-AB01-70FC65948B36}.Debug|x86.Build.0 = Debug|Any CPU + {7D5E4522-8D44-471B-AB01-70FC65948B36}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D5E4522-8D44-471B-AB01-70FC65948B36}.Release|Any CPU.Build.0 = Release|Any CPU + {7D5E4522-8D44-471B-AB01-70FC65948B36}.Release|x86.ActiveCfg = Release|Any CPU + {7D5E4522-8D44-471B-AB01-70FC65948B36}.Release|x86.Build.0 = Release|Any CPU + {81D3FE99-67E6-40AC-A893-AAC4002A30B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81D3FE99-67E6-40AC-A893-AAC4002A30B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81D3FE99-67E6-40AC-A893-AAC4002A30B1}.Debug|x86.ActiveCfg = Debug|Any CPU + {81D3FE99-67E6-40AC-A893-AAC4002A30B1}.Debug|x86.Build.0 = Debug|Any CPU + {81D3FE99-67E6-40AC-A893-AAC4002A30B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81D3FE99-67E6-40AC-A893-AAC4002A30B1}.Release|Any CPU.Build.0 = Release|Any CPU + {81D3FE99-67E6-40AC-A893-AAC4002A30B1}.Release|x86.ActiveCfg = Release|Any CPU + {81D3FE99-67E6-40AC-A893-AAC4002A30B1}.Release|x86.Build.0 = Release|Any CPU + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8}.Debug|x86.ActiveCfg = Debug|Any CPU + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8}.Debug|x86.Build.0 = Debug|Any CPU + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8}.Release|Any CPU.Build.0 = Release|Any CPU + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8}.Release|x86.ActiveCfg = Release|Any CPU + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -465,12 +445,10 @@ Global {FD8B70D1-7F20-424D-9012-800D9166229D} = {9291D340-B4FA-44A3-8060-C14743FB1712} {93157E11-D59A-45CE-8EFF-220048A75276} = {9F005B5C-A856-4351-8C0C-47A8B785C637} {6AF37CE1-4074-467B-91E2-7FA5CF6D6CB4} = {75BDDBB5-8DB8-4893-BD89-8FFC6C42244D} - {14E51EED-157D-41A4-86F9-A2C5CF51EB7F} = {A5B15524-93B8-4CCE-AC6D-A22984498BA0} - {51AFCD56-86E5-4356-8E75-F03129BEDFF7} = {75BDDBB5-8DB8-4893-BD89-8FFC6C42244D} - {1AFD2010-14F6-4E5D-AF23-BFF29DEFD87D} = {75BDDBB5-8DB8-4893-BD89-8FFC6C42244D} - {F91E0286-BFB3-47BA-AF47-DB0D8BB63630} = {A5B15524-93B8-4CCE-AC6D-A22984498BA0} - {4D982EBB-0319-489F-80E1-4C7388DB3785} = {A5B15524-93B8-4CCE-AC6D-A22984498BA0} {88D66F27-B71C-44B6-8F73-C412FA20F065} = {9F005B5C-A856-4351-8C0C-47A8B785C637} + {7D5E4522-8D44-471B-AB01-70FC65948B36} = {A5B15524-93B8-4CCE-AC6D-A22984498BA0} + {81D3FE99-67E6-40AC-A893-AAC4002A30B1} = {A5B15524-93B8-4CCE-AC6D-A22984498BA0} + {A6E0EF17-5D09-481A-90F9-16FC24E12AA8} = {75BDDBB5-8DB8-4893-BD89-8FFC6C42244D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {435A0D65-610C-4B84-B1AA-2C7FBE72DB80} diff --git a/src/Tests/SlimMessageBus.Host.Serialization.Benchmark/SerDesBenchmark.cs b/src/Tests/SlimMessageBus.Host.Serialization.Benchmark/SerDesBenchmark.cs index c5177f33..6c9235f6 100644 --- a/src/Tests/SlimMessageBus.Host.Serialization.Benchmark/SerDesBenchmark.cs +++ b/src/Tests/SlimMessageBus.Host.Serialization.Benchmark/SerDesBenchmark.cs @@ -2,9 +2,7 @@ using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Order; using SlimMessageBus.Host.Serialization.Avro; -using SlimMessageBus.Host.Serialization.AvroConvert; using SlimMessageBus.Host.Serialization.Json; -using SolTechnology.Avro.Codec; using System; using System.Collections.Generic; @@ -23,22 +21,19 @@ public class SerDesBenchmark new Scenario("Json", new AddCommand { OperationId = Guid.NewGuid().ToString(), Left = 100, Right = 200 }, new JsonMessageSerializer()), - new Scenario("AvroConvert_Default", - new AddCommand { OperationId = Guid.NewGuid().ToString(), Left = 100, Right = 200 }, - new AvroConvertMessageSerializer()), new Scenario("Avro_Default", - new Sample.AvroSer.Messages.ContractFirst.AddCommand { OperationId = Guid.NewGuid().ToString(), Left = 100, Right = 200 }, + new Sample.Serialization.MessagesAvro.AddCommand { OperationId = Guid.NewGuid().ToString(), Left = 100, Right = 200 }, new AvroMessageSerializer()), new Scenario("Avro_NoReflection", - new Sample.AvroSer.Messages.ContractFirst.AddCommand { OperationId = Guid.NewGuid().ToString(), Left = 100, Right = 200 }, + new Sample.Serialization.MessagesAvro.AddCommand { OperationId = Guid.NewGuid().ToString(), Left = 100, Right = 200 }, new AvroMessageSerializer( new DictionaryMessageCreationStategy(new Dictionary> { - [typeof(Sample.AvroSer.Messages.ContractFirst.AddCommand)] = () => new Sample.AvroSer.Messages.ContractFirst.AddCommand() + [typeof(Sample.Serialization.MessagesAvro.AddCommand)] = () => new Sample.Serialization.MessagesAvro.AddCommand() }), new DictionarySchemaLookupStrategy(new Dictionary { - [typeof(Sample.AvroSer.Messages.ContractFirst.AddCommand)] = Sample.AvroSer.Messages.ContractFirst.AddCommand._SCHEMA + [typeof(Sample.Serialization.MessagesAvro.AddCommand)] = Sample.Serialization.MessagesAvro.AddCommand._SCHEMA }) )) }; diff --git a/src/Tests/SlimMessageBus.Host.Serialization.Benchmark/SlimMessageBus.Host.Serialization.Benchmark.csproj b/src/Tests/SlimMessageBus.Host.Serialization.Benchmark/SlimMessageBus.Host.Serialization.Benchmark.csproj index f681b265..9e8d532e 100644 --- a/src/Tests/SlimMessageBus.Host.Serialization.Benchmark/SlimMessageBus.Host.Serialization.Benchmark.csproj +++ b/src/Tests/SlimMessageBus.Host.Serialization.Benchmark/SlimMessageBus.Host.Serialization.Benchmark.csproj @@ -10,9 +10,8 @@ - - - + +