Skip to content

Commit 21852e2

Browse files
author
John Simons
committed
Merge branch 'att-retries-with-replies' into develop
2 parents ca1d037 + 2dd0e13 commit 21852e2

File tree

18 files changed

+212
-64
lines changed

18 files changed

+212
-64
lines changed

src/ServicControlInstaller.Packaging/ServiceControlInstaller.Packaging.csproj

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,23 +65,23 @@
6565
<Private>True</Private>
6666
</Reference>
6767
<Reference Include="NServiceBus.Azure.Transports.WindowsAzureServiceBus, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
68-
<HintPath>..\packages\NServiceBus.Azure.Transports.WindowsAzureServiceBus.6.3.2\lib\net45\NServiceBus.Azure.Transports.WindowsAzureServiceBus.dll</HintPath>
68+
<HintPath>..\packages\NServiceBus.Azure.Transports.WindowsAzureServiceBus.6.3.3\lib\net45\NServiceBus.Azure.Transports.WindowsAzureServiceBus.dll</HintPath>
6969
<Private>True</Private>
7070
</Reference>
7171
<Reference Include="NServiceBus.Azure.Transports.WindowsAzureStorageQueues, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
7272
<HintPath>..\packages\NServiceBus.Azure.Transports.WindowsAzureStorageQueues.6.2.1\lib\net45\NServiceBus.Azure.Transports.WindowsAzureStorageQueues.dll</HintPath>
7373
<Private>True</Private>
7474
</Reference>
7575
<Reference Include="NServiceBus.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
76-
<HintPath>..\packages\NServiceBus.5.2.5\lib\net45\NServiceBus.Core.dll</HintPath>
76+
<HintPath>..\packages\NServiceBus.5.2.10\lib\net45\NServiceBus.Core.dll</HintPath>
7777
<Private>True</Private>
7878
</Reference>
7979
<Reference Include="NServiceBus.Transports.RabbitMQ, Version=3.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
80-
<HintPath>..\packages\NServiceBus.RabbitMQ.3.0.0\lib\net45\NServiceBus.Transports.RabbitMQ.dll</HintPath>
80+
<HintPath>..\packages\NServiceBus.RabbitMQ.3.0.1\lib\net45\NServiceBus.Transports.RabbitMQ.dll</HintPath>
8181
<Private>True</Private>
8282
</Reference>
8383
<Reference Include="NServiceBus.Transports.SQLServer, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
84-
<HintPath>..\packages\NServiceBus.SqlServer.2.1.3\lib\net45\NServiceBus.Transports.SQLServer.dll</HintPath>
84+
<HintPath>..\packages\NServiceBus.SqlServer.2.2.0\lib\net45\NServiceBus.Transports.SQLServer.dll</HintPath>
8585
<Private>True</Private>
8686
</Reference>
8787
<Reference Include="RabbitMQ.Client, Version=3.5.4.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce, processorArchitecture=MSIL">
@@ -117,7 +117,6 @@
117117
<Error Condition="!Exists('..\packages\GitVersionTask.2.0.1\Build\GitVersionTask.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\GitVersionTask.2.0.1\Build\GitVersionTask.targets'))" />
118118
</Target>
119119
<UsingTask AssemblyFile="..\..\buildsupport\DeploymentZipTask.Dll" TaskName="DeploymentZipTask.AddToZip" />
120-
121120
<Target Name="ZipTarget" AfterTargets="AfterBuild">
122121
<PropertyGroup>
123122
<ZipTargetFolder>..\..\zip\</ZipTargetFolder>

