优化Redis发布订阅

This commit is contained in:
ChenYi 2025-08-15 13:45:57 +08:00
parent 0d2371d881
commit 12e407f523
2 changed files with 9 additions and 5 deletions

@ -1 +1 @@
Subproject commit 3ef9c78974a2d08b8fd73042951d3481d3d32291 Subproject commit 125082c75bd469f43f2e445e488a3c425a804fc6

View File

@ -41,6 +41,9 @@ namespace JiShe.ServicePro.OneNETManagement.Subscribers
{ {
// 为订阅回调创建独立的 FreeSql 客户端 // 为订阅回调创建独立的 FreeSql 客户端
var callbackFreeSqlDbContext = FreeSqlDbContext; var callbackFreeSqlDbContext = FreeSqlDbContext;
var callbackFreeSql = RedisProvider;
// 订阅频道 // 订阅频道
await _redisPubSubService.SubscribeReliableAsync<DeviceStatusMessage>(RedisConst.ServiceCommunicationDeviceStatusEventName, async (message) => await _redisPubSubService.SubscribeReliableAsync<DeviceStatusMessage>(RedisConst.ServiceCommunicationDeviceStatusEventName, async (message) =>
{ {
@ -48,7 +51,7 @@ namespace JiShe.ServicePro.OneNETManagement.Subscribers
{ {
_logger.LogWarning($"Redis订阅收到设备状态消息: {message.Serialize()}"); _logger.LogWarning($"Redis订阅收到设备状态消息: {message.Serialize()}");
HandDeviceStatus(message, callbackFreeSqlDbContext).ConfigureAwait(false).GetAwaiter().GetResult(); HandDeviceStatus(message, callbackFreeSqlDbContext, callbackFreeSql).ConfigureAwait(false).GetAwaiter().GetResult();
return true; return true;
} }
catch (Exception ex) catch (Exception ex)
@ -71,9 +74,10 @@ namespace JiShe.ServicePro.OneNETManagement.Subscribers
/// </summary> /// </summary>
/// <param name="deviceStatusMessage"></param> /// <param name="deviceStatusMessage"></param>
/// <param name="callbackFreeSqlDbContext"></param> /// <param name="callbackFreeSqlDbContext"></param>
/// <param name="callbackFreeRedisProvider"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="UserFriendlyException"></exception> /// <exception cref="UserFriendlyException"></exception>
private async Task HandDeviceStatus(DeviceStatusMessage deviceStatusMessage, IFreeSqlProvider callbackFreeSqlDbContext) private async Task HandDeviceStatus(DeviceStatusMessage deviceStatusMessage, IFreeSqlProvider callbackFreeSqlDbContext, IFreeRedisProvider callbackFreeRedisProvider)
{ {
try try
{ {
@ -100,7 +104,7 @@ namespace JiShe.ServicePro.OneNETManagement.Subscribers
deviceEntity.LastOfflineTime = TimestampHelper.ConvertToDateTime(deviceStatusMessage.ReceivedTime, TimestampUnit.Milliseconds, DateTimeKind.Local); deviceEntity.LastOfflineTime = TimestampHelper.ConvertToDateTime(deviceStatusMessage.ReceivedTime, TimestampUnit.Milliseconds, DateTimeKind.Local);
} }
var updateResult = await FreeSqlDbContext.Instance.Update<DeviceManagementInfo>() var updateResult = await callbackFreeSqlDbContext.Instance.Update<DeviceManagementInfo>()
.SetSource(deviceEntity) .SetSource(deviceEntity)
.UpdateColumns(a => new { a.DeviceOnlineStatus, a.LastOnlineTime, a.LastOfflineTime }) .UpdateColumns(a => new { a.DeviceOnlineStatus, a.LastOnlineTime, a.LastOfflineTime })
.ExecuteAffrowsAsync(); .ExecuteAffrowsAsync();
@ -117,7 +121,7 @@ namespace JiShe.ServicePro.OneNETManagement.Subscribers
deviceCacheInfos.IoTPlatformResponse = null; deviceCacheInfos.IoTPlatformResponse = null;
deviceCacheInfos.PlatformPassword = null; deviceCacheInfos.PlatformPassword = null;
RedisProvider.Instance.HSet<DeviceCacheInfos>(RedisConst.CacheAllDeviceInfoHashKey, deviceEntity.DeviceAddress, deviceCacheInfos); callbackFreeRedisProvider.Instance.HSet<DeviceCacheInfos>(RedisConst.CacheAllDeviceInfoHashKey, deviceEntity.DeviceAddress, deviceCacheInfos);
} }
catch (Exception) catch (Exception)
{ {