Exemplo 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");
                }
            }
        }
Exemplo n.º 2
0
        public PushCallbackResult Callback(PushMessageResult result)
        {
            CallbackInternal(result);
            PushCallbackResult response = new PushCallbackResult();

            response.Success = true;
            return(response);
        }
Exemplo n.º 3
0
        public PushCallbackResult Callback(PushMessageResult result)
        {
            RequestProfile.RequestType = "JinRi.Notify.SenderService.Callback";
            RequestProfile.RequestKey  = Guid.NewGuid().ToString();
            RequestProfile.MessageKey  = result.PushId;
            RequestProfile.Username    = "";

            return(DelegateHelper.Invoke <PushMessageResult, PushCallbackResult>(m_sendFacade.Callback, result, MetricsKeys.SenderService_Callback));
        }
Exemplo n.º 4
0
        public PushMessageResult Send(List <PushMessage> list)
        {
            Check.IsNull(list, "List<PushMessage>为空");
            list.ForEach(x => Send(x));

            PushMessageResult response = new PushMessageResult();

            response.Success = true;
            return(response);
        }
Exemplo n.º 5
0
        public void TestCallback()
        {
            SendFacade        sbus   = new SendFacade();
            PushMessageResult result = new PushMessageResult {
                PushId = "0907396caecb4ce9be68362b07276e64", PushStatus = PushResultEnum.Abort
            };

            result.ErrMsg = "测试:" + result.PushStatus.ToString();
            sbus.Callback(result);
        }
Exemplo n.º 6
0
        private void HttpRequestCompleted(object target, DataResponseEventArgs e)
        {
            PushEntity     entity     = e.PushEntity;
            HttpStatusCode statusCode = e.HttpStatusCode;
            string         data       = e.RecievedData; //Success,Failed,Pushing,Abort

            if (e.Exception == null)
            {
                Process.Info(entity.PushId, "消息推送记录", "HttpRequestCompleted", entity.PushId, string.Format("异步请求完成,返回结果:【{0}】", data), "");
                if (statusCode == HttpStatusCode.OK && entity.Callback != null)
                {
                    PushMessageResult result = new PushMessageResult();
                    result.ReferObject = entity.ReferObject;
                    result.PushId      = entity.PushId;
                    switch (data)
                    {
                    case "Success":
                        result.PushStatus = PushResultEnum.Success;
                        break;

                    case "Failed":
                        result.PushStatus = PushResultEnum.Failed;
                        break;

                    case "Pushing":
                        result.PushStatus = PushResultEnum.Pushing;
                        break;

                    case "Abort":
                        result.PushStatus = PushResultEnum.Abort;
                        break;

                    default:
                        Process.Warning(entity.PushId, "消息推送记录", "HttpRequestCompleted", entity.PushId, string.Format("此消息返回异常结果:{0}", data), "返回异常结果");
                        result.PushStatus = PushResultEnum.Abort;
                        break;
                    }

                    result.ErrMsg = data;
                    entity.Callback(result);
                }
            }
            else
            {
                Process.Error(entity.PushId, "消息推送记录", "HttpRequestCompleted", entity.PushId, string.Format("异步请求完成,返回结果:【{0}】,异常:{1}", data, e.Exception.GetString()), "");
                PushMessageResult result = new PushMessageResult();
                result.ReferObject = entity.ReferObject;
                result.PushId      = entity.PushId;
                result.PushStatus  = PushResultEnum.Failed;
                Callback(result);
            }
        }
Exemplo n.º 7
0
        public void Send(PushMessage message, Action <object> callback)
        {
            string cacheKey = string.Format(CacheKeys.SendToMessageHandler_Arg2, message.PushId, message.PushCount);

            if (!IsSending(message))
            {
                NotifyInterfaceSettingModel settingMod = _pushSettingBus.Get(message.SettingId);
                if (settingMod != null && settingMod.Status == 2)
                {
                    PushEntity entity = new PushEntity();
                    entity.TimeOut     = SendServiceSetting.SendToClientTimeout;
                    entity.PushId      = message.PushId;
                    entity.Url         = settingMod.Address;
                    entity.Data        = message.PushData;
                    entity.Callback    = callback;
                    entity.ReferObject = message;
                    entity.Encode      = Encoding.GetEncoding(settingMod.Encoding);

                    HttpAsyncHelper httpHelper = new HttpAsyncHelper(entity);
                    MethodType      methodType = (MethodType)Enum.Parse(typeof(MethodType), settingMod.Method);
                    httpHelper.OnRequestDataComplected += HttpRequestCompleted;
                    try
                    {
                        httpHelper.Request(methodType);
                        MetricsKeys.SenderService_Send.MeterMark("Success");
                        Process.Debug(message.PushId, "消息推送记录", "Send", message.PushId, string.Format("消息推送中,key【{0}】,地址:{1}", cacheKey, settingMod.Address), "");
                    }
                    catch (Exception ex)
                    {
                        MetricsKeys.SenderService_Send.MeterMark("Error");
                        PushMessageResult result = new PushMessageResult();
                        result.PushId     = message.PushId;
                        result.PushStatus = PushResultEnum.Failed;
                        Callback(result);
                        Process.Error(message.PushId, "消息推送记录", "Send", message.PushId, string.Format("消息推送中,key【{0}】,异常:{1}", cacheKey, ex.GetString()), "");
                    }
                }
                else
                {
                    PushMessageResult result = new PushMessageResult();
                    result.ReferObject = message;
                    result.PushId      = message.PushId;
                    result.PushStatus  = PushResultEnum.Abort;
                    result.ErrMsg      = "配置被删除";
                    Callback(result);
                }
            }
            else
            {
                Process.Debug(message.PushId, "消息推送记录", "Send", message.PushId, string.Format("缓存已存在,key【{0}】", cacheKey), "");
            }
        }
