Beispiel #1
0
        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();
                    }
                }
            }
        }
Beispiel #2
0
        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();
            }
        }