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 void SendPushMessage(PushMessage message, bool isWriteToBuffer, out bool isSended) { isSended = IsSending(message); if (!isSended) { if (isWriteToBuffer) { _sendMessagePool.Write(message); } else { while (m_sendMessageCDE.CurrentCount > 1000) { Process.Info(message.PushId, "消息通知单条发送接口", "SendPushMessage", "", "m_sendMessageCDE:" + m_sendMessageCDE.CurrentCount.ToString(), "阻塞"); Thread.Sleep(100); } ThreadPool.QueueUserWorkItem((o) => { try { Process.Info(message.PushId, "消息通知单条发送接口", "SendPushMessage", "", string.Format("批次【{0}】,数量【{1}】", ++callCount, 1), ""); m_sendMessageCDE.TryAddCount(1); m_client.Receive(message); if (m_sendMessageCDE.CurrentCount > 0) { m_sendMessageCDE.TryAddCount(-1); } Process.Info(message.PushId, "消息通知单条发送接口_返回", "SendPushMessage", "", string.Format("批次【{0}】,数量【{1}】", ++callCount, 1), ""); } catch (Exception ex) { if (m_sendMessageCDE.CurrentCount > 0) { m_sendMessageCDE.TryAddCount(-1); } if (m_client.State == CommunicationState.Closed || m_client.State == CommunicationState.Faulted) { m_client = new ServiceAgent.SenderSendServiceSOA.SendServiceClient(); } //如果推送异常,去掉标示的推送缓存 string cacheKey = string.Format(CacheKeys.PushMessageToSender_Arg2, message.PushId, message.PushCount); DistributedCache.Delete(cacheKey); Process.Error(message.PushId, "消息通知单条发送接口", "SendPushMessage", "", "异步发送推送消息到消息通知接口出现异常:" + ex.GetString(), "Error"); } }); } } }