src/ServicControlInstaller.Packaging/packages.config

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
<package id="Microsoft.Data.Services.Client" version="5.6.4" targetFramework="net45" />
77
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.3" targetFramework="net45" />
88
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net45" />
9-
<package id="NServiceBus" version="5.2.5" targetFramework="net45" />
10-
<package id="NServiceBus.Azure.Transports.WindowsAzureServiceBus" version="6.3.2" targetFramework="net45" />
9+
<package id="NServiceBus" version="5.2.10" targetFramework="net45" />
10+
<package id="NServiceBus.Azure.Transports.WindowsAzureServiceBus" version="6.3.3" targetFramework="net45" />
1111
<package id="NServiceBus.Azure.Transports.WindowsAzureStorageQueues" version="6.2.1" targetFramework="net45" />
12-
<package id="NServiceBus.RabbitMQ" version="3.0.0" targetFramework="net45" />
13-
<package id="NServiceBus.SqlServer" version="2.1.3" targetFramework="net45" />
12+
<package id="NServiceBus.RabbitMQ" version="3.0.1" targetFramework="net45" />
13+
<package id="NServiceBus.SqlServer" version="2.2.0" targetFramework="net45" />
1414
<package id="RabbitMQ.Client" version="3.5.4" targetFramework="net45" />
1515
<package id="System.Spatial" version="5.6.4" targetFramework="net45" />
1616
<package id="WindowsAzure.ServiceBus" version="2.6.0" targetFramework="net45" />

src/ServiceControl.AcceptanceTesting/ServiceControl.AcceptanceTesting.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
<ItemGroup>
3939
<Reference Include="Microsoft.CSharp" />
4040
<Reference Include="NServiceBus.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
41-
<HintPath>..\packages\NServiceBus.5.2.5\lib\net45\NServiceBus.Core.dll</HintPath>
41+
<HintPath>..\packages\NServiceBus.5.2.10\lib\net45\NServiceBus.Core.dll</HintPath>
4242
<Private>True</Private>
4343
</Reference>
4444
<Reference Include="System" />
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="NServiceBus" version="5.2.5" targetFramework="net451" />
3+
<package id="NServiceBus" version="5.2.10" targetFramework="net451" />
44
</packages>

src/ServiceControl.AcceptanceTests/Contexts/DefaultServer.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using NServiceBus.Config.ConfigurationSource;
1717
using NServiceBus.Configuration.AdvanceExtensibility;
1818
using NServiceBus.Hosting.Helpers;
19+
using ServiceBus.Management.AcceptanceTests.Contexts.TransportIntegration;
1920

