public static void SendEmailExcuteService(SysConsumer sysConsumer) { using (SqlConnection connection = DBConnectionMgr.GetUserConnection()) { using (SqlTransaction transaction = connection.BeginTransaction()) { try { //如果消息记录状态显示已经消费,跳出函数 if (sysConsumer.Status == SysConsumerService.SysMQ_CostStatus_Consumed) { return; } //业务执行消费 SysUserWelfare userWelware = new SysUserWelfare() { UserID = sysConsumer.MsgCont, WelfareNum = 10 }; SysUserWelfareDbSvc dbSvc = new SysUserWelfareDbSvc(connection); dbSvc.Insert(userWelware, transaction); //修改数据库消费状态为已消费。 SysConsumerDbSvc consumberDbSvc = new SysConsumerDbSvc(connection); consumberDbSvc.UpdateStatus(sysConsumer.Id, SysConsumerService.SysMQ_CostStatus_Consumed, transaction); transaction.Commit(); } catch (Exception) { transaction.Rollback(); } } } }
public void Insert(SysConsumer info) { using (EnsureUserConnection()) { DbConnection.Execute(@"Insert SysConsumer(SysMsgID, MQMsgID, ConsumerID, Status, CreatedDate) values (@SysMsgID, @MQMsgID, @ConsumerID, @Status, @CreatedDate)", info); } }
public void Insert(SysConsumer info, SqlTransaction transaction) { using (EnsureUserConnection()) { DbConnection.Execute(@"Insert SysConsumer(SysMsgID, MQMsgID, Keys, MsgCont, ConsumerID, Status, CreatedDate) values (@SysMsgID, @MQMsgID, @Keys, @MsgCont, @ConsumerID, @Status, @CreatedDate)", info, transaction); } }
public void UpdateStatus(SysConsumer info, SqlTransaction transaction) { using (EnsureUserConnection()) { DbConnection.Execute(@"Update SysConsumer Set Status = @Status Where SysMsgID = @SysMsgID and ConsumerID = @ConsumerID", info, transaction); } }
public void Update(SysConsumer info) { using (EnsureUserConnection()) { DbConnection.Execute(@"Update SysConsumer Set SysMsgID = @SysMsgID, MQMsgID = @MQMsgID, ConsumerID = @ConsumerID, Status = @Status, CreatedDate = @CreatedDate Where Id = @Id", info); } }
public void PullMessage() { List <OnsConsumerResult> list = PullMessageFromAli(); while (list.Count > 0) { Dictionary <string, SysMessageQueue> sysMQDict = new SysMessageQueueDbSvc().ListByKeyList(list.Select(t => t.key).ToList()).ToDictionary(t => t.Keys); Dictionary <string, SysConsumer> sysConsumerDict = new SysConsumerDbSvc().ListByKeyList(ConsumerID, list.Select(t => t.key).ToList()).ToDictionary(t => t.Keys); foreach (var msg in list) { string msgKey = msg.key; //发送消息表,一定存在这条数据,如果不存在一定是非法添加消息 SysMessageQueue sysMQ; if (!sysMQDict.TryGetValue(msgKey, out sysMQ)) { continue;//非法消息 } SysConsumer consumer; //如果数据库记录已经消费,则执行消费阿里云 MQ 消费,删除消息。 if (sysConsumerDict.TryGetValue(msgKey, out consumer)) { DeleteMessage(msg.msgHandle); continue; } //客户消费消息,写入数据库记录 using (SqlConnection connection = DBConnectionMgr.GetUserConnection()) { using (SqlTransaction transaction = connection.BeginTransaction()) { try { consumer = new SysConsumer() { SysMsgID = sysMQ.Id, Keys = msgKey, MQMsgID = msg.msgId, MsgCont = sysMQ.MsgCont, ConsumerID = ConsumerID }; SysConsumerDbSvc dbSvc = new SysConsumerDbSvc(connection); dbSvc.Insert(consumer, transaction); transaction.Commit(); if (DeleteMessage(msg.msgHandle)) { Console.WriteLine(consumer.ConsumerID + sysMQ.MsgCont); } } catch (SqlException ex) { //如果数据库已经存在,抛出重复插入异常 if (ex.ErrorCode == ErrorCode_Duplicate) { DeleteMessage(msg.msgHandle); } } } } } //批处理,一次读取32 list = PullMessageFromAli(); } }