private void BatchSendMessage(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { List <PushMessage> list = buffer.GetList <PushMessage>(); try { Process.Info("消息通知批量发送接口", "BatchSendMessage", "", string.Format("批次【{0}】,数量【{1}】", ++callCount, list.Count), ""); JinRi.Notify.ServiceAgent.SenderSendServiceSOA.SendServiceClient client = new JinRi.Notify.ServiceAgent.SenderSendServiceSOA.SendServiceClient(); PushMessageResult result = client.ReceiveList(list.ToArray()); Process.Info("消息通知批量发送接口_返回", "BatchSendMessage", "", result.Success + "", ""); } catch (Exception ex) { //如果推送异常,去掉标示的推送缓存 foreach (PushMessage message in list) { string cacheKey = string.Format(CacheKeys.PushMessageToSender_Arg2, message.PushId, message.PushCount); DistributedCache.Delete(cacheKey); } Process.Error("消息通知批量发送接口", "BatchSendMessage", "", "异步发送推送消息到消息通知接口出现异常:" + ex.GetString(), "Error"); } } }
private void BatchSaveNotifyMessage(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { DirectSaveNotifyMessage(buffer.GetList <NotifyMessage>()); } }
private void BatchSavePushMessage(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { DirectSavePushMessage(buffer.GetList <PushMessageModel>()); } }
/// <summary> /// pool事件处理程序 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnSendRequest(object sender, LogMessageEventArgs e) { IDataBuffer <object> buffer = e.Message as IDataBuffer <object>; if (buffer != null && buffer.Count > 0) { List <DataTable> list = buffer.GetList().Cast <DataTable>().ToList(); RepeatBatchSaveLog(list, list[0].TableName.StartsWith("HandleLog")); } }
/// <summary> /// 批量生产消息,发消息队列 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnWrite(object sender, LogMessageEventArgs e) { IDataBuffer <object> data = e.Message as IDataBuffer <object>; if (data != null) { var list = data.GetList().Cast <DataObj>().ToList(); ServerInfo server = RabbitMQConfig.ServerInfoList[3]; EasyNetQHelper.SendAsync(server.Code, list); } }
private void RepeatBatchSaveLog(object dataBuffer, bool isHandle) { string errMsg = ""; IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { List <DataTable> list = buffer.GetList <DataTable>(); foreach (DataTable table in list) { string key = table.TableName; int count = m_repeatBatchSaveTimes[key]; bool ret = InsertInternal(table, isHandle, out errMsg) > 0; if (!ret) { if (count < 5) { m_repeatBatchSaveTimes[key] = count + 1; if (isHandle) { _repeatBatchSaveHandlePool.Write(table); } else { _repeatBatchSaveProcessPool.Write(table); } } else { lock (m_repeatBatchSaveTimesLockObj) { m_repeatBatchSaveTimes.Remove(key); } Logger.Info(string.Format("日志补偿保存,表名:【{0}】,更新次数:【{1}】,更新结果:失败-超过补偿次数,影响数据条数:【{2}】", key, count + 1, table.Rows.Count)); } Logger.Info(string.Format("日志补偿保存,表名:【{0}】,更新次数:【{1}】,更新结果:【{2}】", key, count + 1, ret)); } else { lock (m_repeatBatchSaveTimesLockObj) { m_repeatBatchSaveTimes.Remove(key); } #if APPSERVER DeleteBackFile(table.TableName, isHandle); #endif } Thread.Sleep(100); } } }
private void BuildBufferMessage(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { List <NotifyMessage> list = buffer.GetList <NotifyMessage>(); foreach (NotifyMessage message in list) { Build(message); } } }
private void SendBatch(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { Process.Debug("批量发送推送消息", "SendBatch", string.Format("数量【{0}】", buffer.Count), ""); List <PushMessage> list = buffer.GetList <PushMessage>(); foreach (PushMessage message in list) { Send(message, Callback); } } }
private void RepeatSaveMessage(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { List <object> list = buffer.GetList <object>(); foreach (object obj in list) { bool ret = false; string key = ""; if (obj is NotifyMessage) { key = ((NotifyMessage)obj).MessageId; ret = _notifyMessageBus.Save((NotifyMessage)obj); } else if (obj is PushMessageModel) { key = ((PushMessageModel)obj).PushId; ret = _pushMessageBus.Save((PushMessageModel)obj); } int count = m_repeatSaveTimes[key]; if (!ret) { if (count <= 5) { m_repeatSaveTimes[key] = count + 1; _repeatSavePool.Write(obj); } else { lock (m_repeatSaveTimesLockObj) { m_repeatSaveTimes.Remove(key); } } } else { lock (m_repeatSaveTimesLockObj) { m_repeatSaveTimes.Remove(key); } } Process.Debug(key, "消息补偿保存记录", "RepeatSaveMessage", key, string.Format("保存次数:【{0}】,更新结果:【{1}】", count + 1, ret), ""); Thread.Sleep(100); } } }
private void RepeatUpdatePushMessage(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { List <PushMessageModel> list = buffer.GetList <PushMessageModel>(); foreach (PushMessageModel message in list) { int count = m_repeatUpdateTimes[message.PushId]; bool ret = _pushMessageBus.Edit(message); if (!ret) { if (count < 5) { m_repeatUpdateTimes[message.PushId] = count + 1; _repeatUpdatePool.Write(message); } else { //如果是待推送状态,怎去掉缓存,以便进行下一次推送 if (message.PushStatus == PushStatusEnum.UnPush) { string cacheKey = string.Format(CacheKeys.SendToMessageHandler_Arg2, message.PushId, message.PushCount - 1); DistributedCache.Delete(cacheKey); } lock (m_repeatUpdateTimesLockObj) { m_repeatUpdateTimes.Remove(message.PushId); } } } else { lock (m_repeatUpdateTimesLockObj) { m_repeatUpdateTimes.Remove(message.PushId); } } Process.Debug(message.PushId, "消息补偿更新推送记录", "RepeatUpdatePushMessage", message.PushId, string.Format("更新次数:【{0}】,更新结果:【{1}】", count + 1, ret), ""); Thread.Sleep(100); } } }
private void RepeatNotifyOrder(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { List <NotifyMessage> list = buffer.GetList <NotifyMessage>(); foreach (NotifyMessage message in list) { int count = m_repeatNotifyTimes[message.MessageKey]; string errMsg = ""; bool ret = SendOrder(message, out errMsg); if (!ret) { if (count < 5) { m_repeatNotifyTimes[message.MessageKey] = count + 1; _repeatNotifyPool.Write(message); } else { lock (m_repeatNotifyTimesLockObj) { m_repeatNotifyTimes.Remove(message.MessageKey); } } } else { lock (m_repeatNotifyTimesLockObj) { m_repeatNotifyTimes.Remove(message.MessageKey); } } Thread.Sleep(100); } } }
private static async void OnSendRequest(object sender, LogMessageEventArgs e) { IDataBuffer <object> buffer = e.Message as IDataBuffer <object>; if (buffer == null) { return; } var list = buffer.GetList().Cast <LogMessage>().ToList(); if (!list.Any()) { return; } bool isHandle = list[0].IsHandle; try { ServerInfo server = RabbitMQConfig.ServerInfoList[s_PublihServerIndex]; var flag = await EasyNetQHelper.SendAsync(server.Code, list); if (flag > 0) { //插入本地数据库 InsertLog(list); string content = string.Format("本次批量插入{0}条数据,Task响应:{1},IsHandle:{2}", list.Count, flag, isHandle); RecordLogCenterState("分布式日志1.0", content, isHandle, false); } } catch (Exception ex) { m_localLog.Error(ex); string content = string.Format("批量插入数据异常,原因:{0},IsHandle:{1}", ex.ToString(), isHandle); RecordLogCenterState("分布式日志1.0", content, isHandle, false); } }
private void BatchLowPublisher(object dataBuffer) { IDataBuffer buffer = dataBuffer as IDataBuffer; if (buffer != null && buffer.Count > 0) { Process.Debug("批量发布消息到队列", "BatchLowPublisher", string.Format("条数:【{0}】", buffer.Count), ""); m_rabbitMQBus.Publisher(m_rabbitBusDic[MessagePriorityEnum.Low], MessagePriorityEnum.Low, buffer.GetList <NotifyMessage>()); } }
//分布式批量提交数据到远程 /// <summary> /// 分布式批量提交数据到远程 /// </summary> /// <param name="obj"></param> /// <param name="isHandle"></param> private static void BatchSendRequest(object obj, bool isHandle) { //获取日志实体列表 IDataBuffer buffer = obj as IDataBuffer; if (buffer == null) { return; } List <LogMessage> logMessageList = buffer.GetList <LogMessage>(); if (logMessageList == null) { return; } if (m_openLogCenter) { #if THRIFT try { SyncLogServerEvent.WaitOne(); SendRequestToNewLogCenter(logMessageList); if (logMessageList.Count > 1 && DateTime.Now > lastExecuteLogTime.AddMinutes(5)) { lastExecuteLogTime = DateTime.Now; string content = string.Format("本次批量插入{0}条数据,结果:{1},IsHandle:{2}", logMessageList.Count, "Success", isHandle); RecordLogCenterState("分布式日志2.0", content, isHandle, true); } AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Success.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.V2.ToString()) }); return; } catch (Exception ex) { AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Failed.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.V2.ToString()) }); m_localLog.Error(ex); string content = string.Format("批量插入数据异常,原因:{0},IsHandle:{1}", ex.ToString(), isHandle); RecordLogCenterState("分布式日志2.0", content, isHandle, false); } #endif } else { try { LogMessageTaskInfo taskInfo = new LogMessageTaskInfo { CurrLogMessageObj = logMessageList, TaskCreateTime = DateTime.Now, TaskName = "LogMessage", EmitServerCode = m_localServerCode }; //发送日志实体列表到远程消息队列 ITaskInfo retTask = m_request.SendRequest(m_logToServer, taskInfo); if (logMessageList.Count > 1 && DateTime.Now > lastExecuteLogTime.AddMinutes(5)) { lastExecuteLogTime = DateTime.Now; string content = string.Format("本次批量插入{0}条数据,结果:{1},IsHandle:{2}", logMessageList.Count, retTask.TaskStatus, isHandle); RecordLogCenterState("分布式日志1.0", content, isHandle, retTask.TaskStatus == TaskStatus.Success); } if (retTask.TaskStatus == TaskStatus.Success) { #if THRIFT AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Success.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.V1.ToString()) }); #endif return; } } catch (Exception ex) { #if THRIFT AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Failed.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.V1.ToString()) }); #endif m_localLog.Error(ex); string content = string.Format("批量插入数据异常,原因:{0},IsHandle:{1}", ex.ToString(), isHandle); RecordLogCenterState("分布式日志1.0", content, isHandle, false); } } int insertResult = LogMessageDAL.GetInstance().Insert(buffer.GetEnumerator(), isHandle); #if THRIFT if (insertResult > 0) { AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Success.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.Local.ToString()) }); } else { AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Failed.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.Local.ToString()) }); } #endif RecordLogCenterState("本地批量保存日志", string.Format("本地批量插入{0}条数据, IsHandler: {1}", logMessageList.Count, isHandle), isHandle, false); }