Skip to content

Commit 9c12f84

Browse files
committed
Add IdenttiyServer.Messaging.Azure
1 parent 2dcf002 commit 9c12f84

14 files changed

+144
-196
lines changed

All.sln

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{17CDA34C-429
77
EndProject
88
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IdentityServer", "IdentityServer", "{D264CAEC-2137-46D8-B637-FCE7CBE3B390}"
99
EndProject
10-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Messaging.AzureServiceBus", "src\IdentityServer\Messaging.AzureServiceBus\Messaging.AzureServiceBus.csproj", "{C8F188CA-2671-4364-B53C-43832627C0DA}"
10+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Messaging.Azure", "src\IdentityServer\Messaging.Azure\Messaging.Azure.csproj", "{C8F188CA-2671-4364-B53C-43832627C0DA}"
1111
EndProject
1212
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Messaging.RabbitMQ", "src\IdentityServer\Messaging.RabbitMQ\Messaging.RabbitMQ.csproj", "{9C1A424A-64A5-4BAA-BCE5-529F2148497F}"
1313
EndProject

src/IdentityServer/Messaging.AzureEventHub/EventHubSender.cs renamed to src/IdentityServer/Messaging.Azure/EventHubSender.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
using MassTransit;
88
using Microsoft.Extensions.Hosting;
99

10-
namespace IdOps.IdentityServer.AzureEventHub;
10+
namespace IdOps.IdentityServer.Azure;
1111

1212
public sealed class EventHubSender : BackgroundService, IEventSenderWorker
1313
{
@@ -26,15 +26,15 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
2626
{
2727
await Task.Yield();
2828

29-
var producer = await _producerProvider.GetProducer("identity-events");
29+
IEventHubProducer producer = await _producerProvider.GetProducer("identity-events");
3030

3131
// we reuse the buffer to avoid allocations
3232
var buffer = new IdentityEventMessage[50];
3333
try
3434
{
3535
while (await _channelReader.WaitToReadAsync(stoppingToken))
3636
{
37-
// we read as many messages as we can
37+
// we read as many messages as we can
3838
for (var i = 0; i < buffer.Length; i++)
3939
{
4040
if (!_channelReader.TryRead(out IdentityEventMessage? entity))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
using System;
2+
using Azure.Identity;
3+
using IdOps.IdentityServer.Abstractions;
4+
using IdOps.IdentityServer.Azure;
5+
using MassTransit;
6+
using Microsoft.Extensions.Configuration;
7+
using Microsoft.Extensions.DependencyInjection;
8+
using static IdOps.IdentityServer.Wellknown.ConfigSections;
9+
10+
namespace IdOps.IdentityServer.Azure
11+
{
12+
public static class AzureServiceBusIdOpsBuilderExtensions
13+
{
14+
public static IIdOpsIdentityServerBuilder UseAzure(this BusBuilder builder)
15+
{
16+
AzureOptions? options = builder
17+
.IdOpsBuilder.Configuration?.GetSection($"{Messaging}:Azure")
18+
.Get<AzureOptions>();
19+
20+
if (options == null)
21+
{
22+
throw new ApplicationException(
23+
"Could not get AzureOptions configuration from "
24+
+ $"{Messaging}:Azure."
25+
+ "Please check you configuration");
26+
}
27+
28+
return builder.UseAzure(options);
29+
}
30+
31+
private static IIdOpsIdentityServerBuilder UseAzure(
32+
this BusBuilder builder,
33+
AzureOptions options)
34+
{
35+
if (options.EventHub is not null)
36+
{
37+
builder.IdOpsBuilder.Services.AddSingleton<IEventSenderWorker, EventHubSender>();
38+
}
39+
40+
builder.IdOpsBuilder.Services.AddMassTransit(s =>
41+
{
42+
builder.BusSetup?.Invoke(s);
43+
44+
if (options.ServiceBus is { })
45+
{
46+
s.RegisterServiceBus(options.ServiceBus, builder);
47+
}
48+
49+
if (options.EventHub is { } eventHub)
50+
{
51+
s.RegisterEventHub(eventHub);
52+
}
53+
});
54+
55+
return builder.IdOpsBuilder;
56+
}
57+
58+
private static void RegisterEventHub(
59+
this IBusRegistrationConfigurator configurator,
60+
EventHubOptions eventHub)
61+
{
62+
configurator.AddRider(x =>
63+
x.UsingEventHub((_, k) =>
64+
{
65+
if (eventHub.Namespace is { } @namespace)
66+
{
67+
k.Host(@namespace, new DefaultAzureCredential());
68+
}
69+
else if (eventHub.ConnectionString is not null)
70+
{
71+
k.Host(eventHub.ConnectionString);
72+
}
73+
else
74+
{
75+
throw new ApplicationException(
76+
"EventHub configuration is missing. Please check your settings.");
77+
}
78+
79+
if (eventHub.Storage is { } storageOption)
80+
{
81+
if (storageOption.Url is { } url)
82+
{
83+
k.Storage(new Uri(url), new DefaultAzureCredential());
84+
}
85+
else if (storageOption.ConnectionString is { } connectionString)
86+
{
87+
k.Storage(connectionString);
88+
}
89+
else
90+
{
91+
throw new ApplicationException(
92+
"EventHub storage configuration is missing. Please check your settings.");
93+
}
94+
}
95+
})
96+
);
97+
}
98+
99+
private static void RegisterServiceBus(
100+
this IBusRegistrationConfigurator configurator,
101+
AzureServiceBusOptions options,
102+
BusBuilder builder)
103+
{
104+
configurator.UsingAzureServiceBus((provider, cfg) =>
105+
{
106+
var serverGroup = builder.IdOpsBuilder.Options!.ServerGroup.ToLower();
107+
var environmentName = builder.IdOpsBuilder.Options!.EnvironmentName.ToLower();
108+
cfg.Host(options.ConnectionString);
109+
cfg.ReceiveEndpoint(
110+
$"id-{serverGroup}-{environmentName}",
111+
e =>
112+
{
113+
e.ConfigureConsumers(provider);
114+
e.PrefetchCount = options.PrefetchCount;
115+
});
116+
});
117+
}
118+
}
119+
}

src/IdentityServer/Messaging.AzureServiceBus/Messaging.AzureServiceBus.csproj renamed to src/IdentityServer/Messaging.Azure/Messaging.Azure.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<ItemGroup>
1111
<PackageReference Include="MassTransit.Azure.ServiceBus.Core" />
1212
<PackageReference Update="Microsoft.SourceLink.GitHub" />
13+
<PackageReference Include="Masstransit.EventHub"/>
1314
</ItemGroup>
1415

1516
<ItemGroup>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace IdOps.IdentityServer.Azure;
2+
3+
public sealed class AzureOptions
4+
{
5+
public AzureServiceBusOptions? ServiceBus { get; set; } = default!;
6+
public EventHubOptions? EventHub { get; set; } = default!;
7+
}
8+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace IdOps.IdentityServer.Azure;
2+
3+
public class AzureServiceBusOptions
4+
{
5+
public string ConnectionString { get; set; } = default!;
6+
7+
public int PrefetchCount { get; set; } = 10;
8+
}
9+
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace IdOps.IdentityServer.AzureEventHub;
1+
namespace IdOps.IdentityServer.Azure;
22

33
public class EventHubOptions
44
{
@@ -7,4 +7,4 @@ public class EventHubOptions
77
public string? Namespace { get; set; }
88

99
public EventStorageHubOptions? Storage { get; set; }
10-
}
10+
}

src/IdentityServer/Messaging.AzureEventHub/EventStorageHubOptions.cs renamed to src/IdentityServer/Messaging.Azure/Options/EventStorageHubOptions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace IdOps.IdentityServer.AzureEventHub;
1+
namespace IdOps.IdentityServer.Azure;
22

33
public sealed class EventStorageHubOptions
44
{

src/IdentityServer/Messaging.AzureEventHub/EventHubIdOpsBuilderExtensions.cs

-85
This file was deleted.

src/IdentityServer/Messaging.AzureEventHub/Messaging.AzureEventHub.csproj

-19
This file was deleted.

src/IdentityServer/Messaging.AzureServiceBus/AzureServiceBusIdOpsBuilderExtensions.cs

-62
This file was deleted.

src/IdentityServer/Messaging.AzureServiceBus/AzureServiceBusOptions.cs

-15
This file was deleted.

0 commit comments

Comments
 (0)