Improved enterprise service (#493)

This commit is contained in:
Thorsten Sommer authored and GitHub committed 2025-06-02 20:08:25 +02:00
1 parent fcf511cea8
commit 6979a73e5c
12 files changed
+191 -118

No files matched your search

+14 -1
View File
@@ -15,9 +15,17 @@ public sealed class MessageBus
private readonly ConcurrentQueue<Message> messageQueue = new();
private readonly SemaphoreSlim sendingSemaphore = new(1, 1);
private static ILogger<MessageBus>? LOG;
private MessageBus()
{
}
public void Initialize(ILogger<MessageBus> logger)
{
LOG = logger;
LOG.LogInformation("Message bus initialized.");
}
/// <summary>
/// Define for which components and events you want to receive messages.
@@ -48,7 +56,7 @@ public sealed class MessageBus
public async Task SendMessage<T>(ComponentBase? sendingComponent, Event triggeredEvent, T? data = default)
{
this.messageQueue.Enqueue(new Message(sendingComponent, triggeredEvent, data));
try
{
await this.sendingSemaphore.WaitAsync();
@@ -61,11 +69,16 @@ public sealed class MessageBus
var eventFilter = this.componentEvents[receiver];
if (eventFilter.Length == 0 || eventFilter.Contains(triggeredEvent))
// We don't await the task here because we don't want to block the message bus:
_ = receiver.ProcessMessage(message.SendingComponent, message.TriggeredEvent, message.Data);
}
}
}
catch (Exception e)
{
LOG?.LogError(e, "Error while sending message.");
}
finally
{
this.sendingSemaphore.Release();