From 07648117dc476c9ce7642072224a399f40af4fbe Mon Sep 17 00:00:00 2001 From: YaChengMu <1140049363@qq.com> Date: Thu, 14 Oct 2021 02:08:30 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=80=BB=E7=BA=BF=E5=B9=B6=E5=8F=91=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B=E8=B0=83=E7=94=A8=E5=AE=8C=E6=88=90=E5=90=8E?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E5=A4=84=E7=90=86=E9=98=9F?= =?UTF-8?q?=E5=88=97=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- framework/Furion/EventBridge/Event.cs | 6 ++++-- .../EventBridge/Internal/EventDispatcher.cs | 4 ++-- .../Furion/EventBridge/Models/EventMessage.cs | 16 ++++++++++++---- .../EventBridge/Models/EventMessageMetadata.cs | 7 ++++++- .../EventBridge/Providers/IEventStoreProvider.cs | 5 +++-- .../Providers/MemoryEventStoreProvider.cs | 9 +++++---- 6 files changed, 32 insertions(+), 15 deletions(-) diff --git a/framework/Furion/EventBridge/Event.cs b/framework/Furion/EventBridge/Event.cs index cb17a0177f..17276ea825 100644 --- a/framework/Furion/EventBridge/Event.cs +++ b/framework/Furion/EventBridge/Event.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. +// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. // Furion is licensed under Mulan PSL v2. // You can use this software according to the terms and conditions of the Mulan PSL v2. // You may obtain a copy of Mulan PSL v2 at: @@ -7,6 +7,7 @@ // See the Mulan PSL v2 for more details. using Furion.DependencyInjection; +using Furion.DistributedIDGenerator; using Furion.Extensions; using Furion.IPCChannel; using Furion.JsonSerialization; @@ -61,6 +62,7 @@ namespace Furion.EventBridge CreatedTime = DateTimeOffset.UtcNow, TypeFullName = eventHandlerMetadata.TypeFullName, EventId = eventCombines[1], + MessageId = IDGen.NextID().ToString(), Payload = nonPayload ? default : (payloadType.IsValueType ? payload.ToString() : JSON.Serialize(payload)), PayloadAssemblyName = nonPayload ? default : Reflect.GetAssemblyName(payloadType), PayloadTypeFullName = nonPayload ? default : payloadType.FullName, @@ -101,7 +103,7 @@ namespace Furion.EventBridge { // 反射创建承载数据 var payload = DeserializePayload(eventMessageMetadata); - await ChannelContext.BoundedChannel.Writer.WriteAsync(new EventMessage(eventMessageMetadata.Category, eventMessageMetadata.EventId, payload)); + await ChannelContext.BoundedChannel.Writer.WriteAsync(new EventMessage(eventMessageMetadata.Category, eventMessageMetadata.EventId, eventMessageMetadata.MessageId, payload)); } /// diff --git a/framework/Furion/EventBridge/Internal/EventDispatcher.cs b/framework/Furion/EventBridge/Internal/EventDispatcher.cs index a583bbfc34..4c8dc1a368 100644 --- a/framework/Furion/EventBridge/Internal/EventDispatcher.cs +++ b/framework/Furion/EventBridge/Internal/EventDispatcher.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. +// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. // Furion is licensed under Mulan PSL v2. // You can use this software according to the terms and conditions of the Mulan PSL v2. // You may obtain a copy of Mulan PSL v2 at: @@ -37,7 +37,7 @@ namespace Furion.EventBridge // 解析事件消息元数据 var eventStoreProvider = scoped.ServiceProvider.GetService(); - var eventMessageMetadata = await eventStoreProvider?.GetEventMessageAsync(eventMessage.Category, eventMessage.EventId); + var eventMessageMetadata = await eventStoreProvider?.GetEventMessageAsync(eventMessage.Category, eventMessage.EventId, eventMessage.MessageId); if (eventMessageMetadata == null) return; // 获取解析事件处理程序服务委托并创建事件处理程序 diff --git a/framework/Furion/EventBridge/Models/EventMessage.cs b/framework/Furion/EventBridge/Models/EventMessage.cs index ec4fed0cc4..78b06c9cd1 100644 --- a/framework/Furion/EventBridge/Models/EventMessage.cs +++ b/framework/Furion/EventBridge/Models/EventMessage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. +// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. // Furion is licensed under Mulan PSL v2. // You can use this software according to the terms and conditions of the Mulan PSL v2. // You may obtain a copy of Mulan PSL v2 at: @@ -21,9 +21,10 @@ namespace Furion.EventBridge /// /// /// + /// /// - public EventMessage(string category, string eventId, object payload = default) - : base(category, eventId, payload) + public EventMessage(string category, string eventId,string messageId, object payload = default) + : base(category, eventId, messageId, payload) { } } @@ -39,11 +40,13 @@ namespace Furion.EventBridge /// /// /// + /// /// - public EventMessage(string category, string eventId, TPayload payload = default) + public EventMessage(string category, string eventId,string messageId, TPayload payload = default) { Category = category; EventId = eventId; + MessageId = messageId; Payload = payload; } @@ -52,6 +55,11 @@ namespace Furion.EventBridge /// public string EventId { get; set; } + /// + /// 消息唯一标识 + /// + public string MessageId { get; set; } + /// /// 事件类别 /// diff --git a/framework/Furion/EventBridge/Models/EventMessageMetadata.cs b/framework/Furion/EventBridge/Models/EventMessageMetadata.cs index c1c4428658..d37fd059b6 100644 --- a/framework/Furion/EventBridge/Models/EventMessageMetadata.cs +++ b/framework/Furion/EventBridge/Models/EventMessageMetadata.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. +// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. // Furion is licensed under Mulan PSL v2. // You can use this software according to the terms and conditions of the Mulan PSL v2. // You may obtain a copy of Mulan PSL v2 at: @@ -28,6 +28,11 @@ namespace Furion.EventBridge /// public string EventId { get; internal set; } + /// + /// 消息唯一标识 + /// + public string MessageId { get; internal set; } + /// /// 承载数据值(进行序列化存储) /// diff --git a/framework/Furion/EventBridge/Providers/IEventStoreProvider.cs b/framework/Furion/EventBridge/Providers/IEventStoreProvider.cs index 774facf094..5ad8f831e3 100644 --- a/framework/Furion/EventBridge/Providers/IEventStoreProvider.cs +++ b/framework/Furion/EventBridge/Providers/IEventStoreProvider.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. +// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. // Furion is licensed under Mulan PSL v2. // You can use this software according to the terms and conditions of the Mulan PSL v2. // You may obtain a copy of Mulan PSL v2 at: @@ -42,8 +42,9 @@ namespace Furion.EventBridge /// /// /// + /// 消息唯一Id /// - Task GetEventMessageAsync(string category, string eventId); + Task GetEventMessageAsync(string category, string eventId, string messageId); /// /// 成功执行一条消息 diff --git a/framework/Furion/EventBridge/Providers/MemoryEventStoreProvider.cs b/framework/Furion/EventBridge/Providers/MemoryEventStoreProvider.cs index d15c9aa831..91284a7b3a 100644 --- a/framework/Furion/EventBridge/Providers/MemoryEventStoreProvider.cs +++ b/framework/Furion/EventBridge/Providers/MemoryEventStoreProvider.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. +// Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. // Furion is licensed under Mulan PSL v2. // You can use this software according to the terms and conditions of the Mulan PSL v2. // You may obtain a copy of Mulan PSL v2 at: @@ -68,7 +68,7 @@ namespace Furion.EventBridge /// public async Task AppendEventMessageAsync(EventMessageMetadata eventMessageMetadata) { - EventMessageStore.AddOrUpdate($"{eventMessageMetadata.Category}:{eventMessageMetadata.EventId}", eventMessageMetadata, (key, value) => eventMessageMetadata); + EventMessageStore.AddOrUpdate($"{eventMessageMetadata.Category}:{eventMessageMetadata.EventId}:{eventMessageMetadata.MessageId}", eventMessageMetadata, (key, value) => eventMessageMetadata); await Event.EmitAsync(eventMessageMetadata); } @@ -77,10 +77,11 @@ namespace Furion.EventBridge /// /// /// + /// 事件唯一Id /// - public Task GetEventMessageAsync(string category, string eventId) + public Task GetEventMessageAsync(string category, string eventId, string messageId) { - var eventIdMetadata = EventMessageStore.TryGetValue($"{category}:{eventId}", out var value) ? value : default; + var eventIdMetadata = EventMessageStore.TryGetValue($"{category}:{eventId}:{messageId}", out var value) ? value : default; return Task.FromResult(eventIdMetadata); } -- Gitee