From e0be935489da76c5b9ad57d8fb614399d6d8544c Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Thu, 16 Jan 2025 11:51:26 +0800
Subject: [PATCH] =?UTF-8?q?update:=E6=96=B0=E5=A2=9E/=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E8=BD=A8=E8=BF=B9=E5=BB=B6=E6=97=B6=E5=8F=91=E9=80=81=E5=8F=98?=
=?UTF-8?q?=E6=9B=B4=E5=B9=BF=E6=92=AD=EF=BC=8C=E7=9B=AE=E7=9A=84=E4=B8=BA?=
=?UTF-8?q?=E4=BA=86=E7=AD=89=E5=BE=85es=E5=AE=9E=E9=99=85=E5=86=99?=
=?UTF-8?q?=E7=9B=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/IBroadcastingService.cs | 6 ++---
.../EventHandlers/TrackDeleteEventHandler.cs | 4 +--
.../EventHandlers/TrackPushEventHandler.cs | 2 +-
.../EventHandlers/TrackUpsertEventHandler.cs | 25 +++++++++++--------
.../Helpers/TextJsonHelper.cs | 6 ++---
.../Broadcasting/BroadcastingService.cs | 6 ++---
6 files changed, 27 insertions(+), 22 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
index a3d1091e..782126bb 100644
--- a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
+++ b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
@@ -12,7 +12,7 @@ public interface IBroadcastingService : ITransientDependency
///
///
///
- void TrackChangePublicTopicAsync(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode);
+ void TrackChangePublicTopic(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode);
///
/// 轨迹变更广播(删除)
@@ -20,7 +20,7 @@ public interface IBroadcastingService : ITransientDependency
///
///
///
- void TrackChangePublicTopicAsync(TrackDeleteEvent eto, OrderIdentifier[] orderIdentifiers, string trackCode, string trackStatusCode, string subSystemCode);
+ void TrackChangePublicTopic(TrackDeleteEvent eto, OrderIdentifier[] orderIdentifiers, string trackCode, string trackStatusCode, string subSystemCode);
///
/// 轨迹变更广播(删除)
@@ -28,7 +28,7 @@ public interface IBroadcastingService : ITransientDependency
///
///
///
- void TrackChangePublicTopicAsync(TrackChangeEto eto, string subSystemCode);
+ void TrackChangePublicTopic(TrackChangeEto eto, string subSystemCode);
///
/// 轨迹推送完成广播(推送完成回调)
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 1265a4d9..d3bda67b 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -147,7 +147,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
var item = dataItem.First();
var content = contentList.First(m => m.TrackContentCode == item.TrackCode);
- // _broadcastingService.TrackChangePublicTopicAsync(track,
+ // _broadcastingService.TrackChangePublicTopic(track,
// dataItem.Select(m => new OrderIdentifier
// {
// OrderId = m.OrderId,
@@ -162,7 +162,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
//将每个订单的每个轨迹的删除变更发布
foreach (var track in dataItem)
{
- _broadcastingService.TrackChangePublicTopicAsync(new TrackChangeEto
+ _broadcastingService.TrackChangePublicTopic(new TrackChangeEto
{
EstimatedDeliveryDate = track.EstimatedDeliveryDate,
TrackPlacePostcode = track.TrackPlacePostcode,
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
index fc9c5e03..cd792aa6 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
@@ -408,7 +408,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
if (config.IsAllPushWithLatest)
{
//同code同比较字段保证唯一
- var old = body!.Data
+ var old = body.Data
.Where(x =>
{
//反序列化出的JsonElement和字典字符串类型做比较
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index 135bb0bd..1cd62f13 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -56,7 +56,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
// 处理广播事件
if (content != null && (content.IsToMq || @event.IsToMq))
- _broadcastingService.TrackChangePublicTopicAsync(@event, content.SubSystemCode, content.TrackStatusCode);
+ _ = EnsureWriteAfterPublicTopicAsync(@event, content.SubSystemCode, content.TrackStatusCode);
if (canNextOrderIds.Count == 0) return;
// 根据订单关联关系异步向下刷(异步)
@@ -277,7 +277,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
else
{
Debug.Assert(@event.CompareFields != null, "@event.CompareFields != null");
- var extraDict = GetExtraDictForTextJson(@event.Extra);
+ var extraDict = TextJsonHelper.DeserializeDictionary(@event.Extra);
if (extraDict == null || !extraDict.TryGetValue(@event.CompareFields, out var compareValue))
{
throw new BusinessException(message: $"请检查拓展字段,为什么找不到比较字段:{@event.CompareFields}");
@@ -285,7 +285,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
existTracks = existTracks.Where(x =>
{
- var oldExtraDict = GetExtraDictForTextJson(x.Extra);
+ var oldExtraDict = TextJsonHelper.DeserializeDictionary(x.Extra);
// tips:注意兼容性,历史轨迹的字段可能为空
if (oldExtraDict == null || !oldExtraDict.TryGetValue(@event.CompareFields, out var oldValue))
{
@@ -432,13 +432,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
return track;
}
- private Dictionary? GetExtraDictForTextJson(string? extraStr)
- {
- return string.IsNullOrWhiteSpace(extraStr)
- ? null
- : System.Text.Json.JsonSerializer.Deserialize>(extraStr);
- }
-
private OrderOperationRecordIndex BuildOrderOperationRecord(TrackUpsertEvent @event, TrackDetailsIndex track, OrderIdentifier order)
{
return new OrderOperationRecordIndex
@@ -452,4 +445,16 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
CreateTime = DateTime.Now
};
}
+
+ private async Task EnsureWriteAfterPublicTopicAsync(TrackUpsertEvent @event, string subSystemCode, string statusCode)
+ {
+ //理想情况在写入之后1s会刷盘 https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-refresh.html
+ //增加一个版本号来确定是否真的变更了
+ //没有刷盘成功事件回调
+ //方案1:!!【轮询等待静默刷盘】查出版本号确实发生了变更在发送广播
+ //方案2:考虑强制刷盘(对es压力大)后发送
+ //方案3:采用一个较大延时,不查询直接发
+ await Task.Delay(1000);
+ _broadcastingService.TrackChangePublicTopic(@event, subSystemCode, statusCode);
+ }
}
diff --git a/src/SJZY.Track.Application/Helpers/TextJsonHelper.cs b/src/SJZY.Track.Application/Helpers/TextJsonHelper.cs
index e63b0360..b7c833cf 100644
--- a/src/SJZY.Track.Application/Helpers/TextJsonHelper.cs
+++ b/src/SJZY.Track.Application/Helpers/TextJsonHelper.cs
@@ -18,11 +18,11 @@ public static class TextJsonHelper
return string.IsNullOrWhiteSpace(json) ? default : System.Text.Json.JsonSerializer.Deserialize(json);
}
- public static Dictionary? DeserializeDictionary(string? dictString)
+ public static Dictionary? DeserializeDictionary(string? dictJsonString)
{
- return string.IsNullOrWhiteSpace(dictString)
+ return string.IsNullOrWhiteSpace(dictJsonString)
? null
- : System.Text.Json.JsonSerializer.Deserialize>(dictString);
+ : System.Text.Json.JsonSerializer.Deserialize>(dictJsonString);
}
///
diff --git a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
index 4add29c6..7322f296 100644
--- a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
+++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
@@ -26,7 +26,7 @@ public class BroadcastingService : IBroadcastingService
/// 子系统代码
/// 轨迹状态代码
///
- public void TrackChangePublicTopicAsync(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode)
+ public void TrackChangePublicTopic(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode)
{
var data = new TrackChangeEto
{
@@ -65,7 +65,7 @@ public class BroadcastingService : IBroadcastingService
Encoding.UTF8.GetBytes(data.ToJson()));
}
- public void TrackChangePublicTopicAsync(TrackDeleteEvent eto, OrderIdentifier[] orderIdentifiers, string trackCode, string trackStatusCode, string subSystemCode)
+ public void TrackChangePublicTopic(TrackDeleteEvent eto, OrderIdentifier[] orderIdentifiers, string trackCode, string trackStatusCode, string subSystemCode)
{
var data = new TrackChangeEto
{
@@ -81,7 +81,7 @@ public class BroadcastingService : IBroadcastingService
Encoding.UTF8.GetBytes(data.ToJson()));
}
- public void TrackChangePublicTopicAsync(TrackChangeEto eto, string subSystemCode)
+ public void TrackChangePublicTopic(TrackChangeEto eto, string subSystemCode)
{
_rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
Encoding.UTF8.GetBytes(eto.ToJson()));