Skip to content
This repository was archived by the owner on Sep 2, 2021. It is now read-only.

Commit 97c3b30

Browse files
HEskandaritimbussmann
authored andcommitted
Adding an option to disable monitoring of the route file (#24)
1 parent 981bfb4 commit 97c3b30

2 files changed

Lines changed: 55 additions & 6 deletions

File tree

src/NServiceBus.FileBasedRouting/FileBasedRoutingConfigExtensions.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,20 @@ public static void UseFileBasedRouting(this RoutingSettings config)
1616
config.GetSettings().EnableFeatureByDefault<FileBasedRoutingFeature>();
1717
}
1818

19+
/// <summary>
20+
/// Enables routing configured with the routing configuration file.
21+
/// </summary>
22+
/// <param name="config">The configuration object.</param>
23+
/// <param name="updateInterval">The interval the route file should be checked for changes.</param>
24+
public static void UseFileBasedRouting(this RoutingSettings config, TimeSpan updateInterval)
25+
{
26+
if (updateInterval < TimeSpan.Zero)
27+
throw new ArgumentOutOfRangeException(nameof(updateInterval), "Update interval cannot be negative.");
28+
29+
config.GetSettings().Set(FileBasedRoutingFeature.RouteFileUpdateInterval, updateInterval);
30+
config.GetSettings().EnableFeatureByDefault<FileBasedRoutingFeature>();
31+
}
32+
1933
/// <summary>
2034
/// Enables routing configured with the routing configuration file under <paramref name="configurationFilePath"/>
2135
/// </summary>
@@ -26,6 +40,17 @@ public static void UseFileBasedRouting(this RoutingSettings config, string confi
2640
config.UseFileBasedRouting(UriHelper.FilePathToUri(configurationFilePath));
2741
}
2842

43+
/// <summary>
44+
/// Enables routing configured with the routing configuration file under <paramref name="configurationFilePath"/>
45+
/// </summary>
46+
/// <param name="config">The configuration object.</param>
47+
/// <param name="configurationFilePath">The path to the configuration file.</param>
48+
/// <param name="updateInterval">The interval the route file should be checked for changes.</param>
49+
public static void UseFileBasedRouting(this RoutingSettings config, string configurationFilePath, TimeSpan updateInterval)
50+
{
51+
config.UseFileBasedRouting(UriHelper.FilePathToUri(configurationFilePath), updateInterval);
52+
}
53+
2954
/// <summary>
3055
/// Enables routing configured with the routing configuration file under <paramref name="configurationFileUri"/>
3156
/// </summary>
@@ -36,5 +61,21 @@ public static void UseFileBasedRouting(this RoutingSettings config, Uri configur
3661
config.GetSettings().Set(FileBasedRoutingFeature.RoutingFilePathKey, configurationFileUri);
3762
config.GetSettings().EnableFeatureByDefault<FileBasedRoutingFeature>();
3863
}
64+
65+
/// <summary>
66+
/// Enables routing configured with the routing configuration file under <paramref name="configurationFileUri"/>
67+
/// </summary>
68+
/// <param name="config">The configuration object.</param>
69+
/// <param name="configurationFileUri">The <see cref="Uri"/> to the configuration file.</param>
70+
/// <param name="updateInterval">The interval the route file should be checked for changes.</param>
71+
public static void UseFileBasedRouting(this RoutingSettings config, Uri configurationFileUri, TimeSpan updateInterval)
72+
{
73+
if (updateInterval < TimeSpan.Zero)
74+
throw new ArgumentOutOfRangeException(nameof(updateInterval), "Update interval cannot be negative.");
75+
76+
config.GetSettings().Set(FileBasedRoutingFeature.RouteFileUpdateInterval, updateInterval);
77+
config.GetSettings().Set(FileBasedRoutingFeature.RoutingFilePathKey, configurationFileUri);
78+
config.GetSettings().EnableFeatureByDefault<FileBasedRoutingFeature>();
79+
}
3980
}
4081
}

