7
7
8
8
namespace NServiceBus . Config
9
9
{
10
- public class SecondLevelRetriesConfiguration : INeedInitialization , INeedToInstallSomething < Installation . Environments . Windows >
10
+ public class SecondLevelRetriesConfiguration : IWantToRunBeforeConfigurationIsFinalized , INeedToInstallSomething < Installation . Environments . Windows >
11
11
{
12
- public void Init ( )
12
+ private static bool isEnabled ;
13
+
14
+ public void Run ( )
13
15
{
14
16
var retriesConfig = Configure . GetConfigSection < SecondLevelRetriesConfig > ( ) ;
15
17
var enabled = retriesConfig != null ? retriesConfig . Enabled : true ;
16
-
17
- Address errorQueue = null ;
18
-
19
- if ( enabled )
18
+
19
+ if ( ! Configure . Instance . Configurer . HasComponent < FaultManager > ( ) || ! enabled )
20
20
{
21
- var forwardingInCaseOfFaultConfig = Configure . GetConfigSection < MessageForwardingInCaseOfFaultConfig > ( ) ;
21
+ Configure . Instance . Configurer . ConfigureComponent < SecondLevelRetries > ( DependencyLifecycle . SingleInstance )
22
+ . ConfigureProperty ( rs => rs . Disabled , true ) ;
22
23
23
- if ( forwardingInCaseOfFaultConfig != null )
24
- {
25
- errorQueue = Address . Parse ( forwardingInCaseOfFaultConfig . ErrorQueue ) ;
26
- }
24
+ return ;
27
25
}
28
-
29
- if ( errorQueue != null )
26
+
27
+ if ( retriesConfig != null )
30
28
{
31
- if ( retriesConfig != null )
32
- {
33
- SetUpRetryPolicy ( retriesConfig ) ;
34
- }
29
+ SetUpRetryPolicy ( retriesConfig ) ;
30
+ }
35
31
36
- var retriesErrorQ = GetAddress ( ) ;
37
- var originalErrorQueue = errorQueue ;
32
+ var retriesErrorQ = GetAddress ( ) ;
38
33
39
- // and only when the retries satellite is running should we alter the FaultManager
40
- Configure . Instance . Configurer . ConfigureProperty < FaultManager > ( fm => fm . ErrorQueue , retriesErrorQ ) ;
41
- Configure . Instance . Configurer . ConfigureProperty < FaultManager > ( fm => fm . RealErrorQueue , originalErrorQueue ) ;
34
+ // and only when the retries satellite is running should we alter the FaultManager
35
+ Configure . Instance . Configurer . ConfigureProperty < FaultManager > ( fm => fm . RetriesErrorQueue , retriesErrorQ ) ;
42
36
43
- Configure . Instance . Configurer . ConfigureComponent < SecondLevelRetries > ( DependencyLifecycle . SingleInstance )
44
- . ConfigureProperty ( rs => rs . ErrorQueue , originalErrorQueue )
45
- . ConfigureProperty ( rs => rs . InputAddress , retriesErrorQ )
46
- . ConfigureProperty ( rs => rs . TimeoutManagerAddress , Configure . Instance . GetTimeoutManagerAddress ( ) ) ;
37
+ Configure . Instance . Configurer . ConfigureComponent < SecondLevelRetries > ( DependencyLifecycle . SingleInstance )
38
+ . ConfigureProperty ( rs => rs . InputAddress , retriesErrorQ )
39
+ . ConfigureProperty ( rs => rs . TimeoutManagerAddress , Configure . Instance . GetTimeoutManagerAddress ( ) ) ;
47
40
48
-
49
- }
50
- else
51
- {
52
- Configure . Instance . Configurer . ConfigureComponent < SecondLevelRetries > ( DependencyLifecycle . SingleInstance )
53
- . ConfigureProperty ( rs => rs . Disabled , true ) ;
54
-
55
- Configure . Instance . Configurer . ConfigureProperty < FaultManager > ( fm => fm . RealErrorQueue , null ) ;
56
- }
41
+ isEnabled = true ;
57
42
}
58
43
59
44
static void SetUpRetryPolicy ( SecondLevelRetriesConfig retriesConfig )
@@ -71,11 +56,14 @@ static void SetUpRetryPolicy(SecondLevelRetriesConfig retriesConfig)
71
56
72
57
public void Install ( WindowsIdentity identity )
73
58
{
59
+ if ( ! isEnabled )
60
+ return ;
61
+
74
62
MsmqUtilities . CreateQueueIfNecessary ( GetAddress ( ) , WindowsIdentity . GetCurrent ( ) . Name ) ;
75
63
}
76
64
77
65
static Address GetAddress ( )
78
- {
66
+ {
79
67
return Address . Parse ( Configure . EndpointName ) . SubScope ( "Retries" ) ;
80
68
}
81
69
}
0 commit comments