Skip to content

Commit 4d4a716

Browse files
authored
Merge pull request #36 from Particular/stable-endpoint-instance-ids
Unique and stable instance ids
2 parents cd51b92 + 4f3a09e commit 4d4a716

File tree

8 files changed

+46
-14
lines changed

8 files changed

+46
-14
lines changed

Solution/Billing/Program.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,15 @@ static async Task Main()
2828
.Delayed(delayed => delayed.NumberOfRetries(0));
2929

3030
//endpointConfiguration.AuditProcessedMessagesTo("audit");
31+
32+
endpointConfiguration.UniquelyIdentifyRunningInstance()
33+
.UsingCustomIdentifier(new Guid("1C62248E-2681-45A4-B44D-5CF93584BAD6"))
34+
.UsingCustomDisplayName("original-instance");
35+
3136
var metrics = endpointConfiguration.EnableMetrics();
3237
metrics.SendMetricDataToServiceControl(
3338
"Particular.Monitoring",
34-
TimeSpan.FromMilliseconds(500),
35-
"original-instance"
39+
TimeSpan.FromMilliseconds(500)
3640
);
3741

3842
var routing = transport.Routing();

Solution/ClientUI/Program.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ static async Task Main()
2323
var transport = endpointConfiguration.UseTransport<SqlServerTransport>();
2424
transport.ConnectionStringName("NServiceBus/Transport");
2525

26+
endpointConfiguration.UniquelyIdentifyRunningInstance()
27+
.UsingCustomIdentifier(new Guid("EA3E7D1B-8171-4098-B160-1FEA975CCB2C"))
28+
.UsingCustomDisplayName("original-instance");
29+
2630
var metrics = endpointConfiguration.EnableMetrics();
2731
metrics.SendMetricDataToServiceControl(
2832
"Particular.Monitoring",
29-
TimeSpan.FromMilliseconds(500),
30-
"original-instance"
33+
TimeSpan.FromMilliseconds(500)
3134
);
3235

3336

Solution/Sales/Program.cs

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System;
22
using System.Linq;
3+
using System.Security.Cryptography;
4+
using System.Text;
35
using System.Threading.Tasks;
46
using NServiceBus;
57
using Shared;
@@ -14,18 +16,20 @@ static async Task Main(string[] args)
1416

1517
LoggingUtils.ConfigureLogging("Sales");
1618

17-
var instanceIdentifier = args.FirstOrDefault();
18-
if(string.IsNullOrEmpty(instanceIdentifier))
19+
var instanceName = args.FirstOrDefault();
20+
21+
if(string.IsNullOrEmpty(instanceName))
1922
{
2023
Console.Title = "Sales";
21-
instanceIdentifier = "original-instance";
24+
25+
instanceName = "original-instance";
2226
}
2327
else
2428
{
25-
Console.Title = $"Sales - {instanceIdentifier}";
29+
Console.Title = $"Sales - {instanceName}";
2630
}
2731

28-
Console.WriteLine("Using instance-id {0}", instanceIdentifier);
32+
var instanceId = DeterministicGuid.Create("Sales", instanceName);
2933

3034
var endpointConfiguration = new EndpointConfiguration("Sales");
3135
endpointConfiguration.LimitMessageProcessingConcurrencyTo(4);
@@ -38,11 +42,14 @@ static async Task Main(string[] args)
3842

3943
//endpointConfiguration.AuditProcessedMessagesTo("audit");
4044

45+
endpointConfiguration.UniquelyIdentifyRunningInstance()
46+
.UsingCustomDisplayName(instanceName)
47+
.UsingCustomIdentifier(instanceId);
48+
4149
var metrics = endpointConfiguration.EnableMetrics();
4250
metrics.SendMetricDataToServiceControl(
4351
"Particular.Monitoring",
44-
TimeSpan.FromMilliseconds(500),
45-
instanceIdentifier
52+
TimeSpan.FromMilliseconds(500)
4653
);
4754

4855
var simulationEffects = new SimulationEffects();
@@ -51,7 +58,7 @@ static async Task Main(string[] args)
5158
var endpointInstance = await Endpoint.Start(endpointConfiguration)
5259
.ConfigureAwait(false);
5360

54-
RunUserInterfaceLoop(simulationEffects, instanceIdentifier);
61+
RunUserInterfaceLoop(simulationEffects, instanceName);
5562

5663
await endpointInstance.Stop()
5764
.ConfigureAwait(false);
@@ -87,4 +94,19 @@ static void RunUserInterfaceLoop(SimulationEffects state, string instanceName)
8794
}
8895
}
8996
}
97+
98+
static class DeterministicGuid
99+
{
100+
public static Guid Create(params object[] data)
101+
{
102+
// use MD5 hash to get a 16-byte hash of the string
103+
using (var provider = new MD5CryptoServiceProvider())
104+
{
105+
var inputBytes = Encoding.Default.GetBytes(string.Concat(data));
106+
var hashBytes = provider.ComputeHash(inputBytes);
107+
// generate a guid from the hash:
108+
return new Guid(hashBytes);
109+
}
110+
}
111+
}
90112
}

Solution/Shipping/Program.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@ static async Task Main()
2727

2828
endpointConfiguration.AuditProcessedMessagesTo("audit");
2929

30+
endpointConfiguration.UniquelyIdentifyRunningInstance()
31+
.UsingCustomIdentifier(new Guid("BB8A8BAF-4187-455E-AAD2-211CD43267CB"))
32+
.UsingCustomDisplayName("original-instance");
33+
3034
var metrics = endpointConfiguration.EnableMetrics();
3135
metrics.SendMetricDataToServiceControl(
3236
"Particular.Monitoring",
33-
TimeSpan.FromMilliseconds(500),
34-
"original-instance"
37+
TimeSpan.FromMilliseconds(500)
3538
);
3639

3740
var routing = transport.Routing();
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
512 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)