Skip to content

Commit f0595de

Browse files
Copilotdandrejvv
andcommitted
Update AzureServiceBus and MassTransit to support IMessageBus and composite mode
Co-authored-by: dandrejvv <[email protected]>
1 parent 02c7f1e commit f0595de

File tree

6 files changed

+123
-12
lines changed

6 files changed

+123
-12
lines changed

Modules/Intent.Modules.Eventing.AzureServiceBus/Intent.Modules.Eventing.AzureServiceBus.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<ItemGroup>
99
<PackageReference Include="Intent.Modules.Common" Version="3.9.0" />
10-
<PackageReference Include="Intent.Modules.Common.CSharp" Version="3.8.3" />
10+
<PackageReference Include="Intent.Modules.Common.CSharp" Version="3.9.0" />
1111
<PackageReference Include="Intent.Modules.Eventing.Contracts" Version="5.2.0" />
1212
<PackageReference Include="Intent.Modules.Modelers.Eventing" Version="6.0.1" />
1313
<PackageReference Include="Intent.Modules.Modelers.Services" Version="3.10.0" />
@@ -23,6 +23,7 @@
2323
<ItemGroup>
2424
<ProjectReference Include="..\Intent.Modules.Constants\Intent.Modules.Constants.csproj" PrivateAssets="All" />
2525
<ProjectReference Include="..\Intent.Modules.Common.UnitOfWork\Intent.Modules.Common.UnitOfWork.csproj" PrivateAssets="All" />
26+
<ProjectReference Include="..\Intent.Modules.Eventing.Contracts\Intent.Modules.Eventing.Contracts.csproj" PrivateAssets="All" />
2627
</ItemGroup>
2728

2829
<Import Project="..\Intent.Modules.Eventing.Shared\Intent.Modules.Eventing.Shared.projitems" Label="Shared" />

Modules/Intent.Modules.Eventing.AzureServiceBus/Templates/AzureServiceBusConfiguration/AzureServiceBusConfigurationTemplatePartial.cs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,27 @@ public AzureServiceBusConfigurationTemplate(IOutputTarget outputTarget, object m
4747
method.AddParameter("IServiceCollection", "services", param => param.WithThisModifier());
4848
method.AddParameter("IConfiguration", "configuration");
4949

50+
var compositeTemplate = GetTemplate<ICSharpFileBuilderTemplate>(TemplateDependency.OnTemplate("Intent.Eventing.Contracts.CompositeMessageBusConfiguration"));
51+
var isCompositeMode = compositeTemplate != null;
52+
53+
if (isCompositeMode)
54+
{
55+
method.AddParameter(this.GetMessageBrokerRegistryName(), "registry");
56+
}
57+
5058
method.AddStatement($@"services.AddSingleton<ServiceBusClient>(sp => new ServiceBusClient(configuration[""AzureServiceBus:ConnectionString""]));");
5159

52-
method.AddStatement($"services.AddScoped<{this.GetEventBusInterfaceName()}, {this.GetAzureServiceBusEventBusName()}>();");
60+
if (isCompositeMode)
61+
{
62+
method.AddStatement($"// Register as concrete type for composite message bus");
63+
method.AddStatement($"services.AddScoped<{this.GetAzureServiceBusEventBusName()}>();");
64+
}
65+
else
66+
{
67+
method.AddStatement($"// Register as IMessageBus and IEventBus for standalone mode");
68+
method.AddStatement($"services.AddScoped<{this.GetMessageBusInterfaceName()}, {this.GetAzureServiceBusEventBusName()}>();");
69+
method.AddStatement($"services.AddScoped<{this.GetEventBusInterfaceName()}, {this.GetAzureServiceBusEventBusName()}>();");
70+
}
5371
method.AddStatement($"services.AddSingleton<{this.GetAzureServiceBusMessageDispatcherName()}>();");
5472
method.AddStatement($"services.AddSingleton<{this.GetAzureServiceBusMessageDispatcherInterfaceName()}, {this.GetAzureServiceBusMessageDispatcherName()}>();");
5573

@@ -86,6 +104,16 @@ public AzureServiceBusConfigurationTemplate(IOutputTarget outputTarget, object m
86104
}));
87105
}
88106

107+
if (isCompositeMode && publishers.Count != 0)
108+
{
109+
method.AddStatement("");
110+
method.AddStatement("// Register message types with the composite message bus registry");
111+
foreach (var item in publishers)
112+
{
113+
method.AddStatement($"registry.Register<{item.GetModelTypeName(this)}, {this.GetAzureServiceBusEventBusName()}>();");
114+
}
115+
}
116+
89117
method.AddStatement("return services;");
90118
});
91119
});

