From 1a1f45307310eba03270a0e1cf0b975595294fa6 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Wed, 7 May 2025 14:54:22 +0800
Subject: [PATCH 01/19] =?UTF-8?q?change-namespace:=E9=A2=84=E8=AD=A6?=
=?UTF-8?q?=E4=BF=A1=E5=8F=B7=E6=A8=A1=E5=9E=8B=E7=A7=BB=E5=8A=A8=E6=96=87?=
=?UTF-8?q?=E4=BB=B6=E5=A4=B9=EF=BC=8C=E8=BF=81=E7=A7=BB=E5=91=BD=E5=90=8D?=
=?UTF-8?q?=E7=A9=BA=E9=97=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../CAP/EventHandlers/TrackDeleteEventHandler.cs | 2 +-
.../CAP/EventHandlers/TrackUpsertEventHandler.cs | 2 +-
.../Services/Warning/Handlers/CompleteWarningHandler.cs | 2 +-
.../Services/Warning/Handlers/ICompleteWarningHandler.cs | 2 +-
.../Services/Warning/Handlers/IReturnWarningHandler.cs | 2 +-
.../Services/Warning/Handlers/ITransportWarningHandler.cs | 2 +-
.../Services/Warning/Handlers/ReturnWarningHandler.cs | 2 +-
.../Services/Warning/Handlers/TransportWarningHandler.cs | 2 +-
.../Services/Warning}/Signals/TrackSignal.cs | 2 +-
.../Services/Warning}/Signals/WarningSignalType.cs | 2 +-
10 files changed, 10 insertions(+), 10 deletions(-)
rename src/{SJZY.Track.Domain/Aggregates/WarningAggregate => SJZY.Track.Application/Services/Warning}/Signals/TrackSignal.cs (94%)
rename src/{SJZY.Track.Domain/Aggregates/WarningAggregate => SJZY.Track.Application/Services/Warning}/Signals/WarningSignalType.cs (61%)
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index d07a72d4..06780be1 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -6,9 +6,9 @@ using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Application.Services.Warning.Handlers;
+using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
-using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
using SJZY.Track.Domain.Enums;
using SJZY.Track.Domain.Extensions;
using SJZY.Track.Domain.Queries;
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index 1892b3c2..bef93816 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -6,9 +6,9 @@ using SJZY.OTel;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Application.Services.Warning.Handlers;
+using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
-using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
using SJZY.Track.Domain.Dtos.TrackContents;
using SJZY.Track.Domain.Enums;
using SJZY.Track.Domain.Queries;
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/CompleteWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/CompleteWarningHandler.cs
index 1d95537e..1df85522 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/CompleteWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/CompleteWarningHandler.cs
@@ -1,9 +1,9 @@
using SJZY.Track.Application.Services.Warning.Model;
+using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.WarningAggregate;
using SJZY.Track.Domain.Aggregates.WarningAggregate.Complete;
-using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
using SJZY.Track.Domain.Dtos.TrackDetails;
using SJZY.Track.Domain.Dtos.Warning;
using SJZY.Track.Domain.Enums;
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/ICompleteWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/ICompleteWarningHandler.cs
index a9444cf2..02088265 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/ICompleteWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/ICompleteWarningHandler.cs
@@ -1,6 +1,6 @@
using SJZY.Track.Application.Services.Warning.Model;
+using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.WarningAggregate;
-using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
namespace SJZY.Track.Application.Services.Warning.Handlers;
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/IReturnWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/IReturnWarningHandler.cs
index 91f8ee79..87eb6ad9 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/IReturnWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/IReturnWarningHandler.cs
@@ -1,8 +1,8 @@
using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Services.Warning.Model;
+using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Aggregates.WarningAggregate;
-using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
namespace SJZY.Track.Application.Services.Warning.Handlers;
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/ITransportWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/ITransportWarningHandler.cs
index 61b8c4b8..ad0cdae7 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/ITransportWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/ITransportWarningHandler.cs
@@ -1,6 +1,6 @@
using SJZY.Track.Application.Services.Warning.Model;
+using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.WarningAggregate;
-using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
using SJZY.Track.Domain.Aggregates.WarningAggregate.Transport;
namespace SJZY.Track.Application.Services.Warning.Handlers;
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/ReturnWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/ReturnWarningHandler.cs
index 53a88be9..0d237bb5 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/ReturnWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/ReturnWarningHandler.cs
@@ -3,11 +3,11 @@ using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Application.Options;
using SJZY.Track.Application.Services.Warning.Model;
+using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Aggregates.WarningAggregate;
using SJZY.Track.Domain.Aggregates.WarningAggregate.Return;
-using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
using SJZY.Track.Domain.Dtos.Warning;
using SJZY.Track.Domain.Enums;
using Volo.Abp.DependencyInjection;
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs
index d5cad8ca..b58b2df0 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs
@@ -1,11 +1,11 @@
using System.Linq.Expressions;
using SJZY.Track.Application.Services.Warning.Model;
+using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.KPIAreaAggregate;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.Aggregates.WarningAggregate;
-using SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
using SJZY.Track.Domain.Aggregates.WarningAggregate.Transport;
using SJZY.Track.Domain.Dtos.Forewarning;
using SJZY.Track.Domain.Dtos.TrackDetails;
diff --git a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Signals/TrackSignal.cs b/src/SJZY.Track.Application/Services/Warning/Signals/TrackSignal.cs
similarity index 94%
rename from src/SJZY.Track.Domain/Aggregates/WarningAggregate/Signals/TrackSignal.cs
rename to src/SJZY.Track.Application/Services/Warning/Signals/TrackSignal.cs
index 00389cd9..0a672a46 100644
--- a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Signals/TrackSignal.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/TrackSignal.cs
@@ -1,6 +1,6 @@
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
-namespace SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
+namespace SJZY.Track.Application.Services.Warning.Signals;
///
/// 轨迹信号,操作轨迹时产生
diff --git a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Signals/WarningSignalType.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalType.cs
similarity index 61%
rename from src/SJZY.Track.Domain/Aggregates/WarningAggregate/Signals/WarningSignalType.cs
rename to src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalType.cs
index 31f8dec1..50365922 100644
--- a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/Signals/WarningSignalType.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalType.cs
@@ -1,4 +1,4 @@
-namespace SJZY.Track.Domain.Aggregates.WarningAggregate.Signals;
+namespace SJZY.Track.Application.Services.Warning.Signals;
public enum WarningSignalType
{
From aed09e534744fc65f47cf5ad338ea91727f0ee1a Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Fri, 9 May 2025 17:41:30 +0800
Subject: [PATCH 02/19] =?UTF-8?q?change-name:=E8=BD=A8=E8=BF=B9=E4=BF=A1?=
=?UTF-8?q?=E5=8F=B7=E6=9B=B4=E5=90=8D=E4=B8=BA=E9=A2=84=E8=AD=A6=E4=BF=A1?=
=?UTF-8?q?=E5=8F=B7=20=20-=20TrackSignal=20=3D>=20WarningSignal?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/TrackDeleteEventHandler.cs | 2 +-
.../EventHandlers/TrackUpsertEventHandler.cs | 4 ++--
.../Handlers/CompleteWarningHandler.cs | 4 ++--
.../Handlers/ICompleteWarningHandler.cs | 4 ++--
.../Warning/Handlers/IReturnWarningHandler.cs | 2 +-
.../Handlers/ITransportWarningHandler.cs | 4 ++--
.../Warning/Handlers/ReturnWarningHandler.cs | 2 +-
.../Handlers/TransportWarningHandler.cs | 4 ++--
.../{TrackSignal.cs => WarningSignal.cs} | 22 ++++++++++---------
.../Warning/Signals/WarningSignalType.cs | 11 +++++++---
10 files changed, 33 insertions(+), 26 deletions(-)
rename src/SJZY.Track.Application/Services/Warning/Signals/{TrackSignal.cs => WarningSignal.cs} (62%)
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 06780be1..5b2fc8fc 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -367,7 +367,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- var signals = TrackSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+ var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
_ = Task.Run(async () =>
{
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index bef93816..81d0c79c 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -511,7 +511,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- var signals = TrackSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
_ = Task.Run(async () =>
{
@@ -539,7 +539,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_UpdatedTrack(List tracks)
{
- var signals = TrackSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
_ = Task.Run(async () =>
{
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/CompleteWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/CompleteWarningHandler.cs
index 1df85522..edc087ff 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/CompleteWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/CompleteWarningHandler.cs
@@ -31,7 +31,7 @@ public sealed class CompleteWarningHandler : ICompleteWarningHandler, ITransient
#region 预警信号批处理-删除轨迹
- public async Task TrackDeletedHandleAsync(List deletedSignals)
+ public async Task TrackDeletedHandleAsync(List deletedSignals)
{
// 1.只处理未删除的订单
var orderIdSet = deletedSignals.Select(x => x.OrderId).ToHashSet();
@@ -118,7 +118,7 @@ public sealed class CompleteWarningHandler : ICompleteWarningHandler, ITransient
#region todo: 预警信号批处理-新增轨迹
- public async Task TrackAddedHandleAsync(List addedSignals)
+ public async Task TrackAddedHandleAsync(List addedSignals)
{
// 1.只处理未删除的订单
var orderIdSet = addedSignals.Select(x => x.OrderId).ToHashSet();
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/ICompleteWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/ICompleteWarningHandler.cs
index 02088265..3756c523 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/ICompleteWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/ICompleteWarningHandler.cs
@@ -7,10 +7,10 @@ namespace SJZY.Track.Application.Services.Warning.Handlers;
public interface ICompleteWarningHandler
{
// 批量处理轨迹 删除信号
- Task TrackDeletedHandleAsync(List deletedSignals);
+ Task TrackDeletedHandleAsync(List deletedSignals);
// 批量处理轨迹 新增信号
- Task TrackAddedHandleAsync(List addedSignals);
+ Task TrackAddedHandleAsync(List addedSignals);
// 完整预警主体禁用
Task WarningRuleToDisabledHandleAsync(WarningRuleEntity rule);
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/IReturnWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/IReturnWarningHandler.cs
index 87eb6ad9..69843a6e 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/IReturnWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/IReturnWarningHandler.cs
@@ -9,7 +9,7 @@ namespace SJZY.Track.Application.Services.Warning.Handlers;
public interface IReturnWarningHandler
{
// 批量处理轨迹 修改/删除
- Task TrackUpdatedOrDeletedHandleAsync(List updateOrDeleteSignals);
+ Task TrackUpdatedOrDeletedHandleAsync(List updateOrDeleteSignals);
// 收到轨迹推送记录(接口通回调)(人工介入/重试 阶段的回传)
Task ReceiveTrackPushRecordHandleAsync(bool isSuccess, string requestParams, List records, List pushInputs, List updateInputs);
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/ITransportWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/ITransportWarningHandler.cs
index ad0cdae7..16a035a7 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/ITransportWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/ITransportWarningHandler.cs
@@ -11,10 +11,10 @@ namespace SJZY.Track.Application.Services.Warning.Handlers;
public interface ITransportWarningHandler
{
// 批量处理轨迹删除信号
- Task TrackDeletedHandleAsync(List deletedSignals);
+ Task TrackDeletedHandleAsync(List deletedSignals);
// 批量处理轨迹新增/修改
- Task TrackAddedOrUpdatedHandleAsync(List addOrUpdateSignals);
+ Task TrackAddedOrUpdatedHandleAsync(List addOrUpdateSignals);
// 运输预警主体禁用
Task WarningRuleToDisabledHandleAsync(WarningRuleEntity rule);
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/ReturnWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/ReturnWarningHandler.cs
index 0d237bb5..e8f2db19 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/ReturnWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/ReturnWarningHandler.cs
@@ -384,7 +384,7 @@ public sealed class ReturnWarningHandler : IReturnWarningHandler, ITransientDepe
#region todo-test: 预警信号批处理-修改或删除轨迹
- public async Task TrackUpdatedOrDeletedHandleAsync(List updateOrDeleteSignals)
+ public async Task TrackUpdatedOrDeletedHandleAsync(List updateOrDeleteSignals)
{
// 1.查询订单
var orderIdSet = updateOrDeleteSignals.Select(x => x.OrderId).ToHashSet();
diff --git a/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs b/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs
index b58b2df0..a472f129 100644
--- a/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Handlers/TransportWarningHandler.cs
@@ -42,7 +42,7 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
// tips:删除轨迹信号在运输预警处理只关注被删除的轨迹的状态
// 可能影响【运输预警明细】【运输预警明细生成任务】
- public async Task TrackDeletedHandleAsync(List deletedSignals)
+ public async Task TrackDeletedHandleAsync(List deletedSignals)
{
// 1.查询订单
var orderIdSet = deletedSignals.Select(x => x.OrderId).ToHashSet();
@@ -199,7 +199,7 @@ public class TransportWarningHandler : ITransportWarningHandler, ITransientDepen
#region 预警信号批处理-新增修改轨迹
// tips:新增修改轨迹信号,在运输处理关注最新的轨迹
- public async Task TrackAddedOrUpdatedHandleAsync(List addOrUpdateSignals)
+ public async Task TrackAddedOrUpdatedHandleAsync(List addOrUpdateSignals)
{
// 1.查询订单
var orderIdSet = addOrUpdateSignals.Select(x => x.OrderId).ToHashSet();
diff --git a/src/SJZY.Track.Application/Services/Warning/Signals/TrackSignal.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
similarity index 62%
rename from src/SJZY.Track.Application/Services/Warning/Signals/TrackSignal.cs
rename to src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
index 0a672a46..f7e8b2b2 100644
--- a/src/SJZY.Track.Application/Services/Warning/Signals/TrackSignal.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
@@ -1,25 +1,27 @@
+using System.Text.Json.Serialization;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
namespace SJZY.Track.Application.Services.Warning.Signals;
///
-/// 轨迹信号,操作轨迹时产生
-/// 用于进行预警计算
+/// 预警信号,目前只是操作轨迹时产生
+/// 未来可以通过扩展类型+扩展字段的形式增加更多种预警触发源
///
-public readonly struct TrackSignal
+public readonly struct WarningSignal
{
public WarningSignalType Type { get; }
public int OrderId { get; }
- // public string OrderNo { get; set; }
- // public int OrderType { get; set; }
- // public int SubSystemId { get; set; }
-
public string EsId { get; }
public int TrackStatusId { get; }
public int TrackContentId { get; }
- public TrackSignal(WarningSignalType type, int orderId, string esId, int trackStatusId, int trackContentId)
+ // public string OrderNo { get; set; }
+ // public int OrderType { get; set; }
+ // public int SubSystemId { get; set; }
+
+ [JsonConstructor]
+ public WarningSignal(WarningSignalType type, int orderId, string esId, int trackStatusId, int trackContentId)
{
Type = type;
OrderId = orderId;
@@ -28,10 +30,10 @@ public readonly struct TrackSignal
TrackContentId = trackContentId;
}
- public static List FromTrack(List tracks, WarningSignalType type)
+ public static List FromTrack(List tracks, WarningSignalType type)
{
return tracks
- .Select(x => new TrackSignal(
+ .Select(x => new WarningSignal(
type,
x.OrderId,
x.Id,
diff --git a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalType.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalType.cs
index 50365922..5e93398d 100644
--- a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalType.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalType.cs
@@ -1,10 +1,15 @@
namespace SJZY.Track.Application.Services.Warning.Signals;
+///
+/// 预警信号类型
+///
public enum WarningSignalType
{
- 轨迹新增 = 0,
+ 未知的 = 0,
- 轨迹删除 = 1,
+ 轨迹新增 = 1,
- 轨迹更新 = 2,
+ 轨迹删除 = 2,
+
+ 轨迹更新 = 3,
}
From 5dd423f1368f96dcadbe560898d40dcc543cfa28 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Mon, 12 May 2025 15:45:49 +0800
Subject: [PATCH 03/19] =?UTF-8?q?perf:=E6=8E=A5=E5=85=A5kafka=E4=BC=98?=
=?UTF-8?q?=E5=8C=96=E9=A2=84=E8=AD=A6=E8=AE=A1=E7=AE=97=E6=89=B9=E5=A4=84?=
=?UTF-8?q?=E7=90=86=EF=BC=8C=E4=BD=BF=E5=85=B6=E5=85=B7=E6=9C=89=E9=AB=98?=
=?UTF-8?q?=E5=90=9E=E5=90=90=E9=AB=98=E6=95=88=E5=A4=84=E7=90=86=E7=9A=84?=
=?UTF-8?q?=E4=BC=98=E7=82=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/TrackDeleteEventHandler.cs | 57 ++--
.../EventHandlers/TrackUpsertEventHandler.cs | 118 +++----
.../Kafka/WarningCalcBackgroundService.cs | 287 ++++++++++++++++++
.../Kafka/WarningCalcServiceExtension.cs | 150 +++++++++
.../Kafka/WarningSignalPublisher.cs | 35 +++
.../Options/TrackWarningTaskOptions.cs | 15 +-
.../SJZY.Track.Application.csproj | 2 +
.../Services/Warning/Signals/WarningSignal.cs | 19 +-
.../Warning/Signals/WarningSignalKey.cs | 44 +++
.../Warning/Signals/WarningSignalMetadata.cs | 103 +++++++
.../SjzyTrackApplicationModule.cs | 6 +-
.../Consts/GlobalConst.MQ.cs | 21 ++
12 files changed, 763 insertions(+), 94 deletions(-)
create mode 100644 src/SJZY.Track.Application/Kafka/WarningCalcBackgroundService.cs
create mode 100644 src/SJZY.Track.Application/Kafka/WarningCalcServiceExtension.cs
create mode 100644 src/SJZY.Track.Application/Kafka/WarningSignalPublisher.cs
create mode 100644 src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalKey.cs
create mode 100644 src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalMetadata.cs
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 5b2fc8fc..646096a3 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -5,6 +5,7 @@ using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
+using SJZY.Track.Application.Kafka;
using SJZY.Track.Application.Services.Warning.Handlers;
using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
@@ -24,6 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
+ private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackDeleteEventHandler(
@@ -33,7 +35,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
- IServiceProvider serviceProvider
+ IServiceProvider serviceProvider,
+ WarningSignalPublisher warningSignalPublisher
)
{
_provideQueries = provideQueries;
@@ -43,6 +46,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
_broadcastingService = broadcastingService;
_serviceProvider = serviceProvider;
+ _warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -367,30 +371,31 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
- var handler3 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackDeletedHandleAsync(signals);
- await handler2.TrackDeletedHandleAsync(signals);
- await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ // var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+ //
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ // var handler3 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackDeletedHandleAsync(signals);
+ // await handler2.TrackDeletedHandleAsync(signals);
+ // await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index 81d0c79c..ec670528 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -5,6 +5,7 @@ using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.OTel;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
+using SJZY.Track.Application.Kafka;
using SJZY.Track.Application.Services.Warning.Handlers;
using SJZY.Track.Application.Services.Warning.Signals;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
@@ -26,6 +27,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
+ private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackUpsertEventHandler(
@@ -36,7 +38,9 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
ILogger logger,
- IServiceProvider serviceProvider)
+ IServiceProvider serviceProvider,
+ WarningSignalPublisher warningSignalPublisher
+ )
{
_orderRepository = orderRepository;
_capPublisher = capPublisher;
@@ -46,6 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_broadcastingService = broadcastingService;
_logger = logger;
_serviceProvider = serviceProvider;
+ _warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -200,15 +205,15 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
// todo:引发预警计算 改MQ批量+分流
WarningCalc_AddedTrack(insertTracks);
- // 添加轨迹触发预警计算(异步)
- await _capPublisher.PublishAsync(GlobalConst.TrackWarningCalcSubscribe, new TrackWarningCalcEvent
- {
- SubSystemId = @event.SubSystemId,
- CustomId = @event.CustomId,
- OrderIds = insertTracks.Select(x => x.OrderId).ToArray(),
- TrackStatusId = trackContent.TrackStatusId,
- TrackTime = @event.TrackTime,
- });
+ // 添加轨迹触发预警计算(异步)todo:弃用
+ // await _capPublisher.PublishAsync(GlobalConst.TrackWarningCalcSubscribe, new TrackWarningCalcEvent
+ // {
+ // SubSystemId = @event.SubSystemId,
+ // CustomId = @event.CustomId,
+ // OrderIds = insertTracks.Select(x => x.OrderId).ToArray(),
+ // TrackStatusId = trackContent.TrackStatusId,
+ // TrackTime = @event.TrackTime,
+ // });
}
// 触发订单主表更新事件(异步)
@@ -511,56 +516,57 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackAddedHandleAsync(signals);
- await handler2.TrackAddedOrUpdatedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackAddedHandleAsync(signals);
+ // await handler2.TrackAddedOrUpdatedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
private void WarningCalc_UpdatedTrack(List tracks)
{
- var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackAddedOrUpdatedHandleAsync(signals);
- await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+ //
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackAddedOrUpdatedHandleAsync(signals);
+ // await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
}
diff --git a/src/SJZY.Track.Application/Kafka/WarningCalcBackgroundService.cs b/src/SJZY.Track.Application/Kafka/WarningCalcBackgroundService.cs
new file mode 100644
index 00000000..c1f0e04e
--- /dev/null
+++ b/src/SJZY.Track.Application/Kafka/WarningCalcBackgroundService.cs
@@ -0,0 +1,287 @@
+using System.Diagnostics;
+using Confluent.Kafka;
+using Confluent.Kafka.Core.Consumer;
+using Confluent.Kafka.Core.Producer;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Options;
+using SJZY.Expand.ABP.Core.Logger;
+using SJZY.OTel;
+using SJZY.Track.Application.Options;
+using SJZY.Track.Application.Services.Warning.Handlers;
+using SJZY.Track.Application.Services.Warning.Signals;
+using SJZY.Track.Domain.Extensions;
+
+namespace SJZY.Track.Application.Kafka;
+
+///
+/// 预警计算后台任务
+/// 预警信号从kafka摄取来进行批处理
+///
+public sealed class WarningCalcBackgroundService : BackgroundService
+{
+ private readonly IServiceScopeFactory _serviceScopeFactory;
+ private readonly IKafkaConsumer _consumer;
+ private readonly IKafkaProducer _producer;
+ private readonly IKafkaProducer _dlxProducer;
+ private TrackWarningTaskOptions _options;
+
+ public WarningCalcBackgroundService(
+ IOptionsMonitor optionsMonitor,
+ IServiceScopeFactory serviceScopeFactory,
+ IKafkaConsumer consumer,
+ IKafkaProducer producer,
+ IKafkaProducer dlxProducer
+ )
+ {
+ _serviceScopeFactory = serviceScopeFactory;
+ _consumer = consumer;
+ _producer = producer;
+ _dlxProducer = dlxProducer;
+ _options = optionsMonitor.CurrentValue;
+ optionsMonitor.OnChange(x => _options = x);
+ }
+
+ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+ {
+ while (!stoppingToken.IsCancellationRequested)
+ {
+ await DoExecuteAsync(stoppingToken);
+ await Task.Delay(_options.WarningCalcInterval, stoppingToken);
+ }
+ }
+
+ private Activity? _activity;
+ private readonly Stopwatch _stopwatch = Stopwatch.StartNew();
+
+ private async ValueTask DoExecuteAsync(CancellationToken ct)
+ {
+ try
+ {
+ await FetchAndHandlerAsync(ct);
+ }
+ catch (Exception e)
+ {
+ if (e is KafkaException kafkaException)
+ {
+ // kafka重启后,集群恢复需要重新选举,本地消费者存储leader节点信息可能和重新选举后的leader不一致
+ if (kafkaException.Error.Code == ErrorCode.NotController)
+ return;
+ }
+
+ LogHelper.Error(e);
+ _activity?.SetTag("Exception", e.Message);
+ }
+ finally
+ {
+ _activity?.SetTag("HandleTime", _stopwatch.ElapsedMilliseconds);
+ _activity?.Dispose();
+ }
+ }
+
+ private async ValueTask FetchAndHandlerAsync(CancellationToken ct)
+ {
+ // 500ms或者提取到1000条消息任意以条件到达既可返回
+ var list = _consumer.ConsumeBatch(_options.WarningCalcBatchSize, TimeSpan.FromMilliseconds(500)).ToList();
+
+ // 没有提取到任何消息跳过
+ if (list.Count == 0) return;
+
+ _stopwatch.Restart();
+ _activity = ActivityHelper.CreateSpanActivity("WarningCalcStart");
+ _activity.SetTag("HandleCount", list.Count);
+
+ // 处理消息
+ await MessageHandler(list.Select(x => x.Message), ct);
+
+ // 提交消息
+ foreach (var message in list)
+ {
+ // 偏移量首先提交到内存,如果设置EnableAutoOffsetStore=true则会根据AutoCommitIntervalMs周期的提交到服务器
+ _consumer.StoreOffset(message);
+ }
+
+ // 提交内存中所有的偏移到服务器,适用于EnableAutoCommit为false的手动提交场景
+ _consumer.Commit();
+ _activity.Dispose();
+ _activity = null;
+ }
+
+ private async ValueTask MessageHandler(IEnumerable> messages, CancellationToken ct)
+ {
+ ct.ThrowIfCancellationRequested();
+
+ // 1.根据类型分组信号
+ var typeSignalDict = new Dictionary>();
+ var needRetryMetadata = new List(); // 需要重试的消息
+ var needEnqueueDlxMetadata = new List(); // 需要投递到死信队列的
+ var needHandleMessage = new List>();
+ foreach (var m in messages)
+ {
+ // tips:不支持的消息需要及时上报
+ var mType = m.Key.Type;
+ var signal = m.Value;
+ if (!CheckSupportMessage(mType))
+ {
+ needEnqueueDlxMetadata.Add(WarningSignalMetadata.FormMessageOrCreate(m, false, true, errorReason: $"不支持的消息类型:{mType}"));
+ continue;
+ }
+
+ var list = typeSignalDict.GetValueOrDefault(mType, new List());
+ list.Add(signal);
+ typeSignalDict[mType] = list;
+ needHandleMessage.Add(m);
+ }
+
+ // tips:上报异常(类型异常)
+ Report_AggregateNoSupport(needEnqueueDlxMetadata);
+
+ // 2.处理消息
+ if (typeSignalDict.Count > 0)
+ {
+ var (success, error) = await TrackSignalHandler(typeSignalDict, ct);
+
+ if (!success)
+ {
+ // 取消异常,这里只认为服务器下线时引发的,直接中断即可,等待重分配
+ if (error is TaskCanceledException)
+ {
+ // 被取消不需要增加重试次数
+ //needRetryMetadata.AddRange(needHandleMessage.Select(x => TrackSignalMetadata.FormMessageOrCreate(x, false, false, error: error)));
+ LogHelper.Warn($"处理被取消,消息会重新分配到其他Host,影响消息条数[{needHandleMessage.Count}]");
+ throw error;
+ }
+
+ // tips:处理消息出错,批量上报异常指明出错的详细原因
+ foreach (var metadata in needHandleMessage.Select(x => WarningSignalMetadata.FormMessageOrCreate(x, true, false, error: error!)))
+ {
+ // 超过了最大的重试次数,此时应该投递到死信队列
+ if (metadata.RetryCount >= _options.WarningCalcMaxRetryCount)
+ {
+ needEnqueueDlxMetadata.Add(metadata);
+ continue;
+ }
+
+ needRetryMetadata.Add(metadata);
+ }
+ }
+ }
+
+ // 3.需要重试的消息,重新投递到原队列
+ if (needRetryMetadata.Count > 0)
+ {
+ _activity?.SetTag("StartPublicRetryMessage", $"开始重新投递[{needRetryMetadata.Count}]条消息");
+ LogHelper.Warn($"开始重新投递[{needRetryMetadata.Count}]条消息");
+
+ var tasks = needRetryMetadata.Select(async metadata =>
+ {
+ metadata.SetTrackSignalMessageHeader();
+ await _producer.ProduceAsync(metadata.OwenMessage, CancellationToken.None);
+ }).ToArray();
+ await Task.WhenAll(tasks);
+
+ _activity?.SetTag("EndPublicRetryMessage", $"已重新投递[{needRetryMetadata.Count}]条消息");
+ LogHelper.Warn($"已重新投递[{needRetryMetadata.Count}]条消息");
+ }
+
+ // 4.进入死信的消息,投入到死信队列,等待人工处理
+ if (needEnqueueDlxMetadata.Count > 0)
+ {
+ _activity?.SetTag("StartPublicDLXMessage", $"开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
+ LogHelper.Warn($"开始投递死信[{needEnqueueDlxMetadata.Count}]条消息");
+
+ var tasks = needEnqueueDlxMetadata.Select(async metadata =>
+ {
+ metadata.SetTrackSignalMessageHeader();
+ var msg = metadata.OwenMessage;
+ await _dlxProducer.ProduceAsync(new Message
+ {
+ Key = msg.Value.OrderId,
+ Value = msg.Value,
+ Headers = msg.Headers
+ }, CancellationToken.None);
+ }).ToArray();
+ await Task.WhenAll(tasks);
+
+ _activity?.SetTag("StartPublicDLXMessage", $"已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息");
+ LogHelper.Warn($"已进入死信队列[{needEnqueueDlxMetadata.Count}]条消息");
+ }
+ }
+
+ private static bool CheckSupportMessage(WarningSignalType type)
+ {
+ return type switch
+ {
+ WarningSignalType.轨迹新增 => true,
+ WarningSignalType.轨迹更新 => true,
+ WarningSignalType.轨迹删除 => true,
+ _ => false
+ };
+ }
+
+ private async Task<(bool Success, Exception? error)> TrackSignalHandler(Dictionary> typeSignalDict, CancellationToken ct)
+ {
+ var scope = _serviceScopeFactory.CreateAsyncScope();
+ try
+ {
+ ct.ThrowIfCancellationRequested();
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+ var handler3 = scope.ServiceProvider.GetRequiredService();
+
+ // tips:处理失败视为整体失败,消息会被重新投递,考虑减小处理批次大小?
+ var addSignalr = typeSignalDict.GetValueOrDefault(WarningSignalType.轨迹新增, Empty.List);
+ var updateSignals = typeSignalDict.GetValueOrDefault(WarningSignalType.轨迹更新, Empty.List);
+ var deleteSignals = typeSignalDict.GetValueOrDefault(WarningSignalType.轨迹删除, Empty.List);
+
+ // 增
+ if (addSignalr.Count > 0)
+ await handler.TrackAddedHandleAsync(addSignalr);
+ // 删
+ if (deleteSignals.Count > 0)
+ {
+ await handler.TrackDeletedHandleAsync(deleteSignals);
+ await handler2.TrackDeletedHandleAsync(deleteSignals);
+ }
+
+ // 增+改
+ var addOrUpdateSignal = new List(addSignalr.Count + updateSignals.Count);
+ addOrUpdateSignal.AddRange(addSignalr);
+ addOrUpdateSignal.AddRange(updateSignals);
+ if (addOrUpdateSignal.Count > 0)
+ await handler2.TrackAddedOrUpdatedHandleAsync(addOrUpdateSignal);
+
+ // 改+删
+ var updateOrDeleteSignal = new List(updateSignals.Count + deleteSignals.Count);
+ updateOrDeleteSignal.AddRange(updateSignals);
+ updateOrDeleteSignal.AddRange(deleteSignals);
+ if (updateOrDeleteSignal.Count > 0)
+ await handler3.TrackUpdatedOrDeletedHandleAsync(updateOrDeleteSignal);
+
+ return (true, null);
+ }
+ catch (Exception e)
+ {
+ return (false, e);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ }
+
+ private void Report_AggregateNoSupport(List ms)
+ {
+ if (ms.Count == 0) return;
+ var reasons = string.Join(",", ms.GroupBy(x => x.LastErrorReason).Select(x => x.Key));
+ _activity?.SetTag("AggregateNoSupport", reasons);
+ LogHelper.Error($"预警信号类型不支持:{reasons}");
+ }
+
+ public override void Dispose()
+ {
+ base.Dispose();
+ _consumer.Close();
+ _consumer.Dispose();
+ _producer.Dispose();
+ }
+}
diff --git a/src/SJZY.Track.Application/Kafka/WarningCalcServiceExtension.cs b/src/SJZY.Track.Application/Kafka/WarningCalcServiceExtension.cs
new file mode 100644
index 00000000..0583380b
--- /dev/null
+++ b/src/SJZY.Track.Application/Kafka/WarningCalcServiceExtension.cs
@@ -0,0 +1,150 @@
+using System.Net;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Confluent.Kafka;
+using Confluent.Kafka.Core.Consumer;
+using Confluent.Kafka.Core.Producer;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using SJZY.Expand.ABP.Core.Logger;
+using SJZY.Track.Application.Helpers;
+using SJZY.Track.Application.Services.Warning.Signals;
+
+namespace SJZY.Track.Application.Kafka;
+
+public static class WarningCalcServiceExtension
+{
+ public static void AddWarningCalcServices(this IServiceCollection services, IConfiguration conf)
+ {
+ var env = "-" + conf.GetValue("Environment")!.ToLower();
+ // 预警信号批处理后台任务
+ services.AddHostedService();
+
+ // 预警信号
+ RegisterConsumer(services, conf, GlobalConst.WarningKafkaGroup + env, new[] { GlobalConst.WarningKafkaTopic + env });
+ RegisterProducer(services, conf, GlobalConst.WarningKafkaTopic + env);
+
+ // 预警信号DLX
+ RegisterConsumer(services, conf, GlobalConst.WarningDLXKafkaGroup + env, new[] { GlobalConst.WarningDLXKafkaTopic + env });
+ RegisterProducer(services, conf, GlobalConst.WarningDLXKafkaTopic + env);
+ }
+
+ private static void RegisterConsumer(IServiceCollection services, IConfiguration conf, string groupId, string[] subTopic)
+ {
+ services.AddSingleton>(sp =>
+ {
+ var bb = new KafkaConsumerBuilder()
+ .WithConsumerConfiguration(o =>
+ {
+ o.WithClientId(Dns.GetHostName())
+ .WithGroupId(groupId)
+ .WithBootstrapServers(conf.GetValue("Kafka:BootstrapServers"))
+ .WithAutoOffsetReset(AutoOffsetReset.Earliest)
+ //偏移提交控制
+ .WithEnablePartitionEof(false)
+ .WithEnableAutoOffsetStore(false)
+ .WithEnableAutoCommit(false)
+ //链接控制
+ .WithSessionTimeoutMs(conf.GetValue("Kafka:Consumer:SessionTimeoutMs"))
+ .WithMaxPollIntervalMs(conf.GetValue("Kafka:Consumer:MaxPollIntervalMs"))
+ .WithHeartbeatIntervalMs(conf.GetValue("Kafka:Consumer:HeartbeatIntervalMs"))
+ //吞吐量
+ .WithFetchMinBytes(conf.GetValue("Kafka:Consumer:FetchMinBytes"))
+ .WithFetchMaxBytes(conf.GetValue("Kafka:Consumer:FetchMaxBytes"))
+ .WithFetchWaitMaxMs(conf.GetValue("Kafka:Consumer:FetchWaitMaxMs"))
+ //日志
+ .WithDebug("consumer,cgrp,protocol")
+ .WithTopicSubscriptions(subTopic);
+ });
+
+ bb.WithLoggerFactory(sp.GetRequiredService());
+ DebounceHelper.DebounceWrapper? reportFuncWrapper = null;
+ bb.WithErrorHandler((consumer, error) =>
+ {
+ if (error.IsFatal)
+ {
+ LogHelper.Error($"Kafka致命错误${error}");
+ return;
+ }
+
+ // tips: 防抖以防止高频上报错误
+ reportFuncWrapper ??= DebounceHelper.WrapMethod(TimeSpan.FromSeconds(5), () =>
+ {
+ if (error.Code == ErrorCode.Local_Transport)
+ LogHelper.Error($"Kafka链接错误{error}");
+ else if (error.Code == ErrorCode.Local_AllBrokersDown)
+ LogHelper.Error($"Kafka所有Broker都挂了{error}");
+ });
+ reportFuncWrapper.Debounce();
+ });
+
+ //bb.WithProtobufNetDeserializer();
+ bb.WithJsonCoreDeserializer(bc =>
+ bc.WithReferenceHandler(ReferenceHandler.IgnoreCycles) // Handles circular references
+ .WithPropertyNamingPolicy(JsonNamingPolicy.CamelCase) // Uses camelCase naming
+ .WithDefaultIgnoreCondition(JsonIgnoreCondition.WhenWritingNull));
+ return (bb.Build() as IKafkaConsumer)!;
+ });
+ }
+
+ private static void RegisterProducer(IServiceCollection services, IConfiguration conf, string? defaultTopic = null)
+ {
+ services.AddSingleton>(sp =>
+ {
+ var bb = new KafkaProducerBuilder()
+ .WithProducerConfiguration(o =>
+ {
+ o.WithClientId(Dns.GetHostName())
+ .WithBootstrapServers(conf.GetValue("Kafka:BootstrapServers"))
+ // 确保消息发送可靠
+ .WithAcks(Acks.All)
+ .WithEnableIdempotence(true) // 幂等发送
+ .WithMessageSendMaxRetries(conf.GetValue("Kafka:Producer:MessageSendMaxRetries"))
+ .WithRequestTimeoutMs(conf.GetValue("Kafka:Producer:RequestTimeoutMs"))
+ // 消息体大小
+ .WithCompressionType(conf.GetValue("Kafka:Producer:CompressionType"))
+ .WithCompressionLevel(conf.GetValue("Kafka:Producer:CompressionLevel")) //Gzip 0-9 LZ4 0-12 数值越大压缩效果越好cpu占用越多
+ // 消息发送速率控制(任意一条件先达到就发送)
+ .WithLingerMs(conf.GetValue("Kafka:Producer:LingerMs"))
+ .WithBatchSize(conf.GetValue("Kafka:Producer:BatchSize"))
+ .WithBatchNumMessages(conf.GetValue("Kafka:Producer:BatchNumMessages"))
+ // 发送缓冲内存限制
+ .WithQueueBufferingMaxMessages(conf.GetValue("Kafka:Producer:QueueBufferingMaxMessages"))
+ .WithQueueBufferingMaxKbytes(conf.GetValue("Kafka:Producer:QueueBufferingMaxKbytes"))
+ // 分区器 一致性hash/随机
+ .WithPartitioner(conf.GetValue("Kafka:Producer:Partitioner"))
+ .WithDefaultTopic(defaultTopic);
+ });
+
+ bb.WithLoggerFactory(sp.GetRequiredService());
+ DebounceHelper.DebounceWrapper? reportFuncWrapper = null;
+ bb.WithErrorHandler((producer, error) =>
+ {
+ if (error.IsFatal)
+ {
+ LogHelper.Error($"Kafka致命错误${error}");
+ return;
+ }
+
+ // tips: 防抖以防止高频上报错误
+ reportFuncWrapper ??= DebounceHelper.WrapMethod(TimeSpan.FromSeconds(5), () =>
+ {
+ if (error.Code == ErrorCode.Local_Transport)
+ LogHelper.Error($"Kafka链接错误{error}");
+ else if (error.Code == ErrorCode.Local_AllBrokersDown)
+ LogHelper.Error($"Kafka所有Broker都挂了{error}");
+ });
+ reportFuncWrapper.Debounce();
+ });
+
+ // 2000w条消息数据包压缩从 2g -> 1g
+ // bb.WithProtobufNetSerializer();
+
+ bb.WithJsonCoreSerializer(bc =>
+ bc.WithReferenceHandler(ReferenceHandler.IgnoreCycles) // Handles circular references
+ .WithPropertyNamingPolicy(JsonNamingPolicy.CamelCase) // Uses camelCase naming
+ .WithDefaultIgnoreCondition(JsonIgnoreCondition.WhenWritingNull));
+ return (bb.Build() as IKafkaProducer)!;
+ });
+ }
+}
diff --git a/src/SJZY.Track.Application/Kafka/WarningSignalPublisher.cs b/src/SJZY.Track.Application/Kafka/WarningSignalPublisher.cs
new file mode 100644
index 00000000..95e0336f
--- /dev/null
+++ b/src/SJZY.Track.Application/Kafka/WarningSignalPublisher.cs
@@ -0,0 +1,35 @@
+using Confluent.Kafka;
+using Confluent.Kafka.Core.Producer;
+using SJZY.Track.Application.Services.Warning.Signals;
+using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
+using Volo.Abp.DependencyInjection;
+
+namespace SJZY.Track.Application.Kafka;
+
+///
+/// 预警信号发布者
+///
+public sealed class WarningSignalPublisher : ITransientDependency
+{
+ private readonly IKafkaProducer _producer;
+
+ public WarningSignalPublisher(IKafkaProducer producer)
+ {
+ _producer = producer;
+ }
+
+ public void PublishWarningSignal(WarningSignalType type, List tracks)
+ {
+ foreach (var track in tracks)
+ PublishWarningSignal(type, track);
+ }
+
+ public void PublishWarningSignal(WarningSignalType type, TrackDetailsIndex track)
+ {
+ _producer.Produce(new Message
+ {
+ Key = new WarningSignalKey(type, track.OrderId),
+ Value = WarningSignal.FromTrack(track, type)
+ });
+ }
+}
diff --git a/src/SJZY.Track.Application/Options/TrackWarningTaskOptions.cs b/src/SJZY.Track.Application/Options/TrackWarningTaskOptions.cs
index 61ccfc0d..0c873b50 100644
--- a/src/SJZY.Track.Application/Options/TrackWarningTaskOptions.cs
+++ b/src/SJZY.Track.Application/Options/TrackWarningTaskOptions.cs
@@ -2,11 +2,18 @@ namespace SJZY.Track.Application.Options;
public sealed class TrackWarningTaskOptions
{
- ///
- /// 所属子系统id(业务中台id)
- ///
+ /// 所属子系统id(业务中台id)
public int MiddleSystemId { get; set; }
+ /// 预警计算每批处理的大小
+ public int WarningCalcBatchSize { get; set; }
+
+ /// 预警计算间隔ms
+ public int WarningCalcInterval { get; set; }
+
+ /// 预警计算最大重试次数,超过这个次数会投递到死信队列当中
+ public int WarningCalcMaxRetryCount { get; set; }
+
/// 通知任务扫描优先级
public int ScanWarningNotifyTaskLevel { get; set; }
@@ -19,7 +26,7 @@ public sealed class TrackWarningTaskOptions
/// 回传重试推送扫描优先级
public int ScanReturnWarningRetryPushTaskLevel { get; set; }
- /// 回传重试推送任务扫描间隔(分钟
+ /// 回传重试推送任务扫描间隔(分钟)
public int ScanReturnWarningRetryPushTaskMinuteInterval { get; set; }
/// 运输预警明细生成任务扫描优先级
diff --git a/src/SJZY.Track.Application/SJZY.Track.Application.csproj b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
index 237fb654..075f9d94 100644
--- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj
+++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
@@ -11,6 +11,8 @@
+
+
diff --git a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
index f7e8b2b2..963268ca 100644
--- a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
@@ -33,13 +33,18 @@ public readonly struct WarningSignal
public static List FromTrack(List tracks, WarningSignalType type)
{
return tracks
- .Select(x => new WarningSignal(
- type,
- x.OrderId,
- x.Id,
- x.TrackStatusId,
- x.TrackContentId
- ))
+ .Select(x => FromTrack(x, type))
.ToList();
}
+
+ public static WarningSignal FromTrack(TrackDetailsIndex track, WarningSignalType type)
+ {
+ return new WarningSignal(
+ type,
+ track.OrderId,
+ track.Id,
+ track.TrackStatusId,
+ track.TrackContentId
+ );
+ }
}
diff --git a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalKey.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalKey.cs
new file mode 100644
index 00000000..46499c9d
--- /dev/null
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalKey.cs
@@ -0,0 +1,44 @@
+using System.Text.Json.Serialization;
+
+namespace SJZY.Track.Application.Services.Warning.Signals;
+
+///
+/// 预警信号key,用于充当分区key
+///
+public readonly struct WarningSignalKey : IEquatable
+{
+ public WarningSignalType Type { get; }
+ public int OrderId { get; }
+
+ [JsonConstructor]
+ public WarningSignalKey(WarningSignalType type, int orderId)
+ {
+ Type = type;
+ OrderId = orderId;
+ }
+
+ public bool Equals(WarningSignalKey other)
+ {
+ return Type == other.Type && OrderId == other.OrderId;
+ }
+
+ public override bool Equals(object? obj)
+ {
+ return obj is WarningSignalKey other && Equals(other);
+ }
+
+ public override int GetHashCode()
+ {
+ return HashCode.Combine((int) Type, OrderId);
+ }
+
+ public static bool operator ==(WarningSignalKey left, WarningSignalKey right)
+ {
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(WarningSignalKey left, WarningSignalKey right)
+ {
+ return !(left == right);
+ }
+}
diff --git a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalMetadata.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalMetadata.cs
new file mode 100644
index 00000000..9b5b8a26
--- /dev/null
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalMetadata.cs
@@ -0,0 +1,103 @@
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Confluent.Kafka;
+
+namespace SJZY.Track.Application.Services.Warning.Signals;
+
+///
+/// 预警信号元数据
+///
+public struct WarningSignalMetadata : IEquatable
+{
+ public const string TrackSignalMetadataHeaderKey = "track_signal_metadata";
+
+ /// 已经重试的次数,被重新入队时+1
+ public int RetryCount { get; set; }
+
+ /// 是否是无法处理的内容,需要直接报告异常
+ public bool Unhandled { get; set; }
+
+ /// 最后一次出错的原因
+ public string LastErrorReason { get; set; }
+
+ [JsonIgnore]
+ public Message OwenMessage { get; set; }
+
+ public WarningSignalMetadata()
+ {
+ RetryCount = 0;
+ LastErrorReason = string.Empty;
+ Unhandled = false;
+ OwenMessage = null!;
+ }
+
+ public void SetTrackSignalMessageHeader()
+ {
+ if (OwenMessage == null)
+ throw new InvalidOperationException("OwenMessage is null!");
+ OwenMessage.Headers.Add(TrackSignalMetadataHeaderKey, ToBytes());
+ }
+
+ // 从消息提取或者构建一个元数据并为其设置属性
+ public static WarningSignalMetadata FormMessageOrCreate(
+ Message msg,
+ bool retryInc,
+ bool unhandled,
+ string? errorReason = null,
+ Exception? error = null
+ )
+ {
+ msg.Headers.TryGetLastBytes(TrackSignalMetadataHeaderKey, out var metadataBytes);
+
+ var m = metadataBytes == null
+ ? new WarningSignalMetadata()
+ : Form(metadataBytes);
+
+ m.OwenMessage = msg;
+ m.RetryCount = retryInc ? m.RetryCount + 1 : m.RetryCount;
+ m.LastErrorReason = errorReason ?? error?.Message ?? string.Empty;
+ m.Unhandled = unhandled || error is NotSupportedException;
+
+ return m;
+ }
+
+ public static WarningSignalMetadata Form(byte[] bytes)
+ {
+ return JsonSerializer.Deserialize(bytes);
+ }
+
+ public byte[] ToBytes()
+ {
+ return JsonSerializer.SerializeToUtf8Bytes(this);
+ }
+
+ public static implicit operator byte[](WarningSignalMetadata metadata)
+ {
+ return metadata.ToBytes();
+ }
+
+ public static bool operator ==(WarningSignalMetadata left, WarningSignalMetadata right)
+ {
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(WarningSignalMetadata left, WarningSignalMetadata right)
+ {
+ return !(left == right);
+ }
+
+ public bool Equals(WarningSignalMetadata other)
+ {
+ return RetryCount == other.RetryCount && LastErrorReason == other.LastErrorReason && OwenMessage == other.OwenMessage;
+ }
+
+ public override bool Equals(object? obj)
+ {
+ return obj is WarningSignalMetadata other && Equals(other);
+ }
+
+ public override int GetHashCode()
+ {
+ return HashCode.Combine(RetryCount, LastErrorReason);
+ }
+}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index 53284c7a..06e6dc9c 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -15,6 +15,7 @@ using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.CAP;
using SJZY.Track.Application.Contract;
using SJZY.Track.Application.Hangfire;
+using SJZY.Track.Application.Kafka;
using SJZY.Track.Application.Localization;
using SJZY.Track.Application.Options;
using SJZY.Track.Application.Track2InterfaceRelay;
@@ -214,7 +215,10 @@ public class SjzyTrackApplicationModule : AbpModule
IsDefault = false,
});
- // 注册后台服务
+ // 注册预警计算服务
+ context.Services.AddWarningCalcServices(configuration);
+
+ // 注册预警任务后台服务
context.Services.AddHostedService();
// 注册HangFire服务
diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs
index 93b5b277..3fab82d2 100644
--- a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs
+++ b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs
@@ -61,4 +61,25 @@ public partial class GlobalConst
/// 轨迹推送通知交换机
///
public const string TrackPushExchange = "sjzy.track.on_track_push_ex";
+
+ // todo:以下需要在kafka创建主题
+ ///
+ /// 预警信号kafka 主题
+ ///
+ public const string WarningKafkaTopic = "sjzy_trackapi_warning";
+
+ ///
+ /// 预警信号消费组
+ ///
+ public const string WarningKafkaGroup = "sjzy_trackapi_warning_group";
+
+ ///
+ /// 预警信号 DLX kafka 主题
+ ///
+ public const string WarningDLXKafkaTopic = "sjzy_trackapi_warning_dlx";
+
+ ///
+ /// 预警信号 DLX kafka消费组
+ ///
+ public const string WarningDLXKafkaGroup = "sjzy_trackapi_warning_dlx_group";
}
From 16d425d2e3a1c94db63cf01f0b37ad848d8172e7 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Mon, 12 May 2025 16:28:26 +0800
Subject: [PATCH 04/19] =?UTF-8?q?option:=E9=99=8D=E7=BA=A7Confluent.Kafka.?=
=?UTF-8?q?Core=E7=89=88=E6=9C=AC1.0.5=3D>1.0.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Application/SJZY.Track.Application.csproj | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/SJZY.Track.Application/SJZY.Track.Application.csproj b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
index 075f9d94..3d1b26db 100644
--- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj
+++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
@@ -11,8 +11,8 @@
-
-
+
+
From 9bbefafcda9563604a7b861c53b86676eca4fd24 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Mon, 12 May 2025 16:38:09 +0800
Subject: [PATCH 05/19] =?UTF-8?q?rollback:=E6=9A=82=E6=97=B6=E5=9B=9E?=
=?UTF-8?q?=E9=80=805.9=E7=9A=84=E6=9B=B4=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/TrackDeleteEventHandler.cs | 60 +++++------
.../EventHandlers/TrackUpsertEventHandler.cs | 102 +++++++++---------
.../SjzyTrackApplicationModule.cs | 2 +-
3 files changed, 82 insertions(+), 82 deletions(-)
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 646096a3..7d4305b1 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -25,7 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
- private readonly WarningSignalPublisher _warningSignalPublisher;
+ //private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackDeleteEventHandler(
@@ -35,8 +35,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
- IServiceProvider serviceProvider,
- WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider
+ //WarningSignalPublisher warningSignalPublisher
)
{
_provideQueries = provideQueries;
@@ -46,7 +46,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
_broadcastingService = broadcastingService;
_serviceProvider = serviceProvider;
- _warningSignalPublisher = warningSignalPublisher;
+ //_warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -371,31 +371,31 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
- // var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
- //
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- // var handler3 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackDeletedHandleAsync(signals);
- // await handler2.TrackDeletedHandleAsync(signals);
- // await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+ var handler3 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackDeletedHandleAsync(signals);
+ await handler2.TrackDeletedHandleAsync(signals);
+ await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index ec670528..387d77ca 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -27,7 +27,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
- private readonly WarningSignalPublisher _warningSignalPublisher;
+ //private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackUpsertEventHandler(
@@ -38,8 +38,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
ILogger logger,
- IServiceProvider serviceProvider,
- WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider
+ //WarningSignalPublisher warningSignalPublisher
)
{
_orderRepository = orderRepository;
@@ -50,7 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_broadcastingService = broadcastingService;
_logger = logger;
_serviceProvider = serviceProvider;
- _warningSignalPublisher = warningSignalPublisher;
+ // _warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -516,57 +516,57 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
- // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackAddedHandleAsync(signals);
- // await handler2.TrackAddedOrUpdatedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackAddedHandleAsync(signals);
+ await handler2.TrackAddedOrUpdatedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
private void WarningCalc_UpdatedTrack(List tracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
- // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
- //
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackAddedOrUpdatedHandleAsync(signals);
- // await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackAddedOrUpdatedHandleAsync(signals);
+ await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index 06e6dc9c..61219aa6 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -216,7 +216,7 @@ public class SjzyTrackApplicationModule : AbpModule
});
// 注册预警计算服务
- context.Services.AddWarningCalcServices(configuration);
+ //context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService();
From 8dcff695a46dfc47c98a4cd30f96acf051ce22dc Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 10:42:58 +0800
Subject: [PATCH 06/19] =?UTF-8?q?option:=E5=89=94=E9=99=A4=E6=8E=89?=
=?UTF-8?q?=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84Redis=E5=AE=A2=E6=88=B7?=
=?UTF-8?q?=E7=AB=AF=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SJZY.Track.Application.csproj | 4 +---
.../SjzyTrackApplicationModule.cs | 16 ----------------
2 files changed, 1 insertion(+), 19 deletions(-)
diff --git a/src/SJZY.Track.Application/SJZY.Track.Application.csproj b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
index 3d1b26db..fc27bea7 100644
--- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj
+++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
@@ -8,7 +8,7 @@
-
+
@@ -16,8 +16,6 @@
-
-
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index 61219aa6..f946830b 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -22,8 +22,6 @@ using SJZY.Track.Application.Track2InterfaceRelay;
using SJZY.UserCenter.Contracts;
using SJZY.UserCenter.SharedModel;
using SJZY.UserCenter.SharedModel.Pub;
-using StackExchange.Redis.Extensions.Core.Configuration;
-using StackExchange.Redis.Extensions.System.Text.Json;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AutoMapper;
using Volo.Abp.FluentValidation;
@@ -141,7 +139,6 @@ public class SjzyTrackApplicationModule : AbpModule
Console.WriteLine("-- 当前为VS本地环境,用内存存储和内存队列");
}
-
context.Services.AddRabbitBoot(options =>
{
options.ConnectionString =
@@ -201,19 +198,6 @@ public class SjzyTrackApplicationModule : AbpModule
$",password={configuration["Redis:Password"]}" +
$",defaultDatabase={configuration["Redis:Database"]}" +
$",abortConnect=false";
- // 注册Redis服务
- context.Services.AddStackExchangeRedisExtensions(new RedisConfiguration
- {
- KeyPrefix = configuration["Redis:Prefix"]!,
- Database = int.Parse(configuration["Redis:Database"]!),
- ConnectionString = connectionString,
- AbortOnConnectFail = false,
- AllowAdmin = true,
- //ConnectTimeout = 5000,
- PoolSize = 5,
- ConnectRetry = 3,
- IsDefault = false,
- });
// 注册预警计算服务
//context.Services.AddWarningCalcServices(configuration);
From 99ba2209512af12fb94517251af7920701e9c82d Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 11:23:21 +0800
Subject: [PATCH 07/19] =?UTF-8?q?options:=E6=B6=88=E6=81=AF=E5=BA=8F?=
=?UTF-8?q?=E5=88=97=E5=8C=96=E5=A2=9E=E5=8A=A0NewtonsoftJson=E5=92=8CProt?=
=?UTF-8?q?oBuf=E7=9A=84=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Kafka/WarningCalcServiceExtension.cs | 36 ++++++++++++++++---
.../SJZY.Track.Application.csproj | 6 ++--
.../Services/Warning/Signals/WarningSignal.cs | 3 +-
.../Warning/Signals/WarningSignalKey.cs | 3 +-
.../Warning/Signals/WarningSignalMetadata.cs | 5 +--
5 files changed, 42 insertions(+), 11 deletions(-)
diff --git a/src/SJZY.Track.Application/Kafka/WarningCalcServiceExtension.cs b/src/SJZY.Track.Application/Kafka/WarningCalcServiceExtension.cs
index 0583380b..485e6ab8 100644
--- a/src/SJZY.Track.Application/Kafka/WarningCalcServiceExtension.cs
+++ b/src/SJZY.Track.Application/Kafka/WarningCalcServiceExtension.cs
@@ -1,3 +1,6 @@
+//#define ProtoBuf
+#define NewtonsoftJson
+using System.Globalization;
using System.Net;
using System.Text.Json;
using System.Text.Json.Serialization;
@@ -6,6 +9,9 @@ using Confluent.Kafka.Core.Consumer;
using Confluent.Kafka.Core.Producer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using Newtonsoft.Json.Serialization;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Track.Application.Helpers;
using SJZY.Track.Application.Services.Warning.Signals;
@@ -78,11 +84,22 @@ public static class WarningCalcServiceExtension
reportFuncWrapper.Debounce();
});
- //bb.WithProtobufNetDeserializer();
+#if ProtoBuf
+ bb.WithProtobufNetDeserializer();
+
+#elif NewtonsoftJson
+ bb.WithNewtonsoftJsonDeserializer(builder =>
+ builder.WithNullValueHandling(NullValueHandling.Ignore) // Ignores null values
+ .WithReferenceLoopHandling(ReferenceLoopHandling.Ignore) // Ignores reference loops
+ .WithContractResolver(new CamelCasePropertyNamesContractResolver()) // Camel case property names
+ );
+#else
bb.WithJsonCoreDeserializer(bc =>
bc.WithReferenceHandler(ReferenceHandler.IgnoreCycles) // Handles circular references
.WithPropertyNamingPolicy(JsonNamingPolicy.CamelCase) // Uses camelCase naming
- .WithDefaultIgnoreCondition(JsonIgnoreCondition.WhenWritingNull));
+ .WithDefaultIgnoreCondition(JsonIgnoreCondition.WhenWritingNull)
+ );
+#endif
return (bb.Build() as IKafkaConsumer)!;
});
}
@@ -137,13 +154,22 @@ public static class WarningCalcServiceExtension
reportFuncWrapper.Debounce();
});
+#if ProtoBuf
// 2000w条消息数据包压缩从 2g -> 1g
- // bb.WithProtobufNetSerializer();
-
+ bb.WithProtobufNetSerializer();
+#elif NewtonsoftJson
+ bb.WithNewtonsoftJsonSerializer(builder =>
+ builder.WithNullValueHandling(NullValueHandling.Ignore) // Ignores null values
+ .WithReferenceLoopHandling(ReferenceLoopHandling.Ignore) // Ignores reference loops
+ .WithContractResolver(new CamelCasePropertyNamesContractResolver()) // Camel case property names
+ );
+#else
bb.WithJsonCoreSerializer(bc =>
bc.WithReferenceHandler(ReferenceHandler.IgnoreCycles) // Handles circular references
.WithPropertyNamingPolicy(JsonNamingPolicy.CamelCase) // Uses camelCase naming
- .WithDefaultIgnoreCondition(JsonIgnoreCondition.WhenWritingNull));
+ .WithDefaultIgnoreCondition(JsonIgnoreCondition.WhenWritingNull)
+ );
+#endif
return (bb.Build() as IKafkaProducer)!;
});
}
diff --git a/src/SJZY.Track.Application/SJZY.Track.Application.csproj b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
index fc27bea7..fcb4b392 100644
--- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj
+++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
@@ -9,10 +9,12 @@
-
-
+
+
+
+
diff --git a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
index 963268ca..28479223 100644
--- a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignal.cs
@@ -1,4 +1,4 @@
-using System.Text.Json.Serialization;
+using Newtonsoft.Json;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
namespace SJZY.Track.Application.Services.Warning.Signals;
@@ -20,6 +20,7 @@ public readonly struct WarningSignal
// public int OrderType { get; set; }
// public int SubSystemId { get; set; }
+ [System.Text.Json.Serialization.JsonConstructor]
[JsonConstructor]
public WarningSignal(WarningSignalType type, int orderId, string esId, int trackStatusId, int trackContentId)
{
diff --git a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalKey.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalKey.cs
index 46499c9d..32d7e9b1 100644
--- a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalKey.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalKey.cs
@@ -1,4 +1,4 @@
-using System.Text.Json.Serialization;
+using Newtonsoft.Json;
namespace SJZY.Track.Application.Services.Warning.Signals;
@@ -10,6 +10,7 @@ public readonly struct WarningSignalKey : IEquatable
public WarningSignalType Type { get; }
public int OrderId { get; }
+ [System.Text.Json.Serialization.JsonConstructor]
[JsonConstructor]
public WarningSignalKey(WarningSignalType type, int orderId)
{
diff --git a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalMetadata.cs b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalMetadata.cs
index 9b5b8a26..41f39e4b 100644
--- a/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalMetadata.cs
+++ b/src/SJZY.Track.Application/Services/Warning/Signals/WarningSignalMetadata.cs
@@ -1,6 +1,6 @@
-using System.Text.Json;
-using System.Text.Json.Serialization;
using Confluent.Kafka;
+using Newtonsoft.Json;
+using JsonSerializer = System.Text.Json.JsonSerializer;
namespace SJZY.Track.Application.Services.Warning.Signals;
@@ -20,6 +20,7 @@ public struct WarningSignalMetadata : IEquatable
/// 最后一次出错的原因
public string LastErrorReason { get; set; }
+ [System.Text.Json.Serialization.JsonIgnore]
[JsonIgnore]
public Message OwenMessage { get; set; }
From cecc28af71e0c4ccee0aa5eab97eb9a9a501d4af Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 11:24:51 +0800
Subject: [PATCH 08/19] =?UTF-8?q?option:=E5=90=AF=E7=94=A8NewtonsoftJson?=
=?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=E7=9A=84=E6=96=B9=E5=BC=8F=E9=A2=84?=
=?UTF-8?q?=E8=AD=A6=E4=BF=A1=E5=8F=B7=E6=B6=88=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/TrackDeleteEventHandler.cs | 60 +++++------
.../EventHandlers/TrackUpsertEventHandler.cs | 102 +++++++++---------
.../SjzyTrackApplicationModule.cs | 2 +-
3 files changed, 82 insertions(+), 82 deletions(-)
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 7d4305b1..646096a3 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -25,7 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
- //private readonly WarningSignalPublisher _warningSignalPublisher;
+ private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackDeleteEventHandler(
@@ -35,8 +35,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
- IServiceProvider serviceProvider
- //WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider,
+ WarningSignalPublisher warningSignalPublisher
)
{
_provideQueries = provideQueries;
@@ -46,7 +46,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
_broadcastingService = broadcastingService;
_serviceProvider = serviceProvider;
- //_warningSignalPublisher = warningSignalPublisher;
+ _warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -371,31 +371,31 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
- var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
- var handler3 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackDeletedHandleAsync(signals);
- await handler2.TrackDeletedHandleAsync(signals);
- await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ // var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+ //
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ // var handler3 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackDeletedHandleAsync(signals);
+ // await handler2.TrackDeletedHandleAsync(signals);
+ // await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index 387d77ca..ec670528 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -27,7 +27,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
- //private readonly WarningSignalPublisher _warningSignalPublisher;
+ private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackUpsertEventHandler(
@@ -38,8 +38,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
ILogger logger,
- IServiceProvider serviceProvider
- //WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider,
+ WarningSignalPublisher warningSignalPublisher
)
{
_orderRepository = orderRepository;
@@ -50,7 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_broadcastingService = broadcastingService;
_logger = logger;
_serviceProvider = serviceProvider;
- // _warningSignalPublisher = warningSignalPublisher;
+ _warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -516,57 +516,57 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
- var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackAddedHandleAsync(signals);
- await handler2.TrackAddedOrUpdatedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackAddedHandleAsync(signals);
+ // await handler2.TrackAddedOrUpdatedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
private void WarningCalc_UpdatedTrack(List tracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
- var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackAddedOrUpdatedHandleAsync(signals);
- await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+ //
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackAddedOrUpdatedHandleAsync(signals);
+ // await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index f946830b..b24448c9 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -200,7 +200,7 @@ public class SjzyTrackApplicationModule : AbpModule
$",abortConnect=false";
// 注册预警计算服务
- //context.Services.AddWarningCalcServices(configuration);
+ context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService();
From 4fb657ed13769a26e36da34779f6d49ac0970595 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 11:30:56 +0800
Subject: [PATCH 09/19] =?UTF-8?q?option:=E5=85=B3=E9=97=AD=E9=A2=84?=
=?UTF-8?q?=E8=AD=A6=E4=BF=A1=E5=8F=B7=E4=BC=98=E5=8C=96=E6=A8=A1=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/TrackDeleteEventHandler.cs | 60 +++++------
.../EventHandlers/TrackUpsertEventHandler.cs | 102 +++++++++---------
.../SjzyTrackApplicationModule.cs | 2 +-
3 files changed, 82 insertions(+), 82 deletions(-)
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 646096a3..16c4af9b 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -25,7 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
- private readonly WarningSignalPublisher _warningSignalPublisher;
+ // private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackDeleteEventHandler(
@@ -35,8 +35,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
- IServiceProvider serviceProvider,
- WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider
+ //WarningSignalPublisher warningSignalPublisher
)
{
_provideQueries = provideQueries;
@@ -46,7 +46,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
_broadcastingService = broadcastingService;
_serviceProvider = serviceProvider;
- _warningSignalPublisher = warningSignalPublisher;
+ //_warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -371,31 +371,31 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
- // var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
- //
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- // var handler3 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackDeletedHandleAsync(signals);
- // await handler2.TrackDeletedHandleAsync(signals);
- // await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+ var handler3 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackDeletedHandleAsync(signals);
+ await handler2.TrackDeletedHandleAsync(signals);
+ await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index ec670528..eccd7bbe 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -27,7 +27,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
- private readonly WarningSignalPublisher _warningSignalPublisher;
+ //private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackUpsertEventHandler(
@@ -38,8 +38,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
ILogger logger,
- IServiceProvider serviceProvider,
- WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider
+ //WarningSignalPublisher warningSignalPublisher
)
{
_orderRepository = orderRepository;
@@ -50,7 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_broadcastingService = broadcastingService;
_logger = logger;
_serviceProvider = serviceProvider;
- _warningSignalPublisher = warningSignalPublisher;
+ //_warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -516,57 +516,57 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
- // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackAddedHandleAsync(signals);
- // await handler2.TrackAddedOrUpdatedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackAddedHandleAsync(signals);
+ await handler2.TrackAddedOrUpdatedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
private void WarningCalc_UpdatedTrack(List tracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
- // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
- //
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackAddedOrUpdatedHandleAsync(signals);
- // await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackAddedOrUpdatedHandleAsync(signals);
+ await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index b24448c9..f946830b 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -200,7 +200,7 @@ public class SjzyTrackApplicationModule : AbpModule
$",abortConnect=false";
// 注册预警计算服务
- context.Services.AddWarningCalcServices(configuration);
+ //context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService();
From 3d3fc151fa74ea019fa136adac8b58aeddbf88fe Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 14:25:22 +0800
Subject: [PATCH 10/19] =?UTF-8?q?option:=E6=8C=87=E5=AE=9ARID=E5=B0=9D?=
=?UTF-8?q?=E8=AF=95=E5=90=AF=E7=94=A8=E9=A2=84=E8=AD=A6=E4=BF=A1=E5=8F=B7?=
=?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Api/SJZY.Track.Api.csproj | 1 +
.../EventHandlers/TrackDeleteEventHandler.cs | 60 +++++------
.../EventHandlers/TrackUpsertEventHandler.cs | 101 +++++++++---------
.../SjzyTrackApplicationModule.cs | 2 +-
4 files changed, 82 insertions(+), 82 deletions(-)
diff --git a/src/SJZY.Track.Api/SJZY.Track.Api.csproj b/src/SJZY.Track.Api/SJZY.Track.Api.csproj
index be47c0cf..dd41937c 100644
--- a/src/SJZY.Track.Api/SJZY.Track.Api.csproj
+++ b/src/SJZY.Track.Api/SJZY.Track.Api.csproj
@@ -7,6 +7,7 @@
True
Linux
..\..
+ linux-x64
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 16c4af9b..646096a3 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -25,7 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
- // private readonly WarningSignalPublisher _warningSignalPublisher;
+ private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackDeleteEventHandler(
@@ -35,8 +35,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
- IServiceProvider serviceProvider
- //WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider,
+ WarningSignalPublisher warningSignalPublisher
)
{
_provideQueries = provideQueries;
@@ -46,7 +46,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
_broadcastingService = broadcastingService;
_serviceProvider = serviceProvider;
- //_warningSignalPublisher = warningSignalPublisher;
+ _warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -371,31 +371,31 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
- var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
- var handler3 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackDeletedHandleAsync(signals);
- await handler2.TrackDeletedHandleAsync(signals);
- await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ // var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+ //
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ // var handler3 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackDeletedHandleAsync(signals);
+ // await handler2.TrackDeletedHandleAsync(signals);
+ // await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index eccd7bbe..c4670d3d 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -27,7 +27,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
- //private readonly WarningSignalPublisher _warningSignalPublisher;
+ private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackUpsertEventHandler(
@@ -38,8 +38,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
ILogger logger,
- IServiceProvider serviceProvider
- //WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider,
+ WarningSignalPublisher warningSignalPublisher
)
{
_orderRepository = orderRepository;
@@ -50,7 +50,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_broadcastingService = broadcastingService;
_logger = logger;
_serviceProvider = serviceProvider;
- //_warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -516,57 +515,57 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
- var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackAddedHandleAsync(signals);
- await handler2.TrackAddedOrUpdatedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackAddedHandleAsync(signals);
+ // await handler2.TrackAddedOrUpdatedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
private void WarningCalc_UpdatedTrack(List tracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
- var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackAddedOrUpdatedHandleAsync(signals);
- await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+ //
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackAddedOrUpdatedHandleAsync(signals);
+ // await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index f946830b..b24448c9 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -200,7 +200,7 @@ public class SjzyTrackApplicationModule : AbpModule
$",abortConnect=false";
// 注册预警计算服务
- //context.Services.AddWarningCalcServices(configuration);
+ context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService();
From ba340e34f8fc9b0822f258f322a6cedf8e75058f Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 14:30:03 +0800
Subject: [PATCH 11/19] =?UTF-8?q?option:=E5=85=B3=E9=97=AD=E9=A2=84?=
=?UTF-8?q?=E8=AD=A6=E4=BF=A1=E5=8F=B7=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/TrackDeleteEventHandler.cs | 60 +++++------
.../EventHandlers/TrackUpsertEventHandler.cs | 101 +++++++++---------
.../SjzyTrackApplicationModule.cs | 2 +-
3 files changed, 82 insertions(+), 81 deletions(-)
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 646096a3..16c4af9b 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -25,7 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
- private readonly WarningSignalPublisher _warningSignalPublisher;
+ // private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackDeleteEventHandler(
@@ -35,8 +35,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
- IServiceProvider serviceProvider,
- WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider
+ //WarningSignalPublisher warningSignalPublisher
)
{
_provideQueries = provideQueries;
@@ -46,7 +46,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
_broadcastingService = broadcastingService;
_serviceProvider = serviceProvider;
- _warningSignalPublisher = warningSignalPublisher;
+ //_warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -371,31 +371,31 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
- // var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
- //
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- // var handler3 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackDeletedHandleAsync(signals);
- // await handler2.TrackDeletedHandleAsync(signals);
- // await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+ var handler3 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackDeletedHandleAsync(signals);
+ await handler2.TrackDeletedHandleAsync(signals);
+ await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index c4670d3d..eccd7bbe 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -27,7 +27,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
- private readonly WarningSignalPublisher _warningSignalPublisher;
+ //private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackUpsertEventHandler(
@@ -38,8 +38,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
ILogger logger,
- IServiceProvider serviceProvider,
- WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider
+ //WarningSignalPublisher warningSignalPublisher
)
{
_orderRepository = orderRepository;
@@ -50,6 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_broadcastingService = broadcastingService;
_logger = logger;
_serviceProvider = serviceProvider;
+ //_warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -515,57 +516,57 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
- // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackAddedHandleAsync(signals);
- // await handler2.TrackAddedOrUpdatedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackAddedHandleAsync(signals);
+ await handler2.TrackAddedOrUpdatedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
private void WarningCalc_UpdatedTrack(List tracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
- // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
- //
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackAddedOrUpdatedHandleAsync(signals);
- // await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackAddedOrUpdatedHandleAsync(signals);
+ await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index b24448c9..f946830b 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -200,7 +200,7 @@ public class SjzyTrackApplicationModule : AbpModule
$",abortConnect=false";
// 注册预警计算服务
- context.Services.AddWarningCalcServices(configuration);
+ //context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService();
From 225e73deae92637961a172f3d727c372df2da634 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 15:12:33 +0800
Subject: [PATCH 12/19] =?UTF-8?q?check:=E5=A2=9E=E5=8A=A0=E5=90=AF?=
=?UTF-8?q?=E5=8A=A8=E7=89=88=E6=9C=AC=E6=A3=80=E6=9F=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Api/SjzyTrackApiModule.cs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/SJZY.Track.Api/SjzyTrackApiModule.cs b/src/SJZY.Track.Api/SjzyTrackApiModule.cs
index bc20b7f5..7a6b5e1a 100644
--- a/src/SJZY.Track.Api/SjzyTrackApiModule.cs
+++ b/src/SJZY.Track.Api/SjzyTrackApiModule.cs
@@ -98,6 +98,7 @@ public class SjzyTrackApiModule : AbpModule
#region 启动提示
+ Console.WriteLine("\r\nKafka.LibVersion:" + Confluent.Kafka.Library.VersionString);
Console.WriteLine($@"
+-------------------------------------------------------+
| |
From ab43747ace73631c4391dcc422e1145f7751f3d5 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 15:13:32 +0800
Subject: [PATCH 13/19] =?UTF-8?q?change-config:=E7=A7=BB=E9=99=A4rid?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Api/SJZY.Track.Api.csproj | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/SJZY.Track.Api/SJZY.Track.Api.csproj b/src/SJZY.Track.Api/SJZY.Track.Api.csproj
index dd41937c..be47c0cf 100644
--- a/src/SJZY.Track.Api/SJZY.Track.Api.csproj
+++ b/src/SJZY.Track.Api/SJZY.Track.Api.csproj
@@ -7,7 +7,6 @@
True
Linux
..\..
- linux-x64
From 19c6e019040a19cb22fdb696d4d88faf36dcb3aa Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 15:42:16 +0800
Subject: [PATCH 14/19] =?UTF-8?q?option:=E5=B0=9D=E8=AF=95=E5=90=AF?=
=?UTF-8?q?=E5=8A=A8=E4=BC=98=E5=8C=961?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Api/SjzyTrackApiModule.cs | 14 ++-
.../EventHandlers/TrackDeleteEventHandler.cs | 60 +++++------
.../EventHandlers/TrackUpsertEventHandler.cs | 102 +++++++++---------
.../SjzyTrackApplicationModule.cs | 2 +-
4 files changed, 95 insertions(+), 83 deletions(-)
diff --git a/src/SJZY.Track.Api/SjzyTrackApiModule.cs b/src/SJZY.Track.Api/SjzyTrackApiModule.cs
index 7a6b5e1a..9413b8fb 100644
--- a/src/SJZY.Track.Api/SjzyTrackApiModule.cs
+++ b/src/SJZY.Track.Api/SjzyTrackApiModule.cs
@@ -1,3 +1,5 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
using FluentValidation.AspNetCore;
using Hangfire;
using Microsoft.AspNetCore.Mvc;
@@ -98,7 +100,17 @@ public class SjzyTrackApiModule : AbpModule
#region 启动提示
- Console.WriteLine("\r\nKafka.LibVersion:" + Confluent.Kafka.Library.VersionString);
+ var isLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
+ var arch = RuntimeInformation.ProcessArchitecture;
+ var os = isLinux ? "linux-" : "win-";
+ var rid = os + arch;
+ Console.WriteLine("\r\nrid:" + rid);
+ // 获取当前程序集路径
+ var assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ var path = Path.Combine(assemblyPath, "runtimes", rid, "native", isLinux ? "librdkafka.so" : "librdkafka.dll");
+ var loadSuccess = Confluent.Kafka.Library.Load(path);
+ Console.WriteLine($"KafkaLib 加载{loadSuccess}");
+ Console.WriteLine("Kafka.LibVersion:" + Confluent.Kafka.Library.VersionString);
Console.WriteLine($@"
+-------------------------------------------------------+
| |
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 16c4af9b..646096a3 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -25,7 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
- // private readonly WarningSignalPublisher _warningSignalPublisher;
+ private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackDeleteEventHandler(
@@ -35,8 +35,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
- IServiceProvider serviceProvider
- //WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider,
+ WarningSignalPublisher warningSignalPublisher
)
{
_provideQueries = provideQueries;
@@ -46,7 +46,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
_broadcastingService = broadcastingService;
_serviceProvider = serviceProvider;
- //_warningSignalPublisher = warningSignalPublisher;
+ _warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -371,31 +371,31 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
- var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
- var handler3 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackDeletedHandleAsync(signals);
- await handler2.TrackDeletedHandleAsync(signals);
- await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ // var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+ //
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ // var handler3 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackDeletedHandleAsync(signals);
+ // await handler2.TrackDeletedHandleAsync(signals);
+ // await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index eccd7bbe..ec670528 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -27,7 +27,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
- //private readonly WarningSignalPublisher _warningSignalPublisher;
+ private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackUpsertEventHandler(
@@ -38,8 +38,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
ILogger logger,
- IServiceProvider serviceProvider
- //WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider,
+ WarningSignalPublisher warningSignalPublisher
)
{
_orderRepository = orderRepository;
@@ -50,7 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_broadcastingService = broadcastingService;
_logger = logger;
_serviceProvider = serviceProvider;
- //_warningSignalPublisher = warningSignalPublisher;
+ _warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -516,57 +516,57 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
- var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackAddedHandleAsync(signals);
- await handler2.TrackAddedOrUpdatedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackAddedHandleAsync(signals);
+ // await handler2.TrackAddedOrUpdatedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
private void WarningCalc_UpdatedTrack(List tracks)
{
- //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
- var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
-
- _ = Task.Run(async () =>
- {
- var scope = _serviceProvider.CreateAsyncScope();
- try
- {
- var handler = scope.ServiceProvider.GetRequiredService();
- var handler2 = scope.ServiceProvider.GetRequiredService();
-
- await Task.Delay(1500); //确保落盘
- await handler.TrackAddedOrUpdatedHandleAsync(signals);
- await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
- }
- catch (Exception ex)
- {
- LogHelper.Error(ex);
- }
- finally
- {
- await scope.DisposeAsync();
- }
- });
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+ //
+ // _ = Task.Run(async () =>
+ // {
+ // var scope = _serviceProvider.CreateAsyncScope();
+ // try
+ // {
+ // var handler = scope.ServiceProvider.GetRequiredService();
+ // var handler2 = scope.ServiceProvider.GetRequiredService();
+ //
+ // await Task.Delay(1500); //确保落盘
+ // await handler.TrackAddedOrUpdatedHandleAsync(signals);
+ // await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
+ // }
+ // catch (Exception ex)
+ // {
+ // LogHelper.Error(ex);
+ // }
+ // finally
+ // {
+ // await scope.DisposeAsync();
+ // }
+ // });
}
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index f946830b..b24448c9 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -200,7 +200,7 @@ public class SjzyTrackApplicationModule : AbpModule
$",abortConnect=false";
// 注册预警计算服务
- //context.Services.AddWarningCalcServices(configuration);
+ context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService();
From a8bbce208f7be2ff641af07bd978431208303dc3 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 15:50:40 +0800
Subject: [PATCH 15/19] =?UTF-8?q?option:=E5=85=B3=E9=97=AD=E9=A2=84?=
=?UTF-8?q?=E8=AD=A6=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Api/SjzyTrackApiModule.cs | 23 ++--
.../EventHandlers/TrackDeleteEventHandler.cs | 60 +++++------
.../EventHandlers/TrackUpsertEventHandler.cs | 102 +++++++++---------
.../SjzyTrackApplicationModule.cs | 2 +-
4 files changed, 94 insertions(+), 93 deletions(-)
diff --git a/src/SJZY.Track.Api/SjzyTrackApiModule.cs b/src/SJZY.Track.Api/SjzyTrackApiModule.cs
index 9413b8fb..8c0ff673 100644
--- a/src/SJZY.Track.Api/SjzyTrackApiModule.cs
+++ b/src/SJZY.Track.Api/SjzyTrackApiModule.cs
@@ -100,17 +100,18 @@ public class SjzyTrackApiModule : AbpModule
#region 启动提示
- var isLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
- var arch = RuntimeInformation.ProcessArchitecture;
- var os = isLinux ? "linux-" : "win-";
- var rid = os + arch;
- Console.WriteLine("\r\nrid:" + rid);
- // 获取当前程序集路径
- var assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- var path = Path.Combine(assemblyPath, "runtimes", rid, "native", isLinux ? "librdkafka.so" : "librdkafka.dll");
- var loadSuccess = Confluent.Kafka.Library.Load(path);
- Console.WriteLine($"KafkaLib 加载{loadSuccess}");
- Console.WriteLine("Kafka.LibVersion:" + Confluent.Kafka.Library.VersionString);
+ // var isLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
+ // var arch = RuntimeInformation.ProcessArchitecture;
+ // var os = isLinux ? "linux-" : "win-";
+ // var rid = os + arch;
+ // Console.WriteLine("\r\nrid:" + rid);
+ // // 获取当前程序集路径
+ // var assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ // var path = Path.Combine(assemblyPath, "runtimes", rid, "native", isLinux ? "librdkafka.so" : "librdkafka.dll");
+ // Console.WriteLine("libPath:"+path);
+ // var loadSuccess = Confluent.Kafka.Library.Load(path);
+ // Console.WriteLine($"KafkaLib 加载{loadSuccess}");
+ // Console.WriteLine("Kafka.LibVersion:" + Confluent.Kafka.Library.VersionString);
Console.WriteLine($@"
+-------------------------------------------------------+
| |
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 646096a3..16c4af9b 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -25,7 +25,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
- private readonly WarningSignalPublisher _warningSignalPublisher;
+ // private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackDeleteEventHandler(
@@ -35,8 +35,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
- IServiceProvider serviceProvider,
- WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider
+ //WarningSignalPublisher warningSignalPublisher
)
{
_provideQueries = provideQueries;
@@ -46,7 +46,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
_broadcastingService = broadcastingService;
_serviceProvider = serviceProvider;
- _warningSignalPublisher = warningSignalPublisher;
+ //_warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -371,31 +371,31 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
- // var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
- //
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- // var handler3 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackDeletedHandleAsync(signals);
- // await handler2.TrackDeletedHandleAsync(signals);
- // await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
+
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+ var handler3 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackDeletedHandleAsync(signals);
+ await handler2.TrackDeletedHandleAsync(signals);
+ await handler3.TrackUpdatedOrDeletedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index ec670528..eccd7bbe 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -27,7 +27,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
- private readonly WarningSignalPublisher _warningSignalPublisher;
+ //private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
public TrackUpsertEventHandler(
@@ -38,8 +38,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
IBroadcastingService broadcastingService,
ILogger logger,
- IServiceProvider serviceProvider,
- WarningSignalPublisher warningSignalPublisher
+ IServiceProvider serviceProvider
+ //WarningSignalPublisher warningSignalPublisher
)
{
_orderRepository = orderRepository;
@@ -50,7 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_broadcastingService = broadcastingService;
_logger = logger;
_serviceProvider = serviceProvider;
- _warningSignalPublisher = warningSignalPublisher;
+ //_warningSignalPublisher = warningSignalPublisher;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -516,57 +516,57 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
- // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackAddedHandleAsync(signals);
- // await handler2.TrackAddedOrUpdatedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackAddedHandleAsync(signals);
+ await handler2.TrackAddedOrUpdatedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
private void WarningCalc_UpdatedTrack(List tracks)
{
- _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
- // var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
- //
- // _ = Task.Run(async () =>
- // {
- // var scope = _serviceProvider.CreateAsyncScope();
- // try
- // {
- // var handler = scope.ServiceProvider.GetRequiredService();
- // var handler2 = scope.ServiceProvider.GetRequiredService();
- //
- // await Task.Delay(1500); //确保落盘
- // await handler.TrackAddedOrUpdatedHandleAsync(signals);
- // await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
- // }
- // catch (Exception ex)
- // {
- // LogHelper.Error(ex);
- // }
- // finally
- // {
- // await scope.DisposeAsync();
- // }
- // });
+ //_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
+
+ _ = Task.Run(async () =>
+ {
+ var scope = _serviceProvider.CreateAsyncScope();
+ try
+ {
+ var handler = scope.ServiceProvider.GetRequiredService();
+ var handler2 = scope.ServiceProvider.GetRequiredService();
+
+ await Task.Delay(1500); //确保落盘
+ await handler.TrackAddedOrUpdatedHandleAsync(signals);
+ await handler2.TrackUpdatedOrDeletedHandleAsync(signals);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(ex);
+ }
+ finally
+ {
+ await scope.DisposeAsync();
+ }
+ });
}
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index b24448c9..f946830b 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -200,7 +200,7 @@ public class SjzyTrackApplicationModule : AbpModule
$",abortConnect=false";
// 注册预警计算服务
- context.Services.AddWarningCalcServices(configuration);
+ //context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService();
From 1dfe434aeeb5d2f95022d9a35f6b7cee6d8530b8 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Tue, 13 May 2025 17:12:09 +0800
Subject: [PATCH 16/19] =?UTF-8?q?option:=E4=BC=98=E5=8C=96=E9=80=89?=
=?UTF-8?q?=E9=A1=B9=E8=AE=BE=E7=BD=AE=E4=B8=BA=E5=8F=AF=E9=80=89=E9=A1=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Api/Program.cs | 6 ++++++
.../EventHandlers/TrackDeleteEventHandler.cs | 9 +++++++++
.../EventHandlers/TrackUpsertEventHandler.cs | 20 +++++++++++++++++++
.../SjzyTrackApplicationModule.cs | 3 ++-
src/SJZY.Track.Application/_BUGOptions.cs | 6 ++++++
5 files changed, 43 insertions(+), 1 deletion(-)
create mode 100644 src/SJZY.Track.Application/_BUGOptions.cs
diff --git a/src/SJZY.Track.Api/Program.cs b/src/SJZY.Track.Api/Program.cs
index 8d7f64af..af018471 100644
--- a/src/SJZY.Track.Api/Program.cs
+++ b/src/SJZY.Track.Api/Program.cs
@@ -2,10 +2,16 @@ using SJZY.Expand.ABP.Core.Configuration;
using SJZY.Expand.ABP.Core.Configuration.AutoRegistOptions;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Track.Api;
+using SJZY.Track.Application;
try
{
var builder = WebApplication.CreateBuilder(args);
+ if (args.Length > 0)
+ {
+ _BUGOptions.EnablePref = "on".Equals(args[0]);
+ Console.WriteLine($"是否启动优化模式:{_BUGOptions.EnablePref}");
+ }
builder
.AddConfigurationContainer()
.AddOptionsFromConfiguration()
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 16c4af9b..33d65d4f 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -371,6 +371,15 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_DeletedTrack(List delTracks)
{
+ if (_BUGOptions.EnablePref)
+ {
+ var scope = _serviceProvider.CreateScope();
+ var _warningSignalPublisher = scope.ServiceProvider.GetRequiredService();
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
+ scope.Dispose();
+ return;
+ }
+
//_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹删除, delTracks);
var signals = WarningSignal.FromTrack(delTracks, WarningSignalType.轨迹删除);
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index eccd7bbe..65070319 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -26,7 +26,9 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
private readonly IBroadcastingService _broadcastingService;
private readonly ILogger _logger;
+
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
+
//private readonly WarningSignalPublisher _warningSignalPublisher;
private readonly IServiceProvider _serviceProvider;
@@ -516,6 +518,15 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_AddedTrack(List tracks)
{
+ if (_BUGOptions.EnablePref)
+ {
+ var scope = _serviceProvider.CreateScope();
+ var _warningSignalPublisher = scope.ServiceProvider.GetRequiredService();
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
+ scope.Dispose();
+ return;
+ }
+
//_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹新增, tracks);
var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹新增);
_ = Task.Run(async () =>
@@ -544,6 +555,15 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private void WarningCalc_UpdatedTrack(List tracks)
{
+ if (_BUGOptions.EnablePref)
+ {
+ var scope = _serviceProvider.CreateScope();
+ var _warningSignalPublisher = scope.ServiceProvider.GetRequiredService();
+ _warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
+ scope.Dispose();
+ return;
+ }
+
//_warningSignalPublisher.PublishWarningSignal(WarningSignalType.轨迹更新, tracks);
var signals = WarningSignal.FromTrack(tracks, WarningSignalType.轨迹更新);
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index f946830b..23a5cc5f 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -200,7 +200,8 @@ public class SjzyTrackApplicationModule : AbpModule
$",abortConnect=false";
// 注册预警计算服务
- //context.Services.AddWarningCalcServices(configuration);
+ if (_BUGOptions.EnablePref)
+ context.Services.AddWarningCalcServices(configuration);
// 注册预警任务后台服务
context.Services.AddHostedService();
diff --git a/src/SJZY.Track.Application/_BUGOptions.cs b/src/SJZY.Track.Application/_BUGOptions.cs
new file mode 100644
index 00000000..3418cbe9
--- /dev/null
+++ b/src/SJZY.Track.Application/_BUGOptions.cs
@@ -0,0 +1,6 @@
+namespace SJZY.Track.Application;
+
+public static class _BUGOptions
+{
+ public static bool EnablePref = false;
+}
From 71315a07fd3db3e5b18149d979a8c9acfd96e14a Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Wed, 14 May 2025 10:47:50 +0800
Subject: [PATCH 17/19] =?UTF-8?q?debug:=E5=A2=9E=E5=8A=A0=E6=B5=8B?=
=?UTF-8?q?=E8=AF=95kafka=E5=BA=93=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Api/Program.cs | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/SJZY.Track.Api/Program.cs b/src/SJZY.Track.Api/Program.cs
index af018471..ecfd4dff 100644
--- a/src/SJZY.Track.Api/Program.cs
+++ b/src/SJZY.Track.Api/Program.cs
@@ -11,6 +11,11 @@ try
{
_BUGOptions.EnablePref = "on".Equals(args[0]);
Console.WriteLine($"是否启动优化模式:{_BUGOptions.EnablePref}");
+ if (_BUGOptions.EnablePref)
+ {
+ var loadSuccess = Confluent.Kafka.Library.Load(null);
+ Console.WriteLine($"加载{loadSuccess},版本号:{Confluent.Kafka.Library.VersionString}");
+ }
}
builder
.AddConfigurationContainer()
From 22080431b72e61e59d6b39d37be761b1f6e428a2 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Thu, 15 May 2025 15:36:45 +0800
Subject: [PATCH 18/19] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E7=BC=BA=E5=A4=B1?=
=?UTF-8?q?=E4=B8=BB=E6=95=B0=E6=8D=AE=E6=9E=9A=E4=B8=BE=E6=8F=8F=E8=BF=B0?=
=?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Repository/Repositories/OrderRepository.cs | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index c4933fcd..e2ef66ee 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -223,14 +223,14 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
x.OrderTypeName = typeDisplayDict.TryGetValue(GlobalConst.MainDataKey_OrderType, out var orderTypeDisplayDict)
? orderTypeDisplayDict.TryGetValue(x.OrderType, out var orderTypeDisplay)
? orderTypeDisplay
- : $"未在主数据中心找到Property:[{GlobalConst.MainDataKey_OrderType}] "
- : $"未在主数据中心找到Property:[{GlobalConst.MainDataKey_OrderType}] EnumKey:[{x.OrderType}]";
+ : $"未在主数据中心找到Property:[{GlobalConst.MainDataKey_OrderType}],EnumKey:[{x.OrderType}]"
+ : $"未在主数据中心找到Property:[{GlobalConst.MainDataKey_OrderType}]";
x.QuestionTypeName = typeDisplayDict.TryGetValue(GlobalConst.MainDataKey_TrackQuestionType, out var questDisplayDict)
? questDisplayDict.TryGetValue(x.QuestionType, out var questDisplay)
? questDisplay
- : $"未在主数据中心找到Property:[{GlobalConst.MainDataKey_OrderType}]"
- : $"未在主数据中心找到Property:[{GlobalConst.MainDataKey_TrackQuestionType}] EnumKey:[{x.OrderType}]";
+ : $"未在主数据中心找到Property:[{GlobalConst.MainDataKey_OrderType}],EnumKey:[{x.QuestionType}]"
+ : $"未在主数据中心找到Property:[{GlobalConst.MainDataKey_TrackQuestionType}]";
});
return pageList;
From 25eb439324289d32cd45682d2d0870ca018799cf Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Fri, 16 May 2025 16:20:57 +0800
Subject: [PATCH 19/19] =?UTF-8?q?option:=E5=90=AF=E7=94=A8RabbitMQ?=
=?UTF-8?q?=E7=9A=84=E5=8F=91=E5=B8=83=E7=A1=AE=E8=AE=A4=E6=A8=A1=E5=BC=8F?=
=?UTF-8?q?=EF=BC=8C=E6=8F=90=E9=AB=98=E6=8A=95=E9=80=92=E6=B6=88=E6=81=AF?=
=?UTF-8?q?=E7=9A=84=E5=8F=AF=E9=9D=A0=E6=80=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/IBroadcastingService.cs | 7 +-
.../Rabbit/RabbitClientBusExt.cs | 81 +++++++++++++++++++
.../Rabbit/TrackPushCompletedEventHandler.cs | 2 +-
.../Broadcasting/BroadcastingService.cs | 56 +++++++++----
.../SjzyTrackApplicationModule.cs | 7 +-
5 files changed, 132 insertions(+), 21 deletions(-)
create mode 100644 src/SJZY.Track.Application/Rabbit/RabbitClientBusExt.cs
diff --git a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
index 238f015b..91d34dec 100644
--- a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
+++ b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
@@ -20,9 +20,14 @@ public interface IBroadcastingService : ITransientDependency
///
///
///
- ///
void TrackChangePublicTopic(TrackChangeEto eto, string subSystemCode);
+ ///
+ /// 轨迹推送完成广播(推送完成回调)
+ ///
+ ///
+ void TrackPushCompletedPublicTopic(List list);
+
///
/// 轨迹推送完成广播(推送完成回调)
///
diff --git a/src/SJZY.Track.Application/Rabbit/RabbitClientBusExt.cs b/src/SJZY.Track.Application/Rabbit/RabbitClientBusExt.cs
new file mode 100644
index 00000000..55ff1ae3
--- /dev/null
+++ b/src/SJZY.Track.Application/Rabbit/RabbitClientBusExt.cs
@@ -0,0 +1,81 @@
+using System.Diagnostics;
+using BSI.Stack.Rabbit;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using RabbitMQ.Client;
+using Volo.Abp.DependencyInjection;
+
+namespace SJZY.Track.Application.Rabbit;
+
+///
+/// 支持发布确认模式
+///
+public class RabbitClientBusExt : RabbitClientBus, ISingletonDependency
+{
+ public RabbitClientBusExt(IServiceProvider sp, ILogger logger)
+ : base(sp, logger, sp.GetRequiredService>().CurrentValue)
+ {
+ }
+
+ public void PublishByConfirmSelect(
+ string exchange,
+ string routingKey,
+ byte[] data,
+ Action? options = null
+ )
+ {
+ using var activity = RabbitInstrumentation.ActivitySource.StartActivity("/" + exchange + "/" + routingKey);
+ activity?.SetTag("kind", "publish");
+ var key = exchange + ":" + routingKey;
+ Lazy orAdd = Channels.GetOrAdd(key, (Func>) (_ => new Lazy(CreateModel)));
+ var basicProperties1 = orAdd.Value.CreateBasicProperties();
+
+ // 配置属性
+ if (options != null)
+ options(basicProperties1);
+ var model = orAdd.Value;
+
+ // 启用发布确认
+ model.ConfirmSelect();
+ var readOnlyMemory = (ReadOnlyMemory) data;
+ model.BasicPublish(exchange, routingKey, basicProperties1, readOnlyMemory);
+ model.WaitForConfirmsOrDie();
+ }
+
+ public void PublishByConfirmSelect(
+ string exchange,
+ string routingKey,
+ IEnumerable datas,
+ Action? options = null
+ )
+ {
+ using var activity = RabbitInstrumentation.ActivitySource.StartActivity("/" + exchange + "/" + routingKey);
+ activity?.SetTag("kind", "publish");
+ var key = exchange + ":" + routingKey;
+ Lazy orAdd = Channels.GetOrAdd(key, (Func>) (_ => new Lazy(CreateModel)));
+ var basicProperties1 = orAdd.Value.CreateBasicProperties();
+
+ // 配置属性
+ if (options != null)
+ options(basicProperties1);
+ var model = orAdd.Value;
+
+ // 启用发布确认
+ model.ConfirmSelect();
+ foreach (var data in datas)
+ {
+ var readOnlyMemory = (ReadOnlyMemory) data;
+ model.BasicPublish(exchange, routingKey, basicProperties1, readOnlyMemory);
+ }
+ model.WaitForConfirmsOrDie();
+ }
+
+ private IConnection GetConnection()
+ {
+ var key = Connections.OrderBy((Func, int>) (q => q.Value)).Select((Func, IConnection>) (q => q.Key)).FirstOrDefault();
+ Connections.AddOrUpdate(key, (Func) (_ => 1), (Func) ((_, v) => v + 1));
+ return key;
+ }
+
+ private IModel CreateModel() => GetConnection().CreateModel();
+}
diff --git a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
index 8561d827..1ba4da4b 100644
--- a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
+++ b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
@@ -84,7 +84,7 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
// 推送广播
if (logs.First().IsToMq)
- logs.ForEach(log => _broadcastingService.TrackPushCompletedPublicTopic(BuildDto(log)));
+ _broadcastingService.TrackPushCompletedPublicTopic(logs.Select(BuildDto).ToList());
// 写入推送日志
await _trackPushRecordEsRepository.AddManyAsync(logs);
diff --git a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
index 7af7e83b..1723a226 100644
--- a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
+++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
@@ -1,9 +1,9 @@
using System.Text;
-using BSI.Stack.Rabbit;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
+using SJZY.Track.Application.Rabbit;
namespace SJZY.Track.Application.Services.Broadcasting;
@@ -12,9 +12,9 @@ namespace SJZY.Track.Application.Services.Broadcasting;
///
public class BroadcastingService : IBroadcastingService
{
- private readonly RabbitClientBus _rabbitClientBus;
+ private readonly RabbitClientBusExt _rabbitClientBus;
- public BroadcastingService(RabbitClientBus rabbitClientBus)
+ public BroadcastingService(RabbitClientBusExt rabbitClientBus)
{
_rabbitClientBus = rabbitClientBus;
}
@@ -64,15 +64,29 @@ public class BroadcastingService : IBroadcastingService
else
data.Option = 3;
- _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
- Encoding.UTF8.GetBytes(data.ToJson()));
+ _rabbitClientBus.PublishByConfirmSelect(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
+ Encoding.UTF8.GetBytes(data.ToJson()), prop => { prop.Persistent = true; });
}
public void TrackChangePublicTopic(TrackChangeEto eto, string subSystemCode)
{
eto.Option = 2;
- _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
- Encoding.UTF8.GetBytes(eto.ToJson()));
+ _rabbitClientBus.PublishByConfirmSelect(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
+ Encoding.UTF8.GetBytes(eto.ToJson()), prop => { prop.Persistent = true; });
+ }
+
+ ///
+ /// 轨迹推送完成广播(批量)
+ ///
+ ///
+ ///
+ public void TrackPushCompletedPublicTopic(List list)
+ {
+ var datas = list
+ .Select(TrackPushRecordDtoToEvent)
+ .Select(x => Encoding.UTF8.GetBytes(x.ToJson()));
+ var log = list.First();
+ _rabbitClientBus.PublishByConfirmSelect(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}", datas, prop => { prop.Persistent = true; });
}
///
@@ -82,7 +96,24 @@ public class BroadcastingService : IBroadcastingService
///
public void TrackPushCompletedPublicTopic(TrackPushRecordDto log)
{
- var data = new TrackPushCompletedEvent
+ var data = TrackPushRecordDtoToEvent(log);
+ _rabbitClientBus.PublishByConfirmSelect(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}",
+ Encoding.UTF8.GetBytes(data.ToJson()), prop => { prop.Persistent = true; });
+ }
+
+ ///
+ /// 轨迹推送失败广播
+ ///
+ ///
+ public void TrackPushFailedPubilcTopic(TrackPushRecordDto log)
+ {
+ //暂时使用推送完成模型,后续可能会出现有区分度的模型
+ TrackPushCompletedPublicTopic(log);
+ }
+
+ private static TrackPushCompletedEvent TrackPushRecordDtoToEvent(TrackPushRecordDto log)
+ {
+ return new TrackPushCompletedEvent
{
RequestId = log.RequestId,
IsSuccess = log.IsSuccess,
@@ -101,14 +132,5 @@ public class BroadcastingService : IBroadcastingService
TrackCode = log.TrackCode,
Extra = log.Extra
};
-
- _rabbitClientBus.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}",
- Encoding.UTF8.GetBytes(data.ToJson()));
- }
-
- public void TrackPushFailedPubilcTopic(TrackPushRecordDto log)
- {
- //暂时使用推送完成模型,后续可能会出现有区分度的模型
- TrackPushCompletedPublicTopic(log);
}
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index 23a5cc5f..a3020ec5 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -139,7 +139,7 @@ public class SjzyTrackApplicationModule : AbpModule
Console.WriteLine("-- 当前为VS本地环境,用内存存储和内存队列");
}
- context.Services.AddRabbitBoot(options =>
+ Action action = options =>
{
options.ConnectionString =
$"amqp://{configuration["RabbitMQ:UserName"]}:{configuration["RabbitMQ:Password"]}@{configuration["RabbitMQ:HostName"]}:{configuration["RabbitMQ:Port"]}";
@@ -178,7 +178,10 @@ public class SjzyTrackApplicationModule : AbpModule
}
}
};
- }, typeof(SjzyTrackApplicationModule).Assembly);
+ };
+
+ context.Services.Configure(action);
+ context.Services.AddRabbitBoot(action, typeof(SjzyTrackApplicationModule).Assembly);
context.Services.Configure(configuration.GetSection("TrackApp"));
context.Services.Configure(