Esempio n. 1
0
        public async Task Test_Export_Custom_Scale()
        {
            var data = new List <ExportScale>();

            for (var i = 0; i < 100; i++)
            {
                data.Add(new ExportScale
                {
                    Id              = SnowflakeId.CurrentTimeFunc().ToString(),
                    Byte            = Conv.ToByte(i),
                    NullableByte    = i % 2 == 0 ? null : Conv.ToByteOrNull(i),
                    Short           = Conv.ToShort(i),
                    NullableShort   = i % 2 == 0 ? null : Conv.ToShortOrNull(i),
                    Int             = i,
                    NullableInt     = i % 2 == 0 ? null : Conv.ToIntOrNull(i),
                    Long            = i,
                    NullableLong    = i % 2 == 0 ? null : Conv.ToLongOrNull(i),
                    Float           = i * 0.4222222f,
                    NullableFloat   = i % 2 == 0 ? null : Conv.ToFloatOrNull(i) * 0.4222222f,
                    Double          = i * 0.4222222,
                    NullableDouble  = i % 2 == 0 ? null : Conv.ToDoubleOrNull(i) * 0.4222222,
                    Decimal         = i * 0.4222222m,
                    NullableDecimal = i % 2 == 0 ? null : Conv.ToDecimalOrNull(i) * 0.4222222m,
                });
            }

            var bytes = await _excelExportService.ExportAsync(new ExportOptions <ExportScale>()
            {
                Data              = data,
                HeaderRowIndex    = 0,
                DataRowStartIndex = 1,
            });

            await File.WriteAllBytesAsync($"D:\\测试导出_{DateTime.Now:yyyyMMddHHmmss}.xlsx", bytes);
        }
