コード例 #1
0
        public async Task <IActionResult> List()
        {
            var messages = await _mongoDbContext.Collection <Message>().Find(new BsonDocument())
                           .Sort(Builders <Message> .Sort.Descending(n => n.Timestamp))
                           .ToListAsync();

            return(Ok(messages));
        }
コード例 #2
0
 /// <summary>
 /// 删除群组相关缓存信息
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="groupId"></param>
 public static void RemoveGroupCache <T>(this int groupId) where T : GroupCacheData
 {
     using (MongoDbContext mc = new MongoDbContext(Const.GroupsMongoDbConn))
     {
         Func <T, bool> func = g => g.GroupId == groupId;
         if (mc.Collection <T>().Count(func) > 0)
         {
             mc.Collection <T>().Remove(func);
         }
     }
 }
コード例 #3
0
 /// <summary>
 /// 从存储中读取渠道信息
 /// </summary>
 /// <returns></returns>
 private static IEnumerable <ChannelCodeKeyPair> GetChannelsFromStorage()
 {
     using (MongoDbContext mc = new MongoDbContext(Const.ConfigsMongoDbConn))
     {
         if (mc.Collection <ChannelCodeKeyPair>().Count() > 0)
         {
             return(mc.Collection <ChannelCodeKeyPair>().Linq().ToList());
         }
         return(null);
     }
 }
コード例 #4
0
 /// <summary>
 /// 从存储中读取用户系统初始相关配置信息
 /// </summary>
 /// <returns></returns>
 public static UserConfig GetUserConfigFromStorage()
 {
     using (MongoDbContext mc = new MongoDbContext(Const.MongoDbConn))
     {
         if (mc.Collection <UserConfig>().Count() > 0)
         {
             return(mc.Collection <UserConfig>().Linq().First());
         }
     }
     return(null);
 }
コード例 #5
0
 /// <summary>
 /// 从存储中读取指定的群组信息
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="groupId"></param>
 /// <returns></returns>
 public static T GetGroupCacheFromStorage <T>(this int groupId) where T : GroupCacheData
 {
     using (MongoDbContext mc = new MongoDbContext(Const.GroupsMongoDbConn))
     {
         Func <T, bool> func = g => g.GroupId == groupId;
         if (mc.Collection <T>().Count(func) > 0)
         {
             return(mc.Collection <T>().FindOne(func));
         }
         return(null);
     }
 }
コード例 #6
0
 /// <summary>
 /// 从存储中读取用户缓存信息
 /// </summary>
 /// <param name="userId">待读取的目标用户编号</param>
 /// <returns></returns>
 public static UserCacheData GetUserCacheFromStorage(this int userId)
 {
     using (MongoDbContext mc = new MongoDbContext(Const.UsersMongoDbConn))
     {
         Func <UserCacheData, bool> func = u => u.UserId == userId;
         if (mc.Collection <UserCacheData>().Count(func) > 0)
         {
             return(mc.Collection <UserCacheData>().FindOne(func));
         }
         return(null);
     }
 }
コード例 #7
0
        public async Task <IActionResult> List(string keyword)
        {
            var query = _mongoDbContext.Collection <Script, string>().AsQueryable();

            if (!string.IsNullOrWhiteSpace(keyword))
            {
                query = query.Where(n => n.Id.Contains(keyword) || n.Description.Contains(keyword));
            }

            var scripts = await query.ToListAsync();

            return(Ok(scripts));
        }
コード例 #8
0
        /// <summary>
        /// 存储渠道信息
        /// </summary>
        /// <param name="channels"></param>
        public static void ChannelsStorage(this IEnumerable <ChannelCodeKeyPair> channels)
        {
            using (MongoDbContext mc = new MongoDbContext(Const.ConfigsMongoDbConn))
            {
                if (mc.Collection <ChannelCodeKeyPair>().Count() > 0)
                {
                    mc.Collection <ChannelCodeKeyPair>().Remove(new Document());
                }

                foreach (var item in channels)
                {
                    mc.Collection <ChannelCodeKeyPair>().Insert(item);
                }
            }
        }
コード例 #9
0
 /// <summary>
 /// 群组相关信息写入存储
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="cacheData"></param>
 public static void GroupCacheStorage <T>(this T cacheData) where T : GroupCacheData
 {
     using (MongoDbContext mc = new MongoDbContext(Const.GroupsMongoDbConn))
     {
         Func <T, bool> func = g => g.GroupId == cacheData.GroupId;
         if (mc.Collection <T>().Count(func) > 0)
         {
             mc.Collection <T>().Update(cacheData, func);
         }
         else
         {
             mc.Collection <T>().Insert(cacheData);
         }
     }
 }
コード例 #10
0
 /// <summary>
 /// 将用户缓存信息写入存储
 /// </summary>
 /// <param name="cacheData">用户缓存信息数据</param>
 public static void UserCacheStorage(this UserCacheData cacheData)
 {
     using (MongoDbContext mc = new MongoDbContext(Const.UsersMongoDbConn))
     {
         Func <UserCacheData, bool> func = u => u.UserId == cacheData.UserId;
         if (mc.Collection <UserCacheData>().Count(func) > 0)
         {
             mc.Collection <UserCacheData>().Update(cacheData, func);
         }
         else
         {
             mc.Collection <UserCacheData>().Insert(cacheData);
         }
     }
 }
