From d221e90c8978f6eb3fbbe058da50fe8b220e05c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Wed, 4 Mar 2026 14:46:06 +0300 Subject: [PATCH] Support anonymous Dapr events and use dynamic inbox key Add support for anonymous events in the ASP.NET Core Dapr event bus module: when a topic is identified as anonymous, deserialize payloads as object and forward them as AnonymousEventData to handlers. In DaprDistributedEventBus, use GetEventName(eventType, eventData) when adding to the inbox (so dynamic/topic-based names are respected) and expose IsAnonymousEvent(eventName) to detect anonymous topics. --- .../Dapr/EventBus/AbpAspNetCoreMvcDaprEventBusModule.cs | 8 ++++++++ .../Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo/Abp/AspNetCore/Mvc/Dapr/EventBus/AbpAspNetCoreMvcDaprEventBusModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo/Abp/AspNetCore/Mvc/Dapr/EventBus/AbpAspNetCoreMvcDaprEventBusModule.cs index fba9e12707..f770f5fbb2 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo/Abp/AspNetCore/Mvc/Dapr/EventBus/AbpAspNetCoreMvcDaprEventBusModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo/Abp/AspNetCore/Mvc/Dapr/EventBus/AbpAspNetCoreMvcDaprEventBusModule.cs @@ -102,6 +102,10 @@ public class AbpAspNetCoreMvcDaprEventBusModule : AbpModule { var eventData = daprSerializer.Deserialize(daprEventData.JsonData, eventType); await distributedEventBus.TriggerHandlersAsync(eventType, eventData, daprEventData.MessageId, daprEventData.CorrelationId); + }else if (distributedEventBus.IsAnonymousEvent(daprEventData.Topic)) + { + var eventData = daprSerializer.Deserialize(daprEventData.JsonData, typeof(object)); + await distributedEventBus.TriggerHandlersAsync(typeof(AnonymousEventData), new AnonymousEventData(daprEventData.Topic, eventData), daprEventData.MessageId, daprEventData.CorrelationId); } } else @@ -111,6 +115,10 @@ public class AbpAspNetCoreMvcDaprEventBusModule : AbpModule { var eventData = daprSerializer.Deserialize(data, eventType); await distributedEventBus.TriggerHandlersAsync(eventType, eventData); + }else if (distributedEventBus.IsAnonymousEvent(topic)) + { + var eventData = daprSerializer.Deserialize(data, typeof(object)); + await distributedEventBus.TriggerHandlersAsync(typeof(AnonymousEventData), new AnonymousEventData(topic, eventData)); } } diff --git a/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs index 62789a8408..1231daf632 100644 --- a/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs @@ -217,7 +217,7 @@ public class DaprDistributedEventBus : DistributedEventBusBase, ISingletonDepend public virtual async Task TriggerHandlersAsync(Type eventType, object eventData, string? messageId = null, string? correlationId = null) { - if (await AddToInboxAsync(messageId, EventNameAttribute.GetNameOrDefault(eventType), eventType, eventData, correlationId)) + if (await AddToInboxAsync(messageId, GetEventName(eventType, eventData), eventType, eventData, correlationId)) { return; } @@ -324,6 +324,11 @@ public class DaprDistributedEventBus : DistributedEventBusBase, ISingletonDepend { return EventTypes.GetOrDefault(eventName); } + + public bool IsAnonymousEvent(string eventName) + { + return AnonymousHandlerFactories.ContainsKey(eventName); + } /// public override void Unsubscribe(string eventName, IEventHandlerFactory factory)