Modules/Intent.Modules.Eventing.AzureServiceBus/Templates/AzureServiceBusEventBus/AzureServiceBusEventBusTemplatePartial.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public AzureServiceBusEventBusTemplate(IOutputTarget outputTarget, object model
3636
.AddUsing("Microsoft.Extensions.Configuration")
3737
.AddClass($"AzureServiceBusEventBus", @class =>
3838
{
39-
@class.ImplementsInterface(this.GetEventBusInterfaceName());
39+
@class.ImplementsInterface(this.GetMessageBusInterfaceName());
4040
@class.AddField("List<object>", "_messageQueue", field => field.PrivateReadOnly().WithAssignment(new CSharpStatement("[]")));
4141
@class.AddField("Dictionary<string, string>", "_lookup", field => field.PrivateReadOnly());
4242

@@ -59,14 +59,34 @@ public AzureServiceBusEventBusTemplate(IOutputTarget outputTarget, object model
5959
method.AddStatement("_messageQueue.Add(message);");
6060
});
6161

62+
@class.AddMethod("void", "Publish", method =>
63+
{
64+
method.AddGenericParameter("T", out var T);
65+
method.AddGenericTypeConstraint(T, c => c.AddType("class"));
66+
method.AddParameter(T, "message");
67+
method.AddParameter("IDictionary<string, object>", "additionalData");
68+
69+
method.AddStatement("// Note: Azure Service Bus does not support additional data in this implementation, ignoring parameter");
70+
method.AddStatement("Publish(message);");
71+
});
72+
6273
@class.AddMethod("void", "Send", method =>
6374
{
6475
method.AddGenericParameter("T", out var T);
6576
method.AddGenericTypeConstraint(T, c => c.AddType("class"));
6677
method.AddParameter(T, "message");
6778

68-
method.AddStatement("ValidateMessage(message);");
69-
method.AddStatement("_messageQueue.Add(message);");
79+
method.AddStatement("Publish(message);");
80+
});
81+
82+
@class.AddMethod("void", "Send", method =>
83+
{
84+
method.AddGenericParameter("T", out var T);
85+
method.AddGenericTypeConstraint(T, c => c.AddType("class"));
86+
method.AddParameter(T, "message");
87+
method.AddParameter("IDictionary<string, object>", "additionalData");
88+
89+
method.AddStatement("Publish(message, additionalData);");
7090
});
7191

7292
@class.AddMethod("Task", "FlushAllAsync", method =>

Modules/Intent.Modules.Eventing.MassTransit/Intent.Modules.Eventing.MassTransit.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
<ItemGroup>
1717
<PackageReference Include="Intent.Modules.Common" Version="3.7.3" />
18-
<PackageReference Include="Intent.Modules.Common.CSharp" Version="3.8.3" />
18+
<PackageReference Include="Intent.Modules.Common.CSharp" Version="3.9.0" />
1919
<PackageReference Include="Intent.Modules.Eventing.Contracts" Version="5.0.3" />
20-
<PackageReference Include="Intent.Modules.Modelers.Eventing" Version="5.1.1" />
20+
<PackageReference Include="Intent.Modules.Modelers.Eventing" Version="6.0.1" />
2121
<PackageReference Include="Intent.Modules.Modelers.ServiceProxies" Version="5.0.3" />
2222
<PackageReference Include="Intent.Modules.Modelers.Services" Version="3.8.3" />
2323
<PackageReference Include="Intent.Modules.Modelers.Services.EventInteractions" Version="1.1.3" />
@@ -33,6 +33,7 @@
3333
<ItemGroup>
3434
<ProjectReference Include="..\Intent.Modules.Constants\Intent.Modules.Constants.csproj" PrivateAssets="All" />
3535
<ProjectReference Include="..\Intent.Modules.Common.UnitOfWork\Intent.Modules.Common.UnitOfWork.csproj" PrivateAssets="All" />
36+
<ProjectReference Include="..\Intent.Modules.Eventing.Contracts\Intent.Modules.Eventing.Contracts.csproj" PrivateAssets="All" />
3637
</ItemGroup>
3738

3839
<ItemGroup>

Modules/Intent.Modules.Eventing.MassTransit/Templates/MassTransitConfiguration/MassTransitConfigurationTemplatePartial.cs

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,25 @@ public MassTransitConfigurationTemplate(IOutputTarget outputTarget, object model
7575
method.Static();
7676
method.AddParameter("IServiceCollection", "services", param => param.WithThisModifier());
7777
method.AddParameter("IConfiguration", "configuration");
78-
method.AddStatements(GetContainerRegistrationStatements());
78+
79+
var compositeTemplate = GetTemplate<ICSharpFileBuilderTemplate>(TemplateDependency.OnTemplate("Intent.Eventing.Contracts.CompositeMessageBusConfiguration"));
80+
var isCompositeMode = compositeTemplate != null;
81+
82+
if (isCompositeMode)
83+
{
84+
method.AddParameter(this.GetMessageBrokerRegistryName(), "registry");
85+
}
86+
87+
method.AddStatements(GetContainerRegistrationStatements(isCompositeMode));
7988
method.AddInvocationStatement("services.AddMassTransit", stmt => stmt
8089
.AddArgument(GetConfigurationForAddMassTransit("configuration"))
8190
.AddMetadata("configure-masstransit", true)
8291
.SeparatedFromPrevious());
92+
93+
if (isCompositeMode)
94+
{
95+
AddRegistryRegistrations(method);
96+
}
8397
});
8498
AddMessageTopologyConfiguration(@class);
8599
AddConsumers(@class);
@@ -190,15 +204,42 @@ private IReadOnlyList<MessageModel> GetApplicableMessages()
190204
return result;
191205
}
192206

193-
private IEnumerable<CSharpStatement> GetContainerRegistrationStatements()
207+
private IEnumerable<CSharpStatement> GetContainerRegistrationStatements(bool isCompositeMode = false)
194208
{
195209
var statements = new List<CSharpStatement>();
196210

197-
statements.Add($@"services.AddScoped<{this.GetMassTransitEventBusName()}>();");
198-
statements.Add($@"services.AddScoped<{this.GetEventBusInterfaceName()}>(provider => provider.GetRequiredService<{this.GetMassTransitEventBusName()}>());");
211+
if (isCompositeMode)
212+
{
213+
statements.Add("// Register as concrete type for composite message bus");
214+
statements.Add($@"services.AddScoped<{this.GetMassTransitEventBusName()}>();");
215+
}
216+
else
217+
{
218+
statements.Add("// Register as IMessageBus and IEventBus for standalone mode");
219+
statements.Add($@"services.AddScoped<{this.GetMassTransitEventBusName()}>();");
220+
statements.Add($@"services.AddScoped<{this.GetMessageBusInterfaceName()}>(provider => provider.GetRequiredService<{this.GetMassTransitEventBusName()}>());");
221+
statements.Add($@"services.AddScoped<{this.GetEventBusInterfaceName()}>(provider => provider.GetRequiredService<{this.GetMassTransitEventBusName()}>());");
222+
}
199223

200224
return statements;
201225
}
226+
227+
private void AddRegistryRegistrations(CSharpClassMethod method)
228+
{
229+
var publishedMessages = _applicableMessages.Where(m =>
230+
m.InternalElement.GetStereotypeProperty<string>("Eventing Settings", "Publish To") == "MassTransit"
231+
).ToList();
232+
233+
if (publishedMessages.Any())
234+
{
235+
method.AddStatement("");
236+
method.AddStatement("// Register message types with the composite message bus registry");
237+
foreach (var message in publishedMessages)
238+
{
239+
method.AddStatement($"registry.Register<{GetTypeName(IntegrationEventMessageTemplate.TemplateId, message)}, {this.GetMassTransitEventBusName()}>();");
240+
}
241+
}
242+
}
202243

203244
private CSharpLambdaBlock GetConfigurationForAddMassTransit(string configurationVarName)
204245
{

Modules/Intent.Modules.Eventing.MassTransit/Templates/MassTransitEventBus/MassTransitEventBusTemplatePartial.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public MassTransitEventBusTemplate(IOutputTarget outputTarget, object model = nu
3333
.AddUsing("Microsoft.Extensions.DependencyInjection")
3434
.AddClass("MassTransitEventBus", @class =>
3535
{
36-
@class.ImplementsInterface(this.GetEventBusInterfaceName());
36+
@class.ImplementsInterface(this.GetMessageBusInterfaceName());
3737
@class.AddNestedClass("MessageToSend", nested =>
3838
{
3939
nested
@@ -72,6 +72,16 @@ public MassTransitEventBusTemplate(IOutputTarget outputTarget, object model = nu
7272
.AddStatement("_messagesToPublish.Add(message);");
7373
});
7474

75+
@class.AddMethod("void", "Publish", method =>
76+
{
77+
method.AddGenericParameter("T", out var T)
78+
.AddGenericTypeConstraint(T, c => c.AddType("class"))
79+
.AddParameter(T, "message")
80+
.AddParameter("IDictionary<string, object>", "additionalData")
81+
.AddStatement("// Note: MassTransit does not support additional data in this implementation, ignoring parameter")
82+
.AddStatement("Publish(message);");
83+
});
84+
7585
@class.AddMethod("void", "Send", method =>
7686
{
7787
method.AddGenericParameter("T", out var T)
@@ -80,6 +90,16 @@ public MassTransitEventBusTemplate(IOutputTarget outputTarget, object model = nu
8090
.AddStatement("_messagesToSend.Add(new MessageToSend(message, null));");
8191
});
8292

93+
@class.AddMethod("void", "Send", method =>
94+
{
95+
method.AddGenericParameter("T", out var T)
96+
.AddGenericTypeConstraint(T, c => c.AddType("class"))
97+
.AddParameter(T, "message")
98+
.AddParameter("IDictionary<string, object>", "additionalData")
99+
.AddStatement("// Note: MassTransit does not support additional data in this implementation, ignoring parameter")
100+
.AddStatement("Send(message);");
101+
});
102+
83103
@class.AddMethod("void", "Send", method =>
84104
{
85105
method.AddGenericParameter("T", out var T)

0 commit comments

Comments
 (0)