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"); } } }
public PushCallbackResult Callback(PushMessageResult result) { CallbackInternal(result); PushCallbackResult response = new PushCallbackResult(); response.Success = true; return(response); }
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)); }
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); }
public void TestCallback() { SendFacade sbus = new SendFacade(); PushMessageResult result = new PushMessageResult { PushId = "0907396caecb4ce9be68362b07276e64", PushStatus = PushResultEnum.Abort }; result.ErrMsg = "测试:" + result.PushStatus.ToString(); sbus.Callback(result); }
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); } }
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), ""); } }
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); }
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), ""); } }
public void Callback(object obj) { PushMessageResult result = obj as PushMessageResult; CallbackInternal(result); }
public PushCallbackResult Callback(PushMessageResult result) { return(_sendPushMessageBus.Callback(result)); }