修改BUG:使用线程安全的堆栈队列,排队消息,防止漏掉消息不推送
This commit is contained in:
parent
42c1c0db29
commit
40ad692272
|
@ -23,7 +23,7 @@ namespace Bootstrap.Admin
|
||||||
if (publisherElement.Mode == PublisherMode.Off) return;
|
if (publisherElement.Mode == PublisherMode.Off) return;
|
||||||
ExceptionHelper.Log(ex, additionalInfo);
|
ExceptionHelper.Log(ex, additionalInfo);
|
||||||
CacheManager.Clear(k => k == ExceptionHelper.RetrieveExceptionsDataKey);
|
CacheManager.Clear(k => k == ExceptionHelper.RetrieveExceptionsDataKey);
|
||||||
NotificationHelper.PushMessage(new MessageBody() { Category = "Notification", Message = ex.Message });
|
NotificationHelper.MessagePool.Enqueue(new MessageBody() { Category = "Notification", Message = ex.Message });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -43,15 +43,18 @@ namespace Bootstrap.Admin.Controllers
|
||||||
WebSocket socket = arg.WebSocket;
|
WebSocket socket = arg.WebSocket;
|
||||||
while (socket.State == WebSocketState.Open)
|
while (socket.State == WebSocketState.Open)
|
||||||
{
|
{
|
||||||
if (!NotificationHelper.Push)
|
if (NotificationHelper.MessagePool.IsEmpty)
|
||||||
{
|
{
|
||||||
await System.Threading.Tasks.Task.Delay(300);
|
await System.Threading.Tasks.Task.Delay(300);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
|
var msg = new MessageBody();
|
||||||
buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(NotificationHelper.Message.ToString()));
|
if (NotificationHelper.MessagePool.TryDequeue(out msg))
|
||||||
await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
|
{
|
||||||
NotificationHelper.Push = false;
|
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
|
||||||
|
buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(msg.ToString()));
|
||||||
|
await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
using Longbow.Caching;
|
using Longbow.Caching;
|
||||||
using Longbow.ExceptionManagement;
|
using Longbow.ExceptionManagement;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
@ -14,8 +15,15 @@ namespace Bootstrap.DataAccess
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class NotificationHelper
|
public static class NotificationHelper
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
internal const string RetrieveNotificationsDataKey = "NotificationHelper-RetrieveNotifications";
|
internal const string RetrieveNotificationsDataKey = "NotificationHelper-RetrieveNotifications";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public static readonly ConcurrentQueue<MessageBody> MessagePool = new ConcurrentQueue<MessageBody>();
|
||||||
|
/// <summary>
|
||||||
/// 新用户注册的通知的面板显示
|
/// 新用户注册的通知的面板显示
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
@ -112,22 +120,6 @@ namespace Bootstrap.DataAccess
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// 推送的消息
|
|
||||||
/// </summary>
|
|
||||||
public static MessageBody Message { get; private set; }
|
|
||||||
/// <summary>
|
|
||||||
/// 获得/设置 是否推送消息
|
|
||||||
/// </summary>
|
|
||||||
public static bool Push { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public static void PushMessage(MessageBody message)
|
|
||||||
{
|
|
||||||
Push = true;
|
|
||||||
Message = message;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
|
|
|
@ -145,7 +145,7 @@ namespace Bootstrap.DataAccess
|
||||||
}
|
}
|
||||||
CacheCleanUtility.ClearCache(userIds: p.Id == 0 ? string.Empty : p.Id.ToString());
|
CacheCleanUtility.ClearCache(userIds: p.Id == 0 ? string.Empty : p.Id.ToString());
|
||||||
ret = true;
|
ret = true;
|
||||||
if (p.UserStatus == 1) NotificationHelper.PushMessage(new MessageBody() { Category = "Users", Message = string.Format("{0}-{1}", p.UserName, p.Description) });
|
if (p.UserStatus == 1) NotificationHelper.MessagePool.Enqueue(new MessageBody() { Category = "Users", Message = string.Format("{0}-{1}", p.UserName, p.Description) });
|
||||||
}
|
}
|
||||||
catch (DbException ex)
|
catch (DbException ex)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue