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