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
        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");
                        }
                    });
                }
            }
        }