コード例 #11
0
 /// <summary>
 /// 将关键词列表写入存储
 /// </summary>
 /// <param name="filterWords"></param>
 public static void SensitiveWordsStorage(this FilterWords filterWords)
 {
     using (MongoDbContext mc = new MongoDbContext(Const.ConfigsMongoDbConn))
     {
         FilterWords orgWords = mc.Collection <FilterWords>().Linq().FirstOrDefault();
         if (null == orgWords)
         {
             mc.Collection <FilterWords>().Insert(filterWords);
         }
         else
         {
             mc.Collection <FilterWords>().Update(filterWords, orgWords);
         }
     }
 }
コード例 #12
0
 /// <summary>
 /// 用户系统初始相关配置信息写入存储
 /// </summary>
 /// <param name="config"></param>
 public static void UserConfigStorage(this UserConfig config)
 {
     using (MongoDbContext mc = new MongoDbContext(Const.MongoDbConn))
     {
         if (mc.Collection <UserConfig>().Count() > 0)
         {
             UserConfig orgConfig = mc.Collection <UserConfig>().Linq().First();
             mc.Collection <UserConfig>().Update(config, orgConfig);
         }
         else
         {
             mc.Collection <UserConfig>().Insert(config);
         }
     }
 }
コード例 #13
0
        public void GetQueriesTest()
        {
            var mongoDbContext    = new MongoDbContext("192.168.56.101", 27017, "myApplicationDb");
            var productCollection = mongoDbContext.Collection <Product>("myProductsCollection");

            var allproducts = productCollection.Find(x => x.ProductId > 0).ToList();
        }
コード例 #14
0
 /// <summary>
 /// 从存储中读取关键词列表
 /// </summary>
 /// <returns></returns>
 private static FilterWords GetSensitiveWordsFromStorage()
 {
     using (MongoDbContext mc = new MongoDbContext(Const.ConfigsMongoDbConn))
     {
         return(mc.Collection <FilterWords>().Linq().FirstOrDefault());
     }
 }
コード例 #15
0
        public System.Threading.Tasks.Task StartAsync(CancellationToken cancellationToken)
        {
            var exchange = "Task";
            var queue    = "Task";

            _channel.ExchangeDeclare(exchange, "direct", true);
            _channel.QueueDeclare(queue, true, false, false);
            _channel.QueueBind(queue, exchange, queue);

            var consumer = new EventingBasicConsumer(_channel);

            consumer.Received += (model, ea) =>
            {
                var index    = (int)ea.BasicProperties.Headers["index"];
                var id       = (ea.BasicProperties.Headers["id"] as byte[]).BytesToString();
                var timeFlag = (ea.BasicProperties.Headers["sendtime"] as byte[]).BytesToString();
                _channel.QueueDelete($"PendingTask|Task:{id}_{index}_{timeFlag}", false, true);

                var taskId = new ObjectId(id);
                var task   = _mongoDbContext.Collection <Task>().Find(n => n.Id == taskId).SingleOrDefault();
                if (task == null || task.Status != TaskStatus.Normal)
                {
                    _channel.BasicAck(ea.DeliveryTag, false);
                    return;
                }

                _logger.LogInformation($"[{DateTime.UtcNow}]执行任务...");

                task.SubTasks[index].IsSent = true;

                if (task.SubTasks.Count > index + 1)
                {
                    PublishPendingMsg(_channel, task, index + 1);
                }
                else
                {
                    task.Status = TaskStatus.Finished;
                }

                _mongoDbContext.Collection <Task>().ReplaceOne(n => n.Id == taskId, task);
                _channel.BasicAck(ea.DeliveryTag, false);
            };
            _channel.BasicConsume(queue, false, consumer);
            _logger.LogInformation("任务执行服务已启动...");
            return(System.Threading.Tasks.Task.CompletedTask);
        }
コード例 #16
0
        public void CollectionTest()
        {
            var mongoDbContext    = new MongoDbContext("192.168.56.101", 27017, "myApplicationDb");
            var productCollection = mongoDbContext.Collection <Product>("myProductsCollection");
            var product           = new Product();

            //product.DocumentId = ObjectId.GenerateNewId();
            product.ProductId     = 2;
            product.Sku           = "hajk-34";
            product.ThirdPartyIds = new List <ThirdPartyId>()
            {
                new ThirdPartyId()
                {
                    Value    = "3fda45r",
                    Type     = "ASIN",
                    Platform = "Amazon"
                }
            };

            productCollection.InsertOne(product);
            var productRetrieved = productCollection.Find(x => x.ProductId == product.ProductId).FirstOrDefault();

            Assert.IsNotNull(productRetrieved);
            Assert.IsNotNull(productRetrieved.DocumentId);
            Assert.AreEqual(product.ProductId, productRetrieved.ProductId);

            var googleProdFilterCondition = Builders <Product> .Filter.ElemMatch(x => x.ThirdPartyIds,
                                                                                 t => t.Platform == "Google");

            var googleProducts = productCollection.Find(googleProdFilterCondition).ToList();

            Assert.IsNotNull(googleProducts);
            var gp = googleProducts.Where(x => x.ThirdPartyIds.Exists(s => s.Platform == "Google"));

            Assert.IsNotNull(gp);
        }
