Skip to content

Commit bbc135d

Browse files
Merge pull request #211 from Particular/wire-commands-clean
Add more simulation effects
2 parents 9273c39 + b8e5538 commit bbc135d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1213
-659
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ MonitoringDemo.Sql/transport/
1212

1313
**/.diagnostics/*
1414
.logs
15-
.idea
15+
.idea
16+
/otel/

src/Billing/Billing.csproj

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
<ItemGroup>
1212
<ProjectReference Include="..\Messages\Messages.csproj" />
13+
<ProjectReference Include="..\Shared\Shared.csproj" />
1314
</ItemGroup>
1415

1516
<ItemGroup>
@@ -19,9 +20,4 @@
1920
<PackageReference Include="NServiceBus.Persistence.NonDurable" Version="2.*" />
2021
</ItemGroup>
2122

22-
<ItemGroup>
23-
<Compile Include="..\MonitoringDemo\DeterministicGuid.cs" />
24-
<Compile Include="..\MonitoringDemo\UserInterface.cs" />
25-
</ItemGroup>
26-
2723
</Project>

src/Billing/DispatchingProgressBehavior.cs

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/Billing/FailureSimulation.cs

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/Billing/FailureSimulator.cs

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/Billing/OrderPlacedHandler.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
using Messages;
2+
using NServiceBus;
3+
using Shared;
24

35
namespace Billing;
46

5-
public class OrderPlacedHandler(SimulationEffects simulationEffects) : IHandleMessages<OrderPlaced>
7+
public class OrderPlacedHandler : IHandleMessages<OrderPlaced>
68
{
79
public async Task Handle(OrderPlaced message, IMessageHandlerContext context)
810
{
9-
await simulationEffects.SimulatedMessageProcessing(context.CancellationToken);
10-
1111
var orderBilled = new OrderBilled
1212
{
1313
OrderId = message.OrderId
1414
};
1515

16-
await context.Publish(orderBilled);
16+
var publishOptions = new PublishOptions();
17+
publishOptions.SetMessageId(MessageIdHelper.GetHumanReadableMessageId());
18+
await context.Publish(orderBilled, publishOptions);
1719
}
1820
}

src/Billing/ProcessingMessageProgressBehavior.cs

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/Billing/Program.cs

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -9,59 +9,75 @@
99

1010
var title = string.IsNullOrEmpty(instancePostfix) ? "Failure rate (Billing)" : $"Billing - {instancePostfix}";
1111
var instanceName = string.IsNullOrEmpty(instancePostfix) ? "billing" : $"billing-{instancePostfix}";
12-
1312
var instanceId = DeterministicGuid.Create("Billing", instanceName);
13+
var prometheusPortString = args.Skip(1).FirstOrDefault();
1414

15-
var endpointConfiguration = new EndpointConfiguration("Billing");
16-
endpointConfiguration.LimitMessageProcessingConcurrencyTo(4);
15+
var endpointControls = new ProcessingEndpointControls(() => PrepareEndpointConfiguration(instanceId, instanceName, prometheusPortString));
1716

18-
var serializer = endpointConfiguration.UseSerialization<SystemJsonSerializer>();
19-
serializer.Options(new JsonSerializerOptions
20-
{
21-
TypeInfoResolverChain =
22-
{
23-
MessagesSerializationContext.Default
24-
}
25-
});
17+
var ui = new UserInterface();
18+
endpointControls.BindSlowProcessingDial(ui, '5', 't');
19+
endpointControls.BindDatabaseFailuresDial(ui, '6', 'y');
20+
21+
endpointControls.BindDatabaseDownToggle(ui, 'f');
22+
endpointControls.BindDelayedRetriesToggle(ui, 'g');
23+
endpointControls.BindAutoThrottleToggle(ui, 'h');
2624

27-
var transport = new LearningTransport
25+
endpointControls.BindFailureReceivingButton(ui, 'v');
26+
endpointControls.BindFailureProcessingButton(ui, 'b');
27+
endpointControls.BindFailureDispatchingButton(ui, 'n');
28+
29+
if (prometheusPortString != null)
2830
{
29-
StorageDirectory = Path.Combine(Directory.GetParent(Assembly.GetExecutingAssembly().Location)!.Parent!.FullName, ".learningtransport"),
30-
TransportTransactionMode = TransportTransactionMode.ReceiveOnly
31-
};
32-
endpointConfiguration.UseTransport(transport);
31+
OpenTelemetryUtils.ConfigureOpenTelemetry("Billing", instanceId.ToString(), int.Parse(prometheusPortString));
32+
}
3333

34-
endpointConfiguration.Recoverability()
35-
.Delayed(delayed => delayed.NumberOfRetries(0));
34+
endpointControls.Start();
3635

37-
endpointConfiguration.AuditProcessedMessagesTo("audit");
38-
endpointConfiguration.SendHeartbeatTo("Particular.ServiceControl");
36+
ui.RunLoop(title);
3937

40-
endpointConfiguration.UniquelyIdentifyRunningInstance()
41-
.UsingCustomIdentifier(instanceId)
42-
.UsingCustomDisplayName(instanceName);
38+
await endpointControls.StopEndpoint();
4339

44-
var metrics = endpointConfiguration.EnableMetrics();
45-
metrics.SendMetricDataToServiceControl(
46-
"Particular.Monitoring",
47-
TimeSpan.FromMilliseconds(500)
48-
);
40+
EndpointConfiguration PrepareEndpointConfiguration(Guid guid, string s, string? prometheusPortString1)
41+
{
42+
var endpointConfiguration1 = new EndpointConfiguration("Billing");
43+
endpointConfiguration1.LimitMessageProcessingConcurrencyTo(4);
4944

50-
endpointConfiguration.UsePersistence<NonDurablePersistence>();
51-
endpointConfiguration.EnableOutbox();
45+
var serializer = endpointConfiguration1.UseSerialization<SystemJsonSerializer>();
46+
serializer.Options(new JsonSerializerOptions
47+
{
48+
TypeInfoResolverChain =
49+
{
50+
MessagesSerializationContext.Default
51+
}
52+
});
5253

53-
var failureSimulation = new FailureSimulation();
54-
failureSimulation.Register(endpointConfiguration);
54+
var transport = new LearningTransport
55+
{
56+
StorageDirectory = Path.Combine(Directory.GetParent(Assembly.GetExecutingAssembly().Location)!.Parent!.FullName, ".learningtransport"),
57+
TransportTransactionMode = TransportTransactionMode.ReceiveOnly
58+
};
59+
endpointConfiguration1.UseTransport(transport);
5560

56-
var simulationEffects = new SimulationEffects();
57-
endpointConfiguration.RegisterComponents(cc => cc.AddSingleton(simulationEffects));
61+
endpointConfiguration1.Recoverability()
62+
.Delayed(delayed => delayed.NumberOfRetries(0));
5863

59-
var endpointInstance = await Endpoint.Start(endpointConfiguration);
64+
endpointConfiguration1.AuditProcessedMessagesTo("audit");
65+
endpointConfiguration1.SendHeartbeatTo("Particular.ServiceControl");
6066

61-
UserInterface.RunLoop(title, new Dictionary<char, (string, Action)>
62-
{
63-
['w'] = ("increase the simulated failure rate", () => simulationEffects.IncreaseFailureRate()),
64-
['s'] = ("decrease the simulated failure rate", () => simulationEffects.DecreaseFailureRate())
65-
}, writer => simulationEffects.WriteState(writer));
67+
endpointConfiguration1.UniquelyIdentifyRunningInstance()
68+
.UsingCustomIdentifier(guid)
69+
.UsingCustomDisplayName(s);
70+
71+
var metrics = endpointConfiguration1.EnableMetrics();
72+
metrics.SendMetricDataToServiceControl(
73+
"Particular.Monitoring",
74+
TimeSpan.FromMilliseconds(500)
75+
);
76+
77+
endpointConfiguration1.UsePersistence<NonDurablePersistence>();
78+
endpointConfiguration1.EnableOutbox();
79+
80+
endpointConfiguration1.EnableOpenTelemetry();
6681

67-
await endpointInstance.Stop();
82+
return endpointConfiguration1;
83+
}

src/Billing/ProgressBar.cs

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/Billing/RetrievingMessageProgressBehavior.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)