Skip to content

Commit 02c7f1e

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

File tree

3 files changed

+64
-9
lines changed

3 files changed

+64
-9
lines changed

Modules/Intent.Modules.Eventing.AzureQueueStorage/Intent.Modules.Eventing.AzureQueueStorage.csproj

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

77
<ItemGroup>
88
<PackageReference Include="Intent.Modules.Common" Version="3.8.0" />
9-
<PackageReference Include="Intent.Modules.Common.CSharp" Version="3.8.3" />
9+
<PackageReference Include="Intent.Modules.Common.CSharp" Version="3.9.0" />
1010
<PackageReference Include="Intent.Modules.Common.UnitOfWork" Version="1.0.2" />
1111
<PackageReference Include="Intent.Modules.Eventing.Contracts" Version="5.2.0" />
1212
<PackageReference Include="Intent.Modules.Modelers.Eventing" Version="6.0.1" />
@@ -21,6 +21,7 @@
2121

2222
<ItemGroup>
2323
<ProjectReference Include="..\Intent.Modules.Constants\Intent.Modules.Constants.csproj" PrivateAssets="All" />
24+
<ProjectReference Include="..\Intent.Modules.Eventing.Contracts\Intent.Modules.Eventing.Contracts.csproj" PrivateAssets="All" />
2425
</ItemGroup>
2526

2627
<ItemGroup>

Modules/Intent.Modules.Eventing.AzureQueueStorage/Templates/AzureQueueStorageConfiguration/AzureQueueStorageConfigurationTemplatePartial.cs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,25 @@ public AzureQueueStorageConfigurationTemplate(IOutputTarget outputTarget, object
5757
mth.AddParameter(UseType("Microsoft.Extensions.DependencyInjection.IServiceCollection"), "services", @param => param.WithThisModifier())
5858
.AddParameter(UseType("Microsoft.Extensions.Configuration.IConfiguration"), "configuration");
5959

60-
mth.AddStatement($"services.AddScoped<{this.GetEventBusInterfaceName()}, {this.GetAzureQueueStorageEventBusName()}>();");
60+
var compositeTemplate = GetTemplate<ICSharpFileBuilderTemplate>(TemplateDependency.OnTemplate("Intent.Eventing.Contracts.CompositeMessageBusConfiguration"));
61+
var isCompositeMode = compositeTemplate != null;
62+
63+
if (isCompositeMode)
64+
{
65+
mth.AddParameter(this.GetMessageBrokerRegistryName(), "registry");
66+
}
67+
68+
if (isCompositeMode)
69+
{
70+
mth.AddStatement($"// Register as concrete type for composite message bus");
71+
mth.AddStatement($"services.AddScoped<{this.GetAzureQueueStorageEventBusName()}>();");
72+
}
73+
else
74+
{
75+
mth.AddStatement($"// Register as IMessageBus and IEventBus for standalone mode");
76+
mth.AddStatement($"services.AddScoped<{this.GetMessageBusInterfaceName()}, {this.GetAzureQueueStorageEventBusName()}>();");
77+
mth.AddStatement($"services.AddScoped<{this.GetEventBusInterfaceName()}, {this.GetAzureQueueStorageEventBusName()}>();");
78+
}
6179

6280
mth.AddInvocationStatement($"services.AddOptions<{this.GetAzureQueueStorageOptionsName()}>", invoc =>
6381
{
@@ -105,6 +123,28 @@ public AzureQueueStorageConfigurationTemplate(IOutputTarget outputTarget, object
105123
}
106124
});
107125

126+
if (isCompositeMode)
127+
{
128+
var publishedMessages = this.GetPublishedMessages();
129+
var sentCommands = this.GetSentIntegrationCommands();
130+
131+
if (publishedMessages.Any() || sentCommands.Any())
132+
{
133+
mth.AddStatement("");
134+
mth.AddStatement("// Register message types with the composite message bus registry");
135+
136+
foreach (var message in publishedMessages)
137+
{
138+
mth.AddStatement($"registry.Register<{GetTypeName(IntegrationEventMessageTemplate.TemplateId, message)}, {this.GetAzureQueueStorageEventBusName()}>();");
139+
}
140+
141+
foreach (var command in sentCommands)
142+
{
143+
mth.AddStatement($"registry.Register<{GetTypeName(IntegrationCommandTemplate.TemplateId, command)}, {this.GetAzureQueueStorageEventBusName()}>();");
144+
}
145+
}
146+
}
147+
108148
if (this.GetSubscribedMessageCount() > 0 && ExecutionContext.FindTemplateInstance<IAppStartupTemplate>(IAppStartupTemplate.RoleName) != null)
109149
{
110150
mth.AddStatement($"services.AddHostedService<{this.GetAzureQueueStorageConsumerBackgroundServiceName()}>();");

Modules/Intent.Modules.Eventing.AzureQueueStorage/Templates/AzureQueueStorageEventBus/AzureQueueStorageEventBusTemplatePartial.cs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public AzureQueueStorageEventBusTemplate(IOutputTarget outputTarget, object mode
2929
CSharpFile = new CSharpFile(this.GetNamespace(), this.GetFolderPath())
3030
.AddClass($"AzureQueueStorageEventBus", @class =>
3131
{
32-
@class.ImplementsInterface(this.GetEventBusInterfaceName());
32+
@class.ImplementsInterface(this.GetMessageBusInterfaceName());
3333

3434
@class.AddField($"{UseType("System.Collections.Generic.List")}<{this.GetAzureQueueStorageEnvelopeName()}>", "_messageQueue", @field =>
3535
{
@@ -163,19 +163,33 @@ public AzureQueueStorageEventBusTemplate(IOutputTarget outputTarget, object mode
163163
});
164164
});
165165

166+
@class.AddMethod("void", "Publish", mth =>
167+
{
168+
mth.AddGenericParameter("T", out var genT).AddGenericTypeConstraint(genT, gen => gen.AddType("class"));
169+
mth.AddParameter(genT, "message");
170+
mth.AddParameter($"{UseType("System.Collections.Generic.IDictionary")}<string, object>", "additionalData");
171+
172+
mth.AddStatement("// Note: Azure Queue Storage does not support additional data, ignoring parameter");
173+
mth.AddInvocationStatement("Publish", invoc => invoc.AddArgument("message"));
174+
});
175+
166176
@class.AddMethod("void", "Send", mth =>
167177
{
168178
mth.AddGenericParameter("T", out var T);
169179
mth.AddGenericTypeConstraint(T, c => c.AddType("class"));
170180
mth.AddParameter(T, "message");
171181

172-
mth.AddStatement("ValidateMessage(message);");
182+
mth.AddStatement("Publish(message);");
183+
});
184+
185+
@class.AddMethod("void", "Send", mth =>
186+
{
187+
mth.AddGenericParameter("T", out var T);
188+
mth.AddGenericTypeConstraint(T, c => c.AddType("class"));
189+
mth.AddParameter(T, "message");
190+
mth.AddParameter($"{UseType("System.Collections.Generic.IDictionary")}<string, object>", "additionalData");
173191

174-
mth.AddInvocationStatement("_messageQueue.Add", invoc =>
175-
{
176-
invoc.AddArgument(new CSharpInvocationStatement($"new {this.GetAzureQueueStorageEnvelopeName()}")
177-
.AddArgument("message").WithoutSemicolon());
178-
});
192+
mth.AddStatement("Publish(message, additionalData);");
179193
});
180194

181195
@class.AddMethod("void", "ValidateMessage", mth =>

0 commit comments

Comments
 (0)