コード例 #17
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _channel.BasicQos(0, 1, false);

            _channel.ExchangeDeclare("Exchange", "direct");

            _channel.QueueDeclare("QueueAudit", true, false, false);
            _channel.QueueBind("QueueAudit", "Exchange", "RouteA");
            _channel.QueueBind("QueueAudit", "Exchange", "RouteB");

            var consumer = new EventingBasicConsumer(_channel);

            consumer.Received += (model, ea) =>
            {
                var isOk = true;
                try
                {
                    if (ea.BasicProperties.Headers == null || !ea.BasicProperties.Headers.ContainsKey("x-death"))
                    {
                        var message = new Message
                        {
                            MessageId = ea.BasicProperties.MessageId,
                            Body      = ea.Body,
                            Exchange  = ea.Exchange,
                            Route     = ea.RoutingKey
                        };

                        if (ea.BasicProperties.Headers != null)
                        {
                            var headers = new Dictionary <string, object>();

                            foreach (var header in ea.BasicProperties.Headers)
                            {
                                if (header.Value is byte[] bytes)
                                {
                                    headers[header.Key] = Encoding.UTF8.GetString(bytes);
                                }
                                else
                                {
                                    headers[header.Key] = header.Value;
                                }
                            }

                            message.Headers = headers;
                        }


                        if (ea.BasicProperties.Timestamp.UnixTime > 0)
                        {
                            message.TimestampUnix = ea.BasicProperties.Timestamp.UnixTime;
                            var offset = DateTimeOffset.FromUnixTimeMilliseconds(ea.BasicProperties.Timestamp.UnixTime);
                            message.Timestamp = offset.UtcDateTime;
                        }

                        _mongoDbContext.Collection <Message>().InsertOne(message, cancellationToken: cancellationToken);
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogCritical(ex, "Error!");
                    isOk = false;
                }

                try
                {
                    if (isOk)
                    {
                        _channel.BasicAck(ea.DeliveryTag, false);
                    }
                    else
                    {
                        _channel.BasicNack(ea.DeliveryTag, false, true);
                    }
                }
                catch (AlreadyClosedException ex)
                {
                    _logger.LogCritical(ex, "RabbitMQ is closed!");
                }
            };

            _channel.BasicConsume("QueueAudit", false, consumer);

            _logger.LogInformation("Audit service started...");
            return(Task.CompletedTask);
        }
コード例 #18
0
        public async Task <IActionResult> Create([FromBody] TaskCreateForm form)
        {
            var task = new Task
            {
                Name      = form.Name,
                StartTime = form.StartTime,
                EndTime   = form.EndTime,
                Interval  = form.Interval,
                SubTasks  = new List <SubTask>()
            };

            var startTime = task.StartTime;
            var endTime   = task.EndTime;

            while ((endTime - startTime).TotalMinutes >= 0)
            {
                var sendTime = startTime;
                if (sendTime <= endTime && sendTime > DateTime.UtcNow)
                {
                    task.SubTasks.Add(new SubTask {
                        Id = ObjectId.GenerateNewId(), SendTime = sendTime
                    });
                }

                startTime = startTime.AddMinutes(task.Interval);
            }

            await _mongoDbContext.Collection <Task>().InsertOneAsync(task);

            var timeFlag = task.SubTasks[0].SendTime.ToString("yyyy-MM-dd HH:mm:ssZ");
            var exchange = "Task";
            var queue    = "Task";

            var index           = 0;
            var pendingExchange = "PendingTask";
            var pendingQueue    = $"PendingTask|Task:{task.Id}_{index}_{timeFlag}";

            using (var channel = _rabbitConnection.CreateModel())
            {
                channel.ExchangeDeclare(exchange, "direct", true);
                channel.QueueDeclare(queue, true, false, false);
                channel.QueueBind(queue, exchange, queue);

                var retryDic = new Dictionary <string, object>
                {
                    { "x-dead-letter-exchange", exchange },
                    { "x-dead-letter-routing-key", queue }
                };

                channel.ExchangeDeclare(pendingExchange, "direct", true);
                channel.QueueDeclare(pendingQueue, true, false, false, retryDic);
                channel.QueueBind(pendingQueue, pendingExchange, pendingQueue);

                var properties = channel.CreateBasicProperties();
                properties.Headers = new Dictionary <string, object>
                {
                    ["index"]    = index,
                    ["id"]       = task.Id.ToString(),
                    ["sendtime"] = timeFlag
                };

                properties.Expiration = ((int)(task.SubTasks[0].SendTime - DateTime.UtcNow).TotalMilliseconds).ToString(CultureInfo.InvariantCulture);
                channel.BasicPublish(pendingExchange, pendingQueue, properties, Encoding.UTF8.GetBytes(string.Empty));
            }

            return(Ok());
        }