Exemplo n.º 8
0
        public PushMessageResult Send(PushMessage message)
        {
            Process.Debug(message.PushId, "消息发送中心", "Send", message.MessageId, string.Format("消息内容:{0}", JsonConvert.SerializeObject(message)), "");
            Check.IsNull(message, "PushMessage为空");
            bool isSendMessage = true;

            switch (message.MessagePriority)
            {
            case MessagePriorityEnum.High:
                if (_highPool != null)
                {
                    _highPool.Write(message);
                }
                else
                {
                    isSendMessage = false;
                }
                break;

            case MessagePriorityEnum.Middle:
                if (_middlePool != null)
                {
                    _middlePool.Write(message);
                }
                else
                {
                    isSendMessage = false;
                }
                break;

            case MessagePriorityEnum.Normal:
                if (_normalPool != null)
                {
                    _normalPool.Write(message);
                }
                else
                {
                    isSendMessage = false;
                }
                break;

            case MessagePriorityEnum.Low:
                if (_lowPool != null)
                {
                    _lowPool.Write(message);
                }
                else
                {
                    isSendMessage = false;
                }
                break;
            }
            if (!isSendMessage)
            {
                Send(message, Callback);
            }

            PushMessageResult response = new PushMessageResult();

            response.Success = true;
            return(response);
        }
Exemplo n.º 9
0
        private void CallbackInternal(PushMessageResult result)
        {
            Check.IsNull(result, "CallbackInternal的参数Obj");
            PushMessageModel model = new PushMessageModel();

            Check.IsNull(result.PushId, "PushMessageResult.PushId");
            PushMessage pushMsg = result.ReferObject as PushMessage;

            Check.IsNull(pushMsg, "PushId查找到的PushMessageModel对象");
            model.PushCount           = pushMsg.PushCount;
            model.SettingId           = pushMsg.SettingId;
            RequestProfile.RequestKey = result.PushId + "_" + pushMsg.PushCount.ToString();
            RequestProfile.MessageKey = result.PushId;

            switch (result.PushStatus)
            {
            case PushResultEnum.Abort:
                model.PushId     = result.PushId;
                model.PushStatus = PushStatusEnum.Abort;
                model.PushCount++;
                model.Memo = string.Format("Abort:{0},{1:yyyy-MM-dd HH:mm:ss};{2}", result.ErrMsg, DateTime.Now, Environment.NewLine);
                break;

            case PushResultEnum.Success:
                model.PushId     = result.PushId;
                model.PushStatus = PushStatusEnum.Pushed;
                model.PushCount++;
                model.Memo = string.Format("Success:{0},{1:yyyy-MM-dd HH:mm:ss};{2}", result.ErrMsg, DateTime.Now, Environment.NewLine);
                break;

            case PushResultEnum.Failed:
                model.PushId     = result.PushId;
                model.PushStatus = PushStatusEnum.Failed;
                bool isPushNext = false;
                //model.PushCount == 3
                //第四次推送的返回
                model.PushCount++;
                model.NextPushTime = ComputePushTimeBusiness.ComputeNextPushTime(model, out isPushNext);
                if (isPushNext)
                {
                    model.PushStatus = PushStatusEnum.UnPush;
                }
                model.Memo = string.Format("Failed:{0},B-{1:yyyy-MM-dd HH:mm:ss},N-{2:yyyy-MM-dd HH:mm:ss};{3}", result.ErrMsg, DateTime.Now, model.NextPushTime, Environment.NewLine);
                break;

            case PushResultEnum.Pushing:
                model.PushId     = result.PushId;
                model.PushStatus = PushStatusEnum.Pushing;
                model.Memo       = string.Format("Pushing:{0},{1:yyyy-MM-dd HH:mm:ss};{2}", result.ErrMsg, DateTime.Now, Environment.NewLine);
                break;

            default:
                break;
            }
            if (!string.IsNullOrWhiteSpace(model.PushId) &&
                (model.PushStatus &
                 (PushStatusEnum.Abort |
                  PushStatusEnum.Pushed |
                  PushStatusEnum.Failed |
                  PushStatusEnum.UnPush |
                  PushStatusEnum.Pushing)) == model.PushStatus)
            {
                model.LastModifyTime = DateTime.Now;
                bool ret = _pushMessageBus.Edit(model);
                if (!ret)
                {
                    lock (m_repeatUpdateTimesLockObj)
                    {
                        //进入补偿更新队列
                        m_repeatUpdateTimes[model.PushId] = 1;
                    }
                    _repeatUpdatePool.Write(model);
                }
                else
                {
                    if (model.PushStatus == PushStatusEnum.UnPush)
                    {
                        string cacheKey = string.Format(CacheKeys.SendToMessageHandler_Arg2, model.PushId, model.PushCount - 1);
                        DistributedCache.Delete(cacheKey);
                    }
                }
                Process.Debug(result.PushId, "消息推送记录", "Callback", result.PushId, string.Format("推送状态:【{0}】,推送结果:【{1}】,更新结果:【{2}】", result.PushStatus.ToString(), result.ErrMsg, ret), "");
            }
        }
Exemplo n.º 10
0
        public void Callback(object obj)
        {
            PushMessageResult result = obj as PushMessageResult;

            CallbackInternal(result);
        }
Exemplo n.º 11
0
 public PushCallbackResult Callback(PushMessageResult result)
 {
     return(_sendPushMessageBus.Callback(result));
 }