2021
public class DefaultServer : IEndpointSetupTemplate
2122
{
@@ -41,8 +42,8 @@ public BusConfiguration GetConfiguration(RunDescriptor runDescriptor, EndpointCo
4142

4243
SetupLogging(endpointConfiguration);
4344

44-
var types = GetTypesScopedByTestClass(endpointConfiguration);
4545
var transportToUse = AcceptanceTest.GetTransportIntegrationFromEnvironmentVar();
46+
var types = GetTypesScopedByTestClass(transportToUse, endpointConfiguration);
4647

4748
typesToInclude.AddRange(types);
4849

@@ -126,13 +127,21 @@ private static LoggingRule MakeFilteredLoggingRule(Target target, LogLevel logLe
126127
return rule;
127128
}
128129

129-
static IEnumerable<Type> GetTypesScopedByTestClass(EndpointConfiguration endpointConfiguration)
130+
static IEnumerable<Type> GetTypesScopedByTestClass(ITransportIntegration transportToUse, EndpointConfiguration endpointConfiguration)
130131
{
131132
var assemblies = new AssemblyScanner().GetScannableAssemblies();
132133

133134
var types = assemblies.Assemblies
134135
//exclude all test types by default
135136
.Where(a => a != Assembly.GetExecutingAssembly())
137+
.Where(a =>
138+
{
139+
if (a == transportToUse.Type.Assembly)
140+
{
141+
return true;
142+
}
143+
return !a.GetName().Name.Contains("Transports");
144+
})
136145
.Where(a => a.GetName().Name != "ServiceControl")
137146
.SelectMany(a => a.GetTypes());
138147

src/ServiceControl.AcceptanceTests/Contexts/ManagementEndpointSetup.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,17 @@
1616
using NServiceBus.Configuration.AdvanceExtensibility;
1717
using NServiceBus.Hosting.Helpers;
1818
using Particular.ServiceControl;
19+
using ServiceBus.Management.AcceptanceTests.Contexts.TransportIntegration;
1920

2021
public class ManagementEndpointSetup : IEndpointSetupTemplate
2122
{
2223
public BusConfiguration GetConfiguration(RunDescriptor runDescriptor, EndpointConfiguration endpointConfiguration, IConfigurationSource configSource, Action<BusConfiguration> configurationBuilderCustomization)
2324
{
2425
var builder = new BusConfiguration();
25-
builder.TypesToScan(GetTypesScopedByTestClass(endpointConfiguration));
26+
var transportToUse = AcceptanceTest.GetTransportIntegrationFromEnvironmentVar();
27+
builder.TypesToScan(GetTypesScopedByTestClass(transportToUse, endpointConfiguration));
2628
builder.EnableInstallers();
2729

28-
var transportToUse = AcceptanceTest.GetTransportIntegrationFromEnvironmentVar();
2930

3031
Action action = () => transportToUse.OnEndpointShutdown(builder.GetSettings().EndpointName());
3132
builder.GetSettings().Set("CleanupTransport", action);
@@ -49,17 +50,24 @@ public BusConfiguration GetConfiguration(RunDescriptor runDescriptor, EndpointCo
4950
return builder;
5051
}
5152

52-
static IEnumerable<Type> GetTypesScopedByTestClass(EndpointConfiguration endpointConfiguration)
53+
static IEnumerable<Type> GetTypesScopedByTestClass(ITransportIntegration transportToUse, EndpointConfiguration endpointConfiguration)
5354
{
5455
var assemblies = new AssemblyScanner().GetScannableAssemblies();
5556

5657
var types = assemblies.Assemblies
5758
//exclude all test types by default
5859
.Where(a => a != Assembly.GetExecutingAssembly())
60+
.Where(a =>
61+
{
62+
if (a == transportToUse.Type.Assembly)
63+
{
64+
return true;
65+
}
66+
return !a.GetName().Name.Contains("Transports");
67+
})
5968
.Where(a => !a.GetName().Name.StartsWith("ServiceControl.Plugin"))
6069
.SelectMany(a => a.GetTypes());
6170

62-
6371
types = types.Union(GetNestedTypeRecursive(endpointConfiguration.BuilderType.DeclaringType, endpointConfiguration.BuilderType));
6472

6573
types = types.Union(endpointConfiguration.TypesToInclude);
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
namespace ServiceBus.Management.AcceptanceTests.Recoverability
2+
{
3+
using System;
4+
using NServiceBus;
5+
using NServiceBus.AcceptanceTesting;
6+
using NServiceBus.Config;
7+
using NServiceBus.Features;
8+
using NUnit.Framework;
9+
using ServiceBus.Management.AcceptanceTests.Contexts;
10+
using ServiceControl.Infrastructure;
11+
12+
public class When_a_message_is_retried_and_succeeds_with_a_reply : AcceptanceTest
13+
{
14+
[Test]
15+
public void The_reply_should_go_to_the_correct_endpoint()
16+
{
17+
var context = new RetryReplyContext();
18+
19+
Scenario.Define(context)
20+
.WithEndpoint<ServiceControlEndpoint>(c => c.AppConfig(PathToAppConfig))
21+
.WithEndpoint<OriginatingEndpoint>(c => c.Given(bus => bus.Send(new OriginalMessage())))
22+
.WithEndpoint<ReceivingEndpoint>()
23+
.Done(c =>
24+
{
25+
if (string.IsNullOrWhiteSpace(c.UniqueMessageId))
26+
{
27+
return false;
28+
}
29+
30+
if (!c.RetryIssued)
31+
{
32+
object failure;
33+
if (!TryGet("/api/errors/" + c.UniqueMessageId, out failure))
34+
return false;
35+
c.RetryIssued = true;
36+
Post<object>(string.Format("/api/errors/{0}/retry", c.UniqueMessageId));
37+
return false;
38+
}
39+
40+
return !string.IsNullOrWhiteSpace(c.ReplyHandledBy);
41+
})
42+
.Run(TimeSpan.FromMinutes(3));
43+
44+
Assert.AreEqual("Originating Endpoint", context.ReplyHandledBy, "Reply handled by incorrect endpoint");
45+
}
46+
47+
class OriginalMessage : IMessage { }
48+
49+
class ReplyMessage : IMessage { }
50+
51+
class RetryReplyContext : ScenarioContext
52+
{
53+
public bool RetryIssued { get; set; }
54+
public string UniqueMessageId { get; set; }
55+
public string ReplyHandledBy { get; set; }
56+
}
57+
58+
class ServiceControlEndpoint : ManagementEndpoint
59+
{
60+
public class ReplyHandler : IHandleMessages<ReplyMessage>
61+
{
62+
public RetryReplyContext Context { get; set; }
63+
public void Handle(ReplyMessage message)
64+
{
65+
Context.ReplyHandledBy = "Service Control";
66+
}
67+
}
68+
}
69+
70+
class OriginatingEndpoint : EndpointConfigurationBuilder
71+
{
72+
public OriginatingEndpoint()
73+
{
74+
EndpointSetup<DefaultServerWithoutAudit>()
75+
.AddMapping<OriginalMessage>(typeof(ReceivingEndpoint));
76+
}
77+
78+
public class ReplyMessageHandler : IHandleMessages<ReplyMessage>
79+
{
80+
public RetryReplyContext Context { get; set; }
81+
82+
public void Handle(ReplyMessage message)
83+
{
84+
Context.ReplyHandledBy = "Originating Endpoint";
85+
}
86+
}
87+
}
88+
89+
class ReceivingEndpoint : EndpointConfigurationBuilder
90+
{
91+
public ReceivingEndpoint()
92+
{
93+
EndpointSetup<DefaultServerWithoutAudit>(c => c.DisableFeature<SecondLevelRetries>())
94+
.WithConfig<TransportConfig>(c =>
95+
{
96+
c.MaxRetries = 1;
97+
});
98+
}
99+
100+
public class OriginalMessageHandler : IHandleMessages<OriginalMessage>
101+
{
102+
public IBus Bus { get; set; }
103+
public RetryReplyContext Context { get; set; }
104+
105+
public void Handle(OriginalMessage message)
106+
{
107+
var messageId = Bus.CurrentMessageContext.Id.Replace(@"\", "-");
108+
// NOTE: If there's no Processing Endpoint (i.e. It's a failure) but there is a Reply To Address, then that's what get used by SC
109+
var endpointName = Bus.CurrentMessageContext.ReplyToAddress.Queue;
110+
Context.UniqueMessageId = DeterministicGuid.MakeId(messageId, endpointName).ToString();
111+
112+
if (!Context.RetryIssued)
113+
{
114+
throw new Exception("This is still the original attempt");
115+
}
116+
Bus.Reply(new ReplyMessage());
117+
}
118+
}
119+
120+
public class ReplyMessageHandler : IHandleMessages<ReplyMessage>
121+
{
122+
public RetryReplyContext Context { get; set; }
123+
public void Handle(ReplyMessage message)
124+
{
125+
Context.ReplyHandledBy = "Receiving Endpoint";
126+
}
127+
}
128+
}
129+
}
130+
}

src/ServiceControl.AcceptanceTests/ServiceControl.AcceptanceTests.csproj

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,15 @@
8282
<Private>True</Private>
8383
</Reference>
8484
<Reference Include="NServiceBus.Azure.Transports.WindowsAzureServiceBus, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
85-
<HintPath>..\packages\NServiceBus.Azure.Transports.WindowsAzureServiceBus.6.3.2\lib\net45\NServiceBus.Azure.Transports.WindowsAzureServiceBus.dll</HintPath>
85+
<HintPath>..\packages\NServiceBus.Azure.Transports.WindowsAzureServiceBus.6.3.3\lib\net45\NServiceBus.Azure.Transports.WindowsAzureServiceBus.dll</HintPath>
8686
<Private>True</Private>
8787
</Reference>
8888
<Reference Include="NServiceBus.Azure.Transports.WindowsAzureStorageQueues, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
8989
<HintPath>..\packages\NServiceBus.Azure.Transports.WindowsAzureStorageQueues.6.2.1\lib\net45\NServiceBus.Azure.Transports.WindowsAzureStorageQueues.dll</HintPath>
9090
<Private>True</Private>
9191
</Reference>
9292
<Reference Include="NServiceBus.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
93-
<HintPath>..\packages\NServiceBus.5.2.5\lib\net45\NServiceBus.Core.dll</HintPath>
93+
<HintPath>..\packages\NServiceBus.5.2.10\lib\net45\NServiceBus.Core.dll</HintPath>
9494
<Private>True</Private>
9595
</Reference>
9696
<Reference Include="NServiceBus.NLog, Version=1.1.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
@@ -102,11 +102,11 @@
102102
<Private>True</Private>
103103
</Reference>
104104
<Reference Include="NServiceBus.Transports.RabbitMQ, Version=3.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
105-
<HintPath>..\packages\NServiceBus.RabbitMQ.3.0.0\lib\net45\NServiceBus.Transports.RabbitMQ.dll</HintPath>
105+
<HintPath>..\packages\NServiceBus.RabbitMQ.3.0.1\lib\net45\NServiceBus.Transports.RabbitMQ.dll</HintPath>
106106
<Private>True</Private>
107107
</Reference>
108108
<Reference Include="NServiceBus.Transports.SQLServer, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
109-
<HintPath>..\packages\NServiceBus.SqlServer.2.1.3\lib\net45\NServiceBus.Transports.SQLServer.dll</HintPath>
109+
<HintPath>..\packages\NServiceBus.SqlServer.2.2.0\lib\net45\NServiceBus.Transports.SQLServer.dll</HintPath>
110110
<Private>True</Private>
111111
</Reference>
112112
<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
@@ -220,6 +220,7 @@
220220
<Compile Include="Recoverability\Groups\When_a_message_has_failed.cs" />
221221
<Compile Include="Recoverability\Groups\When_message_groups_are_sorted_by_a_web_api_call.cs" />
222222
<Compile Include="Recoverability\Groups\When_two_similar_messages_have_failed.cs" />
223+
<Compile Include="Recoverability\When_a_message_is_retried_and_succeeds_with_a_reply.cs" />
223224
<Compile Include="SagaAudit\When_multiple_messages_are_emitted_by_a_saga.cs" />
224225
<Compile Include="SagaAudit\When_a_message_emitted_by_a_saga_is_audited.cs" />
225226
<Compile Include="SagaAudit\When_a_message_hitting_a_saga_is_not_a_start_message.cs" />

src/ServiceControl.AcceptanceTests/packages.config

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.3" targetFramework="net451" />
1010
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net451" />
1111
<package id="NLog" version="4.0.1" targetFramework="net451" />
12-
<package id="NServiceBus" version="5.2.5" targetFramework="net451" />
12+
<package id="NServiceBus" version="5.2.10" targetFramework="net451" />
1313
<package id="NServiceBus.Autofac" version="5.0.0" targetFramework="net451" />
14-
<package id="NServiceBus.Azure.Transports.WindowsAzureServiceBus" version="6.3.2" targetFramework="net451" />
14+
<package id="NServiceBus.Azure.Transports.WindowsAzureServiceBus" version="6.3.3" targetFramework="net451" />
1515
<package id="NServiceBus.Azure.Transports.WindowsAzureStorageQueues" version="6.2.1" targetFramework="net451" />
1616
<package id="NServiceBus.NLog" version="1.1.0" targetFramework="net451" />
17-
<package id="NServiceBus.RabbitMQ" version="3.0.0" targetFramework="net451" />
18-
<package id="NServiceBus.SqlServer" version="2.1.3" targetFramework="net451" />
17+
<package id="NServiceBus.RabbitMQ" version="3.0.1" targetFramework="net451" />
18+
<package id="NServiceBus.SqlServer" version="2.2.0" targetFramework="net451" />
1919
<package id="NUnit" version="2.6.4" targetFramework="net451" />
2020
<package id="RabbitMQ.Client" version="3.5.4" targetFramework="net451" />
2121
<package id="RavenDB.Client" version="2.5.2962" targetFramework="net451" />

src/ServiceControl.IntegrationDemo/ServiceControl.IntegrationDemo.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
</PropertyGroup>
3737
<ItemGroup>
3838
<Reference Include="NServiceBus.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">
39-
<HintPath>..\packages\NServiceBus.5.2.5\lib\net45\NServiceBus.Core.dll</HintPath>
39+
<HintPath>..\packages\NServiceBus.5.2.10\lib\net45\NServiceBus.Core.dll</HintPath>
4040
<Private>True</Private>
4141
</Reference>
4242
<Reference Include="NServiceBus.Host, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c, processorArchitecture=MSIL">

0 commit comments

Comments
 (0)