コード例 #1
0
        /// <summary>
        /// 订阅
        /// </summary>
        /// <param name="info"></param>
        /// <param name="sessionId"></param>
        public void Subscribe(SubscribeInformaction info, string sessionId)
        {
            var subscribe = Server.MessageStore.GetSubscribe(info.SubscribeId, info.Topic);
            var record    = new MessageSubscribeRecord()
            {
                CurrentSessionId = sessionId, SubscribeInformaction = info
            };

            if (subscribe == null)
            {
                //先查询是否存在同主题订阅,不存在则向消息队列订阅
                if (!Server.MessageStore.HasTopicSubscribe(info.Topic))
                {
                    Server.MessageQueue.Subscribe(info);
                }
                Server.MessageStore.SaveSubscribe(record);
            }
            else
            {
                Server.MessageStore.UpdateSubscribe(record);
            }
            //异步处理失败推送重试
            Task.Factory.StartNew((o) =>
            {
                var subscribeRecord = (MessageSubscribeRecord)o;
                RetryFailedSubscription(subscribeRecord.SubscribeInformaction, subscribeRecord.CurrentSessionId);
            }, record);
        }
コード例 #2
0
        public void UpdateSubscribe(MessageSubscribeRecord record)
        {
            var db   = Connection.GetDatabase();
            var json = JsonConvert.SerializeObject(record);

            db.HashSet(record.SubscribeInformaction.Topic, record.SubscribeInformaction.SubscribeId, json);

            if (MessageSubscribeRecords.ContainsKey(record.SubscribeInformaction.Topic))
            {
                var subscribe = MessageSubscribeRecords[record.SubscribeInformaction.Topic].FirstOrDefault(o => o.SubscribeInformaction.SubscribeId == record.SubscribeInformaction.SubscribeId);
                subscribe.CurrentSessionId = record.CurrentSessionId;
            }
        }
コード例 #3
0
        public void SaveSubscribe(MessageSubscribeRecord record)
        {
            var db   = Connection.GetDatabase();
            var json = JsonConvert.SerializeObject(record);

            db.ListRightPush("MessageSubscribeRecord", record.SubscribeInformaction.Topic);
            db.HashSet(record.SubscribeInformaction.Topic, record.SubscribeInformaction.SubscribeId, json);
            if (!MessageSubscribeRecords.ContainsKey(record.SubscribeInformaction.Topic))
            {
                MessageSubscribeRecords[record.SubscribeInformaction.Topic] = new List <MessageSubscribeRecord>();
            }
            MessageSubscribeRecords[record.SubscribeInformaction.Topic].Add(record);
        }