Ejemplo n.º 1
0
        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");
                }
            }
        }
Ejemplo n.º 2
0
        private void BatchSaveNotifyMessage(object dataBuffer)
        {
            IDataBuffer buffer = dataBuffer as IDataBuffer;

            if (buffer != null && buffer.Count > 0)
            {
                DirectSaveNotifyMessage(buffer.GetList <NotifyMessage>());
            }
        }
Ejemplo n.º 3
0
        private void BatchSavePushMessage(object dataBuffer)
        {
            IDataBuffer buffer = dataBuffer as IDataBuffer;

            if (buffer != null && buffer.Count > 0)
            {
                DirectSavePushMessage(buffer.GetList <PushMessageModel>());
            }
        }
Ejemplo n.º 4
0
        /// <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);
            }
        }
Ejemplo n.º 6
0
        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);
                }
            }
        }
Ejemplo n.º 7
0
        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);
                }
            }
        }
Ejemplo n.º 8
0
        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);
                }
            }
        }
Ejemplo n.º 9
0
        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);
                }
            }
        }
Ejemplo n.º 10
0
        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);
                }
            }
        }
Ejemplo n.º 11
0
        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);
                }
            }
        }
Ejemplo n.º 12
0
        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);
            }
        }
Ejemplo n.º 13
0
        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>());
            }
        }
Ejemplo n.º 14
0
        //分布式批量提交数据到远程
        /// <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);
        }