diff --git a/.editorconfig b/.editorconfig
index 409be9c..e8cdc18 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,6 +1,14 @@
[*]
charset = utf-8
insert_final_newline = true
+end_of_line = crlf
+tab_width = 4
+indent_size = 4
+indent_style = space
[*.cs]
-charset = utf-8-bom
\ No newline at end of file
+charset = utf-8-bom
+
+[*.{yaml,yml}]
+tab_width = 2
+indent_size = 2
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f8b4fd4..cc37b08 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -10,6 +10,12 @@ jobs:
- uses: actions/checkout@v3
with:
fetch-depth: '0'
+ - name: Start RabbitMQ
+ uses: namoshek/rabbitmq-github-action@v1
+ with:
+ version: '3.12'
+ ports: '5672:5672 5552:5552'
+ plugins: rabbitmq_stream
- name: Setup .NET Core SDK 7, 8
uses: actions/setup-dotnet@v3
with:
@@ -21,7 +27,7 @@ jobs:
- name: Build .NET Solution
run: dotnet build --configuration Release --no-restore
- name: Test .NET Solution
- run: dotnet test --configuration Release --no-build --filter=Category=UnitTest --logger "trx;LogFilePrefix=test-results"
+ run: dotnet test --configuration Release --no-build --filter="Category=UnitTest|Category=IntegrationTest" --logger "trx;LogFilePrefix=test-results"
- uses: actions/upload-artifact@v2
if: success() || failure()
with:
diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml
index dc41381..8db3f28 100644
--- a/.github/workflows/sonarcloud.yml
+++ b/.github/workflows/sonarcloud.yml
@@ -75,9 +75,9 @@ jobs:
dotnet test `
--configuration Release `
--no-build `
- --filter=Category=UnitTest `
+ --filter="Category=UnitTest|Category=IntegrationTest" `
--collect "XPlat Code Coverage" `
--results-directory TestResults/ `
--logger "trx;LogFilePrefix=test-results" `
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
- .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}"
+ .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
diff --git a/Directory.Build.props b/Directory.Build.props
index ec258df..623e32f 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,11 +1,47 @@
- net7.0
+ true
+ net8.0;net7.0
enable
enable
true
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 18cebac..a0fdcbd 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -1,38 +1,42 @@
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Escendit.Orleans.Streaming.RabbitMQ.sln b/Escendit.Orleans.Streaming.RabbitMQ.sln
deleted file mode 100644
index 8fe2747..0000000
--- a/Escendit.Orleans.Streaming.RabbitMQ.sln
+++ /dev/null
@@ -1,36 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.31903.59
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{EFD3DA34-B04F-4C90-B3E0-BEB2402B2D6A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Escendit.Orleans.Streaming.RabbitMQ", "src\Escendit.Orleans.Streaming.RabbitMQ\Escendit.Orleans.Streaming.RabbitMQ.csproj", "{A5BAACBF-4FA9-4720-B73D-D6DE7DB33815}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A5880995-120F-422E-9B46-4302F74C87FE}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Escendit.Orleans.Streaming.RabbitMQ.Tests", "test\Escendit.Orleans.Streaming.RabbitMQ.Tests\Escendit.Orleans.Streaming.RabbitMQ.Tests.csproj", "{D73F5B22-EF89-48F6-8538-A23B1A22B052}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {A5BAACBF-4FA9-4720-B73D-D6DE7DB33815} = {EFD3DA34-B04F-4C90-B3E0-BEB2402B2D6A}
- {D73F5B22-EF89-48F6-8538-A23B1A22B052} = {A5880995-120F-422E-9B46-4302F74C87FE}
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {A5BAACBF-4FA9-4720-B73D-D6DE7DB33815}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A5BAACBF-4FA9-4720-B73D-D6DE7DB33815}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A5BAACBF-4FA9-4720-B73D-D6DE7DB33815}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A5BAACBF-4FA9-4720-B73D-D6DE7DB33815}.Release|Any CPU.Build.0 = Release|Any CPU
- {D73F5B22-EF89-48F6-8538-A23B1A22B052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D73F5B22-EF89-48F6-8538-A23B1A22B052}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D73F5B22-EF89-48F6-8538-A23B1A22B052}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D73F5B22-EF89-48F6-8538-A23B1A22B052}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
-EndGlobal
diff --git a/rabbitmq-orleans-extensions.sln b/rabbitmq-orleans-extensions.sln
new file mode 100644
index 0000000..6f557a8
--- /dev/null
+++ b/rabbitmq-orleans-extensions.sln
@@ -0,0 +1,76 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{EFD3DA34-B04F-4C90-B3E0-BEB2402B2D6A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A5880995-120F-422E-9B46-4302F74C87FE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Orleans", "Orleans", "{3947EC73-A7D9-482C-86B1-8E4F6387B5FC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCore", "AspNetCore", "{275062C9-CF0B-4445-8940-1D6106966163}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Escendit.Orleans.Streaming.RabbitMQ", "src\Orleans\RabbitMQ\Escendit.Orleans.Streaming.RabbitMQ.csproj", "{EFA84B10-485C-4410-A201-E5F717404678}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Escendit.Orleans.Streaming.RabbitMQ.AmqpProtocol", "src\Orleans\AmqpProtocol\Escendit.Orleans.Streaming.RabbitMQ.AmqpProtocol.csproj", "{AF8058B1-5AD2-4E0F-B483-12FE69C7ABBD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Escendit.Orleans.Streaming.RabbitMQ.StreamProtocol", "src\Orleans\StreamProtocol\Escendit.Orleans.Streaming.RabbitMQ.StreamProtocol.csproj", "{F7431962-0830-47B5-8E51-8EED823E8794}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Orleans", "Orleans", "{5C89E98A-C88E-4478-9AD5-7FFE87AFD903}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Escendit.Orleans.Streaming.RabbitMQ.AmqpProtocol.Tests", "test\Orleans\AmqpProtocol\Escendit.Orleans.Streaming.RabbitMQ.AmqpProtocol.Tests.csproj", "{A0D36FA0-B374-4702-B51D-D7BBB8A764A8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Escendit.Orleans.Streaming.RabbitMQ.Tests", "test\Orleans\RabbitMQ\Escendit.Orleans.Streaming.RabbitMQ.Tests.csproj", "{D3385699-829C-4D03-A5CA-788D1470FD2A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Escendit.Orleans.Streaming.RabbitMQ.StreamProtocol.Tests", "test\Orleans\StreamProtocol\Escendit.Orleans.Streaming.RabbitMQ.StreamProtocol.Tests.csproj", "{2437B71B-0685-4428-93F2-8A1C472AEC63}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EFA84B10-485C-4410-A201-E5F717404678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EFA84B10-485C-4410-A201-E5F717404678}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EFA84B10-485C-4410-A201-E5F717404678}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EFA84B10-485C-4410-A201-E5F717404678}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AF8058B1-5AD2-4E0F-B483-12FE69C7ABBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF8058B1-5AD2-4E0F-B483-12FE69C7ABBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AF8058B1-5AD2-4E0F-B483-12FE69C7ABBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AF8058B1-5AD2-4E0F-B483-12FE69C7ABBD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F7431962-0830-47B5-8E51-8EED823E8794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F7431962-0830-47B5-8E51-8EED823E8794}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F7431962-0830-47B5-8E51-8EED823E8794}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F7431962-0830-47B5-8E51-8EED823E8794}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A0D36FA0-B374-4702-B51D-D7BBB8A764A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A0D36FA0-B374-4702-B51D-D7BBB8A764A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A0D36FA0-B374-4702-B51D-D7BBB8A764A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A0D36FA0-B374-4702-B51D-D7BBB8A764A8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D3385699-829C-4D03-A5CA-788D1470FD2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D3385699-829C-4D03-A5CA-788D1470FD2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D3385699-829C-4D03-A5CA-788D1470FD2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D3385699-829C-4D03-A5CA-788D1470FD2A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2437B71B-0685-4428-93F2-8A1C472AEC63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2437B71B-0685-4428-93F2-8A1C472AEC63}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2437B71B-0685-4428-93F2-8A1C472AEC63}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2437B71B-0685-4428-93F2-8A1C472AEC63}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {3947EC73-A7D9-482C-86B1-8E4F6387B5FC} = {EFD3DA34-B04F-4C90-B3E0-BEB2402B2D6A}
+ {275062C9-CF0B-4445-8940-1D6106966163} = {EFD3DA34-B04F-4C90-B3E0-BEB2402B2D6A}
+ {EFA84B10-485C-4410-A201-E5F717404678} = {3947EC73-A7D9-482C-86B1-8E4F6387B5FC}
+ {AF8058B1-5AD2-4E0F-B483-12FE69C7ABBD} = {3947EC73-A7D9-482C-86B1-8E4F6387B5FC}
+ {F7431962-0830-47B5-8E51-8EED823E8794} = {3947EC73-A7D9-482C-86B1-8E4F6387B5FC}
+ {5C89E98A-C88E-4478-9AD5-7FFE87AFD903} = {A5880995-120F-422E-9B46-4302F74C87FE}
+ {A0D36FA0-B374-4702-B51D-D7BBB8A764A8} = {5C89E98A-C88E-4478-9AD5-7FFE87AFD903}
+ {D3385699-829C-4D03-A5CA-788D1470FD2A} = {5C89E98A-C88E-4478-9AD5-7FFE87AFD903}
+ {2437B71B-0685-4428-93F2-8A1C472AEC63} = {5C89E98A-C88E-4478-9AD5-7FFE87AFD903}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {C067AF04-0718-4504-9C39-F953038CFF86}
+ EndGlobalSection
+EndGlobal
diff --git a/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitClusterClientQueueConfigurator.cs b/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitClusterClientQueueConfigurator.cs
deleted file mode 100644
index f2f044f..0000000
--- a/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitClusterClientQueueConfigurator.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) Escendit Ltd. All Rights Reserved.
-// Licensed under the MIT. See LICENSE.txt file in the solution root for full license information.
-
-namespace Orleans.Hosting;
-
-using Configuration;
-using Escendit.Orleans.Streaming.RabbitMQ.Options;
-using Escendit.Orleans.Streaming.RabbitMQ.Queue;
-using Microsoft.Extensions.DependencyInjection;
-using Runtime;
-
-///
-/// Cluster Client Rabbit MQ Queue Configurator.
-///
-internal class RabbitClusterClientQueueConfigurator : ClusterClientPersistentStreamConfigurator
-{
- ///
- /// Initializes a new instance of the class.
- ///
- /// The name.
- /// The client builder.
- public RabbitClusterClientQueueConfigurator(
- string name,
- IClientBuilder clientBuilder)
- : base(name, clientBuilder, DefaultQueueAdapterFactory.Create)
- {
- ArgumentNullException.ThrowIfNull(name);
- ArgumentNullException.ThrowIfNull(clientBuilder);
-
- clientBuilder
- .Services
- .AddClientStreaming();
-
- clientBuilder
- .ConfigureServices(configure =>
- {
- configure
- .AddSingletonNamedService(name, DefaultQueueAdapterFactory.Create)
- .ConfigureNamedOptionForLogging(name)
- .AddRabbitMq(name)
- .WithConnection();
- });
- }
-}
diff --git a/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitClusterClientStreamConfigurator.cs b/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitClusterClientStreamConfigurator.cs
deleted file mode 100644
index 092b092..0000000
--- a/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitClusterClientStreamConfigurator.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) Escendit Ltd. All Rights Reserved.
-// Licensed under the MIT. See LICENSE.txt file in the solution root for full license information.
-
-namespace Orleans.Hosting;
-
-using Configuration;
-using Escendit.Orleans.Streaming.RabbitMQ.Options;
-using Escendit.Orleans.Streaming.RabbitMQ.Stream;
-using Runtime;
-
-///
-/// Cluster Client RabbitMQ Stream Configurator.
-///
-internal class RabbitClusterClientStreamConfigurator : ClusterClientPersistentStreamConfigurator
-{
- ///
- /// Initializes a new instance of the class.
- ///
- /// The name.
- /// The client builder.
- public RabbitClusterClientStreamConfigurator(
- string name,
- IClientBuilder clientBuilder)
- : base(name, clientBuilder, DefaultStreamAdapterFactory.Create)
- {
- ArgumentNullException.ThrowIfNull(name);
- ArgumentNullException.ThrowIfNull(clientBuilder);
-
- clientBuilder
- .Services
- .AddClientStreaming();
-
- clientBuilder
- .ConfigureServices(configure =>
- {
- configure
- .AddSingletonNamedService(name, DefaultStreamAdapterFactory.Create)
- .ConfigureNamedOptionForLogging(name);
- });
- }
-}
diff --git a/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitSiloQueueConfigurator.cs b/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitSiloQueueConfigurator.cs
deleted file mode 100644
index fb15aa6..0000000
--- a/src/Escendit.Orleans.Streaming.RabbitMQ/Configuration/RabbitSiloQueueConfigurator.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) Escendit Ltd. All Rights Reserved.
-// Licensed under the MIT. See LICENSE.txt file in the solution root for full license information.
-
-namespace Orleans.Hosting;
-
-using Configuration;
-using Escendit.Orleans.Streaming.RabbitMQ.Options;
-using Escendit.Orleans.Streaming.RabbitMQ.Queue;
-using Microsoft.Extensions.DependencyInjection;
-using Runtime;
-
-///
-/// Silo Rabbit MQ Queue Configurator.
-///
-internal class RabbitSiloQueueConfigurator : SiloPersistentStreamConfigurator
-{
- ///
- /// Initializes a new instance of the class.
- ///
- /// The name.
- /// The configure delegate.
- public RabbitSiloQueueConfigurator(
- string name,
- Action> configureDelegate)
- : base(name, configureDelegate, DefaultQueueAdapterFactory.Create)
- {
- ArgumentNullException.ThrowIfNull(name);
- ArgumentNullException.ThrowIfNull(configureDelegate);
-
- ConfigureDelegate(services =>
- {
- services
- .AddSingletonNamedService(name, DefaultQueueAdapterFactory.Create)
- .ConfigureNamedOptionForLogging(name)
- .AddRabbitMq(name)
- .WithConnection();
- });
- }
-}
diff --git a/src/Escendit.Orleans.Streaming.RabbitMQ/Core/RabbitBatchContainer.cs b/src/Escendit.Orleans.Streaming.RabbitMQ/Core/RabbitBatchContainer.cs
deleted file mode 100644
index d603cb9..0000000
--- a/src/Escendit.Orleans.Streaming.RabbitMQ/Core/RabbitBatchContainer.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) Escendit Ltd. All Rights Reserved.
-// Licensed under the MIT. See LICENSE.txt file in the solution root for full license information.
-
-namespace Escendit.Orleans.Streaming.RabbitMQ.Core;
-
-using System.Text.Json.Serialization;
-using global::Orleans;
-using global::Orleans.Runtime;
-using global::Orleans.Streams;
-
-///
-/// Rabbit MQ Batch Container.
-///
-[Serializable]
-[GenerateSerializer]
-internal class RabbitBatchContainer : IBatchContainer, IComparable
-{
- [Id(0)]
- [JsonPropertyName("sequenceToken")]
- private RabbitStreamSequenceToken _sequenceToken;
-
- [Id(1)]
- [JsonPropertyName("events")]
- private ICollection