Esempio n. 2
0
        public MediumMessage StoreReceivedMessage(string name, string group, Message message)
        {
            var mdMessage = new MediumMessage
            {
                DbId      = SnowflakeId.Default().NextId().ToString(),
                Origin    = message,
                Added     = DateTime.Now,
                ExpiresAt = null,
                Retries   = 0
            };

            object[] sqlParams =
            {
                new SqlParameter("@Id",         mdMessage.DbId),
                new SqlParameter("@Name",       name),
                new SqlParameter("@Group",      group),
                new SqlParameter("@Content",    _serializer.Serialize(mdMessage.Origin)),
                new SqlParameter("@Retries",    mdMessage.Retries),
                new SqlParameter("@Added",      mdMessage.Added),
                new SqlParameter("@ExpiresAt",  mdMessage.ExpiresAt.HasValue ? (object)mdMessage.ExpiresAt.Value : DBNull.Value),
                new SqlParameter("@StatusName", nameof(StatusName.Scheduled))
            };

            StoreReceivedMessage(sqlParams);
            return(mdMessage);
        }
        public async Task GetReceivedMessageAsync_Test()
        {
            var sql             = $@"
        INSERT INTO ""cap"".""received""(""Id"",""Name"",""Group"",""Content"",""Retries"",""Added"",""ExpiresAt"",""StatusName"")
        VALUES(@Id,@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
            var insertedId      = SnowflakeId.Default().NextId();
            var receivedMessage = new CapReceivedMessage
            {
                Id         = insertedId,
                Name       = "PostgreSqlStorageConnectionTest",
                Content    = "",
                Group      = "mygroup",
                StatusName = StatusName.Scheduled
            };

            using (var connection = ConnectionUtil.CreateConnection())
            {
                await connection.ExecuteAsync(sql, receivedMessage);
            }

            var message = await _storage.GetReceivedMessageAsync(insertedId);

            Assert.NotNull(message);
            Assert.Equal(StatusName.Scheduled, message.StatusName);
            Assert.Equal("PostgreSqlStorageConnectionTest", message.Name);
            Assert.Equal("mygroup", message.Group);
        }
Esempio n. 4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="maxThread">最大线程数</param>
 /// <param name="duration">默认无任务后休息0ms</param>
 private TaskPool(int maxThread, int duration = 0)
 {
     this._taskBaseCommon = new TaskBaseCommon <T>(maxThread, duration);
     this._tasks          = new List <TaskBaseInfo>();
     this._isExcuteFinish = false;
     this._snowflake      = new SnowflakeId(3, 0);
 }
        public MediumMessage StoreReceivedMessage(string name, string group, Message message)
        {
            var sql =
                $"INSERT INTO {_recName}(\"Id\",\"Version\",\"Name\",\"Group\",\"Content\",\"Retries\",\"Added\",\"ExpiresAt\",\"StatusName\")" +
                $"VALUES(@Id,'{_capOptions.Value.Version}',@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName) RETURNING \"Id\";";

            var mdMessage = new MediumMessage
            {
                DbId      = SnowflakeId.Default().NextId().ToString(),
                Origin    = message,
                Added     = DateTime.Now,
                ExpiresAt = null,
                Retries   = 0
            };
            var content = _serializer.Serialize(mdMessage.Origin);

            this.DbConnection.Execute(sql, new
            {
                Id      = long.Parse(mdMessage.DbId),
                Group   = group,
                Name    = name,
                Content = content,
                mdMessage.Retries,
                mdMessage.Added,
                mdMessage.ExpiresAt,
                StatusName = nameof(StatusName.Scheduled)
            }, transaction: DbTransaction);
            return(mdMessage);
        }
        public async Task GetReceivedMessageAsync_Test()
        {
            var sql             = $@"
        INSERT INTO `cap.received`(`Id`,`Version`,`Name`,`Group`,`Content`,`Retries`,`Added`,`ExpiresAt`,`StatusName`)
        VALUES(@Id,'v1',@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
            var insertedId      = SnowflakeId.Default().NextId();
            var receivedMessage = new CapReceivedMessage
            {
                Id         = insertedId,
                Name       = "MySqlStorageConnectionTest",
                Content    = "",
                Group      = "mygroup",
                StatusName = StatusName.Scheduled
            };

            using (var connection = ConnectionUtil.CreateConnection())
            {
                await connection.ExecuteAsync(sql, receivedMessage);
            }

            var message = await _storage.GetReceivedMessageAsync(insertedId);

            Assert.NotNull(message);
            Assert.Equal(StatusName.Scheduled, message.StatusName);
            Assert.Equal("MySqlStorageConnectionTest", message.Name);
            Assert.Equal("mygroup", message.Group);
        }
Esempio n. 7
0
        public void getId_test()
        {
            var unixTimeMilliseconds = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

            Thread.Sleep(1000);
            var worker1 = new SnowflakeId(1, unixTimeMilliseconds);
            var worker2 = new SnowflakeId(2, unixTimeMilliseconds);
            var worker3 = new SnowflakeId(3, unixTimeMilliseconds);
            var worker4 = new SnowflakeId(4, unixTimeMilliseconds);

            HashSet <long> ids = new HashSet <long>();

            for (int i = 0; i < 1000000; i++)
            {
                ids.Add(worker1.NextId());
            }
            for (int i = 0; i < 1000000; i++)
            {
                ids.Add(worker2.NextId());
            }
            for (int i = 0; i < 1000000; i++)
            {
                ids.Add(worker3.NextId());
            }
            for (int i = 0; i < 1000000; i++)
            {
                ids.Add(worker4.NextId());
            }

            ids.Count.ShouldBe(1000000 * 4);

            Should.Throw <ArgumentException>((() => new SnowflakeId(-54, 1)));
            Should.Throw <ArgumentException>((() => new SnowflakeId(1, DateTimeOffset.UtcNow.AddDays(1).ToUnixTimeMilliseconds())));
        }
Esempio n. 8
0
        public MediumMessage StoreReceivedMessage(string name, string group, Message message)
        {
            var mdMessage = new MediumMessage
            {
                DbId      = SnowflakeId.Default().NextId().ToString(),
                Origin    = message,
                Added     = DateTime.Now,
                ExpiresAt = null,
                Retries   = 0
            };
            var content = _serializer.Serialize(mdMessage.Origin);

            var collection = _database.GetCollection <ReceivedMessage>(_options.Value.ReceivedCollection);

            var store = new ReceivedMessage
            {
                Id         = long.Parse(mdMessage.DbId),
                Group      = group,
                Name       = name,
                Content    = content,
                Added      = mdMessage.Added,
                ExpiresAt  = mdMessage.ExpiresAt,
                Retries    = mdMessage.Retries,
                Version    = _capOptions.Value.Version,
                StatusName = nameof(StatusName.Scheduled)
            };

            collection.InsertOne(store);

            return(mdMessage);
        }
Esempio n. 9
0
        public MongoDBMonitoringApiTest()
        {
            _api = new MongoDBMonitoringApi(MongoClient, MongoDBOptions);

            var collection = Database.GetCollection <PublishedMessage>(MongoDBOptions.PublishedCollection);

            collection.InsertMany(new[]
            {
                new PublishedMessage
                {
                    Id         = SnowflakeId.Default().NextId(),
                    Added      = DateTime.Now.AddHours(-1),
                    StatusName = "Failed",
                    Version    = "v1",
                    Content    = "abc"
                },
                new PublishedMessage
                {
                    Id         = SnowflakeId.Default().NextId(),
                    Added      = DateTime.Now,
                    StatusName = "Failed",
                    Version    = "v1",
                    Content    = "bbc"
                }
            });
        }
Esempio n. 10
0
        public MediumMessage StoreReceivedMessage(string name, string group, Message message)
        {
            var sql =
                $"INSERT INTO {_recName}([Id],[Version],[Name],[Group],[Content],[Retries],[Added],[ExpiresAt],[StatusName])" +
                $"VALUES(@Id,'{_capOptions.Value.Version}',@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";

            var mdMessage = new MediumMessage
            {
                DbId      = SnowflakeId.Default().NextId().ToString(),
                Origin    = message,
                Added     = DateTime.Now,
                ExpiresAt = null,
                Retries   = 0
            };
            var content = StringSerializer.Serialize(mdMessage.Origin);
            // using var connection = new SqlConnection(_options.Value.ConnectionString);
            var connection = this.DbConnection;

            connection.Execute(sql, new
            {
                Id      = mdMessage.DbId,
                Group   = group,
                Name    = name,
                Content = content,
                mdMessage.Retries,
                mdMessage.Added,
                mdMessage.ExpiresAt,
                StatusName = nameof(StatusName.Scheduled)
            }, DbTransaction);
            return(mdMessage);
        }
        /// <summary>
        /// 生成数据库名后缀
        /// </summary>
        /// <returns></returns>
        public string BuildDirectoryPath(long id)
        {
            var sid = new SnowflakeId(id);

            switch (_mode)
            {
            case DirectoryDepthMode.Minute:
                return(sid.Time.ToString("yyyy/yyyy-MM/yyyy-MM-dd-HH-mm"));

            case DirectoryDepthMode.Hour:
                return(sid.Time.ToString("yyyy/yyyy-MM/yyyy-MM-dd-HH"));

            case DirectoryDepthMode.Day:
                return(sid.Time.ToString("yyyy/yyyy-MM/yyyy-MM-dd"));

            case DirectoryDepthMode.Month:
                return(sid.Time.ToString("yyyy/yyyy-MM"));

            case DirectoryDepthMode.Year:
                return(sid.Time.ToString("yyyy"));

            default:
                return(string.Empty);
            }
        }
        async Task <AsyncExecutedResult> CreateAsync(string aggregateRootTypeName, string aggregateRootId)
        {
            try
            {
                using (var connection = new MySqlConnection(connectionString))
                {
                    await connection.ExecuteAsync(
                        BuildSql(createSql, aggregateRootId),
                        new
                    {
                        Id = SnowflakeId.Default().NewId(),
                        AggregateRootTypeName = aggregateRootTypeName,
                        AggregateRootId       = aggregateRootId,
                        Version   = 1L,
                        CreatedOn = DateTime.UtcNow
                    });

                    return(AsyncExecutedResult.Success);
                }
            }
            catch (Exception ex)
            {
                return(AsyncExecutedResult.Failed(ex));
            }
        }
 public EventResponseMessage(SnowflakeId id, string endpoint, string?signature, byte[]?data)
 {
     Id        = id;
     Endpoint  = endpoint;
     Signature = signature;
     Data      = data;
 }
Esempio n. 14
0
        public async void GetReceivedMessagesOfNeedRetry_TestAsync()
        {
            var msgs = await _connection.GetReceivedMessagesOfNeedRetry();

            msgs.Should().BeEmpty();

            var id = SnowflakeId.Default().NextId();

            var msg = new CapReceivedMessage
            {
                Id         = id,
                Group      = "test",
                Name       = "test",
                Content    = "test-content",
                StatusName = StatusName.Failed
            };

            _connection.StoreReceivedMessage(msg);

            var collection = Database.GetCollection <CapReceivedMessage>(MongoDBOptions.ReceivedCollection);

            var updateDef = Builders <CapReceivedMessage>
                            .Update.Set(x => x.Added, DateTime.Now.AddMinutes(-5));

            await collection.UpdateOneAsync(x => x.Id == id, updateDef);

            msgs = await _connection.GetReceivedMessagesOfNeedRetry();

            msgs.Should().HaveCountGreaterThan(0);
        }
Esempio n. 15
0
        public static void Main(string[] args)
        {
            var container = new ServiceCollection();

            container.AddLogging(x => x.AddConsole());

            if (_useCustomSelector)
            {
                container.AddSingleton <IConsumerServiceSelector, GenericConsumerServiceSelector <IMessageSubscriber, MessageSubscriptionAttribute> >();
            }

            container.AddTransient <IMessageSubscriber, CustomSubscriber>();
            container.AddTransient <ICapSubscribe, CustomSubscriber>();

            container.AddCap(x =>
            {
                x.UseInMemoryStorage();
                x.UseRabbitMQ(z =>
                {
                    z.ExchangeName  = "MyConsumerSelector.Generic";
                    z.HostName      = "localhost";
                    z.UserName      = "******";
                    z.Password      = "******";
                    z.CustomHeaders = e => new List <KeyValuePair <string, string> >
                    {
                        new(DotNetCore.CAP.Messages.Headers.MessageId, SnowflakeId.Default().NextId().ToString()),
                        new(DotNetCore.CAP.Messages.Headers.MessageName, e.RoutingKey)
                    };
                });
            });
Esempio n. 16
0
        public MediumMessage StoreReceivedMessage(string name, string @group, Message message)
        {
            var mdMessage = new MediumMessage
            {
                DbId      = SnowflakeId.Default().NextId().ToString(),
                Origin    = message,
                Added     = DateTime.Now,
                ExpiresAt = null,
                Retries   = 0
            };

            ReceivedMessages[mdMessage.DbId] = new MemoryMessage
            {
                DbId       = mdMessage.DbId,
                Origin     = mdMessage.Origin,
                Group      = group,
                Name       = name,
                Content    = StringSerializer.Serialize(mdMessage.Origin),
                Retries    = mdMessage.Retries,
                Added      = mdMessage.Added,
                ExpiresAt  = mdMessage.ExpiresAt,
                StatusName = StatusName.Scheduled
            };
            return(mdMessage);
        }
Esempio n. 17
0
        private Internal.DefaultConsumerInvoker InitDefaultConsumerInvoker(IServiceProvider provider)
        {
            var invoker = new Internal.DefaultConsumerInvoker(
                _loggerFactory,
                provider,
                _mockMessagePacker.Object,
                _mockModelBinderFactory.Object);

            var message = new CapReceivedMessage
            {
                Id         = SnowflakeId.Default().NextId(),
                Name       = "test",
                Content    = DateTime.Now.ToString(),
                StatusName = StatusName.Scheduled,
                Group      = "Group.Test"
            };

            _mockMessagePacker
            .Setup(x => x.UnPack(It.IsAny <string>()))
            .Returns(new CapMessageDto(message.Content));

            _messageContext = new MessageContext
            {
                Group   = message.Group,
                Name    = message.Name,
                Content = Helper.ToJson(message)
            };

            return(invoker);
        }
        public MediumMessage StoreReceivedMessage(string name, string group, Message message)
        {
            var sql = $@"INSERT INTO `{_initializer.GetReceivedTableName()}`(`Id`,`Version`,`Name`,`Group`,`Content`,`Retries`,`Added`,`ExpiresAt`,`StatusName`) VALUES(@Id,'{_options.Value.Version}',@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";

            var mdMessage = new MediumMessage
            {
                DbId      = SnowflakeId.Default().NextId().ToString(),
                Origin    = message,
                Added     = DateTime.Now,
                ExpiresAt = null,
                Retries   = 0
            };
            var content = StringSerializer.Serialize(mdMessage.Origin);

            using var connection = new MySqlConnection(_options.Value.ConnectionString);
            connection.Execute(sql, new
            {
                Id      = mdMessage.DbId,
                Group   = @group,
                Name    = name,
                Content = content,
                mdMessage.Retries,
                mdMessage.Added,
                mdMessage.ExpiresAt,
                StatusName = nameof(StatusName.Scheduled)
            });
            return(mdMessage);
        }
        public MediumMessage StoreReceivedMessage(string name, string group, Message message)
        {
            var mdMessage = new MediumMessage
            {
                DbId      = SnowflakeId.Default().NextId().ToString(),
                Origin    = message,
                Added     = DateTime.Now,
                ExpiresAt = null,
                Retries   = 0
            };

            object[] sqlParams =
            {
                new OracleParameter(":Id",         long.Parse(mdMessage.DbId)),
                new OracleParameter(":Name",       name),
                new OracleParameter(":Group1",     group),
                new OracleParameter(":Content",    OracleDbType.Clob)
                {
                    Value = _serializer.Serialize(mdMessage.Origin)
                },
                new OracleParameter(":Retries",    mdMessage.Retries),
                new OracleParameter(":Added",      mdMessage.Added),
                new OracleParameter(":ExpiresAt",  mdMessage.ExpiresAt.HasValue ? (object)mdMessage.ExpiresAt.Value : DBNull.Value),
                new OracleParameter(":StatusName", nameof(StatusName.Scheduled))
            };

            StoreReceivedMessage(sqlParams);
            return(mdMessage);
        }
Esempio n. 20
0
        public void NextIdTest()
        {
            var result = SnowflakeId.Default().NextId();

            Assert.IsType <long>(result);
            Assert.True(result > 0);
            Assert.True(result.ToString().Length == long.MaxValue.ToString().Length);
        }
Esempio n. 21
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="userName"></param>
 /// <param name="imageUrl"></param>
 /// <param name="message"></param>
 public MessageAggregate(string userName, string imageUrl, string message)
 {
     this.Id         = SnowflakeId.Default().NextId().ToString();
     this.UserName   = userName;
     this.ImageUrl   = imageUrl;
     this.Message    = message;
     this.CreateTime = DateTime.Now;
 }
        public void OnApplicationCommand(IApplicationCommandingContext context, StartWithdrawApplicationCommand appCommand)
        {
            var transactionId = SnowflakeId.Default().NextId();
            var command       = new StartWithdrawTransactionDomainCommand(transactionId, appCommand.AccountId, appCommand.AccountName,
                                                                          appCommand.Amount, appCommand.Bank);

            context.PublishDomainCommand(command);
        }
Esempio n. 23
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="cost"></param>
 /// <param name="itemType"></param>
 /// <param name="remark"></param>
 /// <param name="billId"></param>
 public BillItem(BillItemTypeEnum itemType, decimal cost, string remark, string billId)
 {
     Id               = SnowflakeId.Default().NextId().ToString();
     Cost             = cost;
     BillItemTypeEnum = itemType;
     Remark           = remark;
     BillId           = billId;
 }
Esempio n. 24
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="userName"></param>
 /// <param name="password"></param>
 /// <param name="realName"></param>
 /// <param name="email"></param>
 public SystemUser(string userName, string password, string realName, string email)
 {
     this.Id       = SnowflakeId.Default().NextId().ToString();
     this.UserName = userName;
     this.Password = password;
     this.RealName = realName;
     this.Email    = email;
 }
Esempio n. 25
0
 /// <summary>
 /// 创建订单
 /// </summary>
 /// <param name="person"></param>
 public Bill(string person)
 {
     this.Id             = SnowflakeId.Default().NextId().ToString();
     this.Person         = person;
     this.TotalCost      = 0;
     this.BillCreateTime = DateTime.Now;
     this.BillName       = $"{this.BillCreateTime.ToString("yyyy-MM-dd")}-账单";
     this.BillItems      = new List <BillItem>();
 }
Esempio n. 26
0
 public MemoryCache(IRepository repository, IBackgroundWorker backgroundWorker, ILogger <MemoryCache> logger, VoguediOptions options)
 {
     this.repository       = repository;
     this.backgroundWorker = backgroundWorker;
     this.logger           = logger;
     expiration            = options.AggregateRootExpiration;
     backgroundWorkerKey   = $"{nameof(MemoryCache)}_{SnowflakeId.Default().NewId()}";
     cacheItemMapping      = new ConcurrentDictionary <string, AggregateRootCacheItem>();
 }
Esempio n. 27
0
 public ApplicationUser(string userName, string password)
 {
     Id         = SnowflakeId.Default().NextId();
     UserName   = userName.NotNull(nameof(userName));
     Password   = password.NotNull(nameof(password));
     CreateTime = DateTimeOffset.UtcNow;
     Status     = UserStatus.AwaitingActive;
     AddDomainEvent(new UserCreatedEvent(Id, UserName, CreateTime));
 }
Esempio n. 28
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="name"></param>
 /// <param name="code"></param>
 /// <param name="address"></param>
 /// <param name="icon"></param>
 /// <param name="menuType"></param>
 /// <param name="parentId"
 public SystemMenu(string name, string code, string address, string icon, int menuType, string parentId)
 {
     this.Id       = SnowflakeId.Default().NextId().ToString();
     this.Name     = name;
     this.Code     = code;
     this.Address  = address;
     this.Icon     = icon;
     this.MenuType = menuType;
     this.ParentId = parentId == "" ? null : parentId;
 }
Esempio n. 29
0
 public EventCommitter(ICommittingEventQueueFactory queueFactory, ICache cache, IBackgroundWorker backgroundWorker, ILogger <EventCommitter> logger, VoguediOptions options)
 {
     this.queueFactory     = queueFactory;
     this.cache            = cache;
     this.backgroundWorker = backgroundWorker;
     this.logger           = logger;
     expiration            = options.MemoryQueueExpiration;
     backgroundWorkerKey   = $"{nameof(EventCommitter)}_{SnowflakeId.Default().NewId()}";
     queueMapping          = new ConcurrentDictionary <string, ICommittingEventQueue>();
 }
Esempio n. 30
0
        public void Publish <T>(string name, T contentObj, string callbackName = null)
        {
            var message = new CapPublishedMessage
            {
                Id         = SnowflakeId.Default().NextId(),
                Name       = name,
                Content    = Serialize(contentObj, callbackName),
                StatusName = StatusName.Scheduled
            };

            PublishAsyncInternal(message).GetAwaiter().GetResult();
        }