src/NServiceBus.FileBasedRouting/FileBasedRoutingFeature.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ class FileBasedRoutingFeature : Feature
1414
static ILog log = LogManager.GetLogger<FileBasedRoutingFeature>();
1515

1616
public const string RoutingFilePathKey = "NServiceBus.FileBasedRouting.RoutingFileUri";
17+
public const string RouteFileUpdateInterval = "NServiceBus.FileBasedRouting.RouteFileUpdateInterval";
1718

1819
public FileBasedRoutingFeature()
1920
{
20-
Defaults(s=>
21+
Defaults(s =>
2122
{
2223
s.SetDefault(RoutingFilePathKey, UriHelper.FilePathToUri("endpoints.xml"));
24+
s.SetDefault(RouteFileUpdateInterval, TimeSpan.FromSeconds(30));
2325
s.SetDefault<UnicastSubscriberTable>(new UnicastSubscriberTable());
2426
});
2527
}
@@ -31,6 +33,7 @@ protected override void Setup(FeatureConfigurationContext context)
3133
var unicastRoutingTable = context.Settings.Get<UnicastRoutingTable>();
3234
var unicastSubscriberTable = context.Settings.Get<UnicastSubscriberTable>();
3335

36+
var routeFileUpdateInterval = context.Settings.Get<TimeSpan>(RouteFileUpdateInterval);
3437
var routingFileUri = context.Settings.Get<Uri>(RoutingFilePathKey);
3538
var routingFile = new XmlRoutingFileAccess(routingFileUri);
3639
var routingFileParser = new XmlRoutingFileParser();
@@ -41,7 +44,10 @@ protected override void Setup(FeatureConfigurationContext context)
4144
// ensure the routing file is valid and the routing table is populated before running FeatureStartupTasks
4245
UpdateRoutingTable(routingFileParser, routingFile, unicastRoutingTable, unicastSubscriberTable, nativeSends, nativePublishes);
4346

44-
context.RegisterStartupTask(new UpdateRoutingTask(() => UpdateRoutingTable(routingFileParser, routingFile, unicastRoutingTable, unicastSubscriberTable, nativeSends, nativePublishes)));
47+
if (routeFileUpdateInterval > TimeSpan.Zero)
48+
{
49+
context.RegisterStartupTask(new UpdateRoutingTask(() => UpdateRoutingTable(routingFileParser, routingFile, unicastRoutingTable, unicastSubscriberTable, nativeSends, nativePublishes), routeFileUpdateInterval));
50+
}
4551

4652
// if the transport provides native pub/sub support, don't plug in the FileBased pub/sub storage.
4753
if (context.Settings.Get<TransportInfrastructure>().OutboundRoutingPolicy.Publishes == OutboundRoutingType.Unicast)
@@ -95,16 +101,18 @@ static void UpdateRoutingTable(XmlRoutingFileParser routingFileParser, XmlRoutin
95101
class UpdateRoutingTask : FeatureStartupTask, IDisposable
96102
{
97103
Action updateRoutingCallback;
98-
Timer updateTimer;
104+
TimeSpan routeFileUpdateInterval;
105+
Timer updateTimer;
99106

100-
public UpdateRoutingTask(Action updateRoutingCallback)
107+
public UpdateRoutingTask(Action updateRoutingCallback, TimeSpan routeFileUpdateInterval)
101108
{
102-
this.updateRoutingCallback = updateRoutingCallback;
109+
this.updateRoutingCallback = updateRoutingCallback;
110+
this.routeFileUpdateInterval = routeFileUpdateInterval;
103111
}
104112

105113
protected override Task OnStart(IMessageSession session)
106114
{
107-
updateTimer = new Timer(state => updateRoutingCallback(), null, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30));
115+
updateTimer = new Timer(state => updateRoutingCallback(), null, routeFileUpdateInterval, routeFileUpdateInterval);
108116

109117
return Task.CompletedTask;
110118
}

0 commit comments

Comments
 (0)