ソースを参照

Release 2.4.0 (#250)

* update version to 2.4.0

* Add version options to config file.

* update resource

* add  message version support  for dashboard

* add  message version support  for dashboard

* Support using version to isolate messages. #220

* update mongo unit tests

* update unit tests

* update unit tests

* Set default versions for consumer groups

* solve the problem of issue#181 (#237)

* Issue#235 (#238)

* solve the problem of issue#181

* solve the problem of issue#235

* refactor

* Fix the message persistence bug. #240

* using new CamelCaseNamingStrategy

* update packages to .net core 2.2

* update test framework to netcoreapp2.2

* Update .travis.yml

* update TargetFramework

* Exclude build samples project
master
Savorboard 6年前
committed by GitHub
コミット
74fed843fb
この署名に対応する既知のキーがデータベースに存在しません GPGキーID: 4AEE18F83AFDEB23
59個のファイルの変更353行の追加286行の削除
  1. +1
    -1
      .travis.yml
  2. +0
    -3
      CAP.sln
  3. +1
    -1
      build.sh
  4. +2
    -2
      build/version.props
  5. +1
    -1
      samples/Sample.Kafka.MySql/Sample.Kafka.MySql.csproj
  6. +2
    -2
      samples/Sample.RabbitMQ.MongoDB/Sample.RabbitMQ.MongoDB.csproj
  7. +2
    -2
      samples/Sample.RabbitMQ.MySql/Sample.RabbitMQ.MySql.csproj
  8. +5
    -0
      src/DotNetCore.CAP.MongoDB/CAP.MongoDBCapOptionsExtension.cs
  9. +2
    -0
      src/DotNetCore.CAP.MongoDB/CAP.MongoDBOptions.cs
  10. +2
    -0
      src/DotNetCore.CAP.MongoDB/CAP.Options.Extensions.cs
  11. +2
    -3
      src/DotNetCore.CAP.MongoDB/DotNetCore.CAP.MongoDB.csproj
  12. +16
    -3
      src/DotNetCore.CAP.MongoDB/ICapPublisher.MongoDB.cs
  13. +31
    -15
      src/DotNetCore.CAP.MongoDB/IStorageConnection.MongoDB.cs
  14. +14
    -0
      src/DotNetCore.CAP.MongoDB/StorageMessage.cs
  15. +5
    -0
      src/DotNetCore.CAP.MySql/CAP.EFOptions.cs
  16. +2
    -0
      src/DotNetCore.CAP.MySql/CAP.Options.Extensions.cs
  17. +3
    -3
      src/DotNetCore.CAP.MySql/DotNetCore.CAP.MySql.csproj
  18. +2
    -1
      src/DotNetCore.CAP.MySql/ICapPublisher.MySql.cs
  19. +3
    -1
      src/DotNetCore.CAP.MySql/IStorage.MySql.cs
  20. +4
    -4
      src/DotNetCore.CAP.MySql/IStorageConnection.MySql.cs
  21. +5
    -0
      src/DotNetCore.CAP.PostgreSql/CAP.EFOptions.cs
  22. +3
    -0
      src/DotNetCore.CAP.PostgreSql/CAP.Options.Extensions.cs
  23. +2
    -2
      src/DotNetCore.CAP.PostgreSql/DotNetCore.CAP.PostgreSql.csproj
  24. +1
    -1
      src/DotNetCore.CAP.PostgreSql/ICapPublisher.PostgreSql.cs
  25. +7
    -1
      src/DotNetCore.CAP.PostgreSql/IStorage.PostgreSql.cs
  26. +3
    -7
      src/DotNetCore.CAP.PostgreSql/IStorageConnection.PostgreSql.cs
  27. +13
    -4
      src/DotNetCore.CAP.RabbitMQ/IConnectionChannelPool.Default.cs
  28. +7
    -1
      src/DotNetCore.CAP.RabbitMQ/IPublishMessageSender.RabbitMQ.cs
  29. +1
    -1
      src/DotNetCore.CAP.RabbitMQ/RabbitMQConsumerClient.cs
  30. +5
    -0
      src/DotNetCore.CAP.SqlServer/CAP.EFOptions.cs
  31. +3
    -0
      src/DotNetCore.CAP.SqlServer/CAP.Options.Extensions.cs
  32. +3
    -3
      src/DotNetCore.CAP.SqlServer/DotNetCore.CAP.SqlServer.csproj
  33. +1
    -1
      src/DotNetCore.CAP.SqlServer/ICapPublisher.SqlServer.cs
  34. +2
    -0
      src/DotNetCore.CAP.SqlServer/IStorage.SqlServer.cs
  35. +4
    -4
      src/DotNetCore.CAP.SqlServer/IStorageConnection.SqlServer.cs
  36. +11
    -0
      src/DotNetCore.CAP/CAP.Options.cs
  37. +9
    -72
      src/DotNetCore.CAP/Dashboard/Content/resx/Strings.Designer.cs
  38. +6
    -36
      src/DotNetCore.CAP/Dashboard/Content/resx/Strings.resx
  39. +5
    -26
      src/DotNetCore.CAP/Dashboard/Content/resx/Strings.zh.resx
  40. +7
    -1
      src/DotNetCore.CAP/Dashboard/JsonDispatcher.cs
  41. +7
    -1
      src/DotNetCore.CAP/Dashboard/JsonStats.cs
  42. +2
    -0
      src/DotNetCore.CAP/Dashboard/Monitoring/MessageDto.cs
  43. +6
    -2
      src/DotNetCore.CAP/Dashboard/Pages/PublishedPage.cshtml
  44. +15
    -2
      src/DotNetCore.CAP/Dashboard/Pages/PublishedPage.generated.cs
  45. +5
    -1
      src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.cshtml
  46. +18
    -1
      src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.generated.cs
  47. +6
    -6
      src/DotNetCore.CAP/DotNetCore.CAP.csproj
  48. +3
    -0
      src/DotNetCore.CAP/ISubscriberExecutor.cs
  49. +34
    -18
      src/DotNetCore.CAP/Internal/IConsumerServiceSelector.Default.cs
  50. +6
    -6
      test/DotNetCore.CAP.MongoDB.Test/DotNetCore.CAP.MongoDB.Test.csproj
  51. +5
    -3
      test/DotNetCore.CAP.MongoDB.Test/MongoDBMonitoringApiTest.cs
  52. +9
    -5
      test/DotNetCore.CAP.MongoDB.Test/MongoDBStorageConnectionTest.cs
  53. +11
    -11
      test/DotNetCore.CAP.MySql.Test/DotNetCore.CAP.MySql.Test.csproj
  54. +3
    -3
      test/DotNetCore.CAP.MySql.Test/MySqlStorageConnectionTest.cs
  55. +2
    -2
      test/DotNetCore.CAP.PostgreSql.Test/DotNetCore.CAP.PostgreSql.Test.csproj
  56. +3
    -3
      test/DotNetCore.CAP.PostgreSql.Test/PostgreSqlStorageConnectionTest.cs
  57. +12
    -12
      test/DotNetCore.CAP.SqlServer.Test/DotNetCore.CAP.SqlServer.Test.csproj
  58. +2
    -2
      test/DotNetCore.CAP.SqlServer.Test/SqlServerStorageConnectionTest.cs
  59. +6
    -6
      test/DotNetCore.CAP.Test/DotNetCore.CAP.Test.csproj

+ 1
- 1
.travis.yml ファイルの表示

@@ -2,7 +2,7 @@ language: csharp
sudo: required
dist: trusty
solution: CAP.sln
dotnet: 2.1.300
dotnet: 2.2.100
mono: none

matrix:


+ 0
- 3
CAP.sln ファイルの表示

@@ -100,7 +100,6 @@ Global
{80A84F62-1558-427B-BA74-B47AA8A665B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{80A84F62-1558-427B-BA74-B47AA8A665B5}.Release|Any CPU.Build.0 = Release|Any CPU
{9F3F9BFE-7B6A-4A7A-A6E6-8B517D611873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F3F9BFE-7B6A-4A7A-A6E6-8B517D611873}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F3F9BFE-7B6A-4A7A-A6E6-8B517D611873}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F3F9BFE-7B6A-4A7A-A6E6-8B517D611873}.Release|Any CPU.Build.0 = Release|Any CPU
{82C403AB-ED68-4084-9A1D-11334F9F08F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -120,11 +119,9 @@ Global
{77C0AC02-C44B-49D5-B969-7D5305FC20A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{77C0AC02-C44B-49D5-B969-7D5305FC20A5}.Release|Any CPU.Build.0 = Release|Any CPU
{4473DE19-E8D2-4B57-80A8-C8AAA2BFA20F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4473DE19-E8D2-4B57-80A8-C8AAA2BFA20F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4473DE19-E8D2-4B57-80A8-C8AAA2BFA20F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4473DE19-E8D2-4B57-80A8-C8AAA2BFA20F}.Release|Any CPU.Build.0 = Release|Any CPU
{11563D1A-27CC-45CF-8C04-C16BCC21250A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{11563D1A-27CC-45CF-8C04-C16BCC21250A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{11563D1A-27CC-45CF-8C04-C16BCC21250A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{11563D1A-27CC-45CF-8C04-C16BCC21250A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection


+ 1
- 1
build.sh ファイルの表示

@@ -1,3 +1,3 @@
dotnet --info
dotnet restore
dotnet test test/DotNetCore.CAP.Test/DotNetCore.CAP.Test.csproj -f netcoreapp2.0
dotnet test test/DotNetCore.CAP.Test/DotNetCore.CAP.Test.csproj -f netcoreapp2.2

+ 2
- 2
build/version.props ファイルの表示

@@ -1,8 +1,8 @@
<Project>
<PropertyGroup>
<VersionMajor>2</VersionMajor>
<VersionMinor>3</VersionMinor>
<VersionPatch>1</VersionPatch>
<VersionMinor>4</VersionMinor>
<VersionPatch>0</VersionPatch>
<VersionQuality></VersionQuality>
<VersionPrefix>$(VersionMajor).$(VersionMinor).$(VersionPatch)</VersionPrefix>
</PropertyGroup>


+ 1
- 1
samples/Sample.Kafka.MySql/Sample.Kafka.MySql.csproj ファイルの表示

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AssemblyName>Sample.Kafka.MySql</AssemblyName>
<WarningsAsErrors>NU1701</WarningsAsErrors>
<NoWarn>NU1701</NoWarn>


+ 2
- 2
samples/Sample.RabbitMQ.MongoDB/Sample.RabbitMQ.MongoDB.csproj ファイルの表示

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
@@ -13,4 +13,4 @@
<ProjectReference Include="..\..\src\DotNetCore.CAP.MongoDB\DotNetCore.CAP.MongoDB.csproj" />
</ItemGroup>

</Project>
</Project>

+ 2
- 2
samples/Sample.RabbitMQ.MySql/Sample.RabbitMQ.MySql.csproj ファイルの表示

@@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.1.0" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.1.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\DotNetCore.CAP.MySql\DotNetCore.CAP.MySql.csproj" />


+ 5
- 0
src/DotNetCore.CAP.MongoDB/CAP.MongoDBCapOptionsExtension.cs ファイルの表示

@@ -4,6 +4,8 @@
using System;
using DotNetCore.CAP.Processor;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using MongoDB.Driver;

namespace DotNetCore.CAP.MongoDB
{
@@ -32,6 +34,9 @@ namespace DotNetCore.CAP.MongoDB
var options = new MongoDBOptions();
_configure?.Invoke(options);
services.AddSingleton(options);

//Try to add IMongoClient if does not exists
services.TryAddSingleton<IMongoClient>(new MongoClient(options.DatabaseConnection));
}
}
}

+ 2
- 0
src/DotNetCore.CAP.MongoDB/CAP.MongoDBOptions.cs ファイルの表示

@@ -29,5 +29,7 @@ namespace DotNetCore.CAP.MongoDB
/// Default value: "published"
/// </summary>
public string PublishedCollection { get; set; } = "cap.published";

internal string Version { get; set; }
}
}

+ 2
- 0
src/DotNetCore.CAP.MongoDB/CAP.Options.Extensions.cs ファイルの表示

@@ -27,6 +27,8 @@ namespace Microsoft.Extensions.DependencyInjection
throw new ArgumentNullException(nameof(configure));
}

configure += x => x.Version = options.Version;

options.RegisterExtension(new MongoDBCapOptionsExtension(configure));

return options;


+ 2
- 3
src/DotNetCore.CAP.MongoDB/DotNetCore.CAP.MongoDB.csproj ファイルの表示

@@ -16,9 +16,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="MongoDB.Bson" Version="2.7.0" />
<PackageReference Include="MongoDB.Driver" Version="2.7.0" />
<PackageReference Include="MongoDB.Driver.Core" Version="2.7.0" />
<PackageReference Include="MongoDB.Bson" Version="2.7.2" />
<PackageReference Include="MongoDB.Driver" Version="2.7.2" />
</ItemGroup>

</Project>

+ 16
- 3
src/DotNetCore.CAP.MongoDB/ICapPublisher.MongoDB.cs ファイルの表示

@@ -35,15 +35,28 @@ namespace DotNetCore.CAP.MongoDB

var collection = _client
.GetDatabase(_options.DatabaseName)
.GetCollection<CapPublishedMessage>(_options.PublishedCollection);
.GetCollection<PublishedMessage>(_options.PublishedCollection);

var store = new PublishedMessage()
{
Id = message.Id,
Name = message.Name,
Content = message.Content,
Added = message.Added,
StatusName = message.StatusName,
ExpiresAt = message.ExpiresAt,
Retries = message.Retries,
Version = _options.Version,
};

if (NotUseTransaction)
{
return collection.InsertOneAsync(message, insertOptions, cancel);

return collection.InsertOneAsync(store, insertOptions, cancel);
}

var dbTrans = (IClientSessionHandle) transaction.DbTransaction;
return collection.InsertOneAsync(dbTrans, message, insertOptions, cancel);
return collection.InsertOneAsync(dbTrans, store, insertOptions, cancel);
}
}
}

+ 31
- 15
src/DotNetCore.CAP.MongoDB/IStorageConnection.MongoDB.cs ファイルの表示

@@ -27,9 +27,9 @@ namespace DotNetCore.CAP.MongoDB

public bool ChangePublishedState(long messageId, string state)
{
var collection = _database.GetCollection<CapPublishedMessage>(_options.PublishedCollection);
var collection = _database.GetCollection<PublishedMessage>(_options.PublishedCollection);

var updateDef = Builders<CapPublishedMessage>
var updateDef = Builders<PublishedMessage>
.Update.Inc(x => x.Retries, 1)
.Set(x => x.ExpiresAt, null)
.Set(x => x.StatusName, state);
@@ -42,9 +42,9 @@ namespace DotNetCore.CAP.MongoDB

public bool ChangeReceivedState(long messageId, string state)
{
var collection = _database.GetCollection<CapReceivedMessage>(_options.ReceivedCollection);
var collection = _database.GetCollection<ReceivedMessage>(_options.ReceivedCollection);

var updateDef = Builders<CapReceivedMessage>
var updateDef = Builders<ReceivedMessage>
.Update.Inc(x => x.Retries, 1)
.Set(x => x.ExpiresAt, null)
.Set(x => x.StatusName, state);
@@ -62,35 +62,39 @@ namespace DotNetCore.CAP.MongoDB

public async Task<CapPublishedMessage> GetPublishedMessageAsync(long id)
{
var collection = _database.GetCollection<CapPublishedMessage>(_options.PublishedCollection);
var collection = _database.GetCollection<PublishedMessage>(_options.PublishedCollection);
return await collection.Find(x => x.Id == id).FirstOrDefaultAsync();
}

public async Task<IEnumerable<CapPublishedMessage>> GetPublishedMessagesOfNeedRetry()
{
var fourMinsAgo = DateTime.Now.AddMinutes(-4);
var collection = _database.GetCollection<CapPublishedMessage>(_options.PublishedCollection);
var collection = _database.GetCollection<PublishedMessage>(_options.PublishedCollection);
return await collection
.Find(x => x.Retries < _capOptions.FailedRetryCount && x.Added < fourMinsAgo &&
(x.StatusName == StatusName.Failed || x.StatusName == StatusName.Scheduled))
.Find(x => x.Retries < _capOptions.FailedRetryCount
&& x.Added < fourMinsAgo
&& x.Version == _capOptions.Version
&& (x.StatusName == StatusName.Failed || x.StatusName == StatusName.Scheduled))
.Limit(200)
.ToListAsync();
}

public async Task<CapReceivedMessage> GetReceivedMessageAsync(long id)
{
var collection = _database.GetCollection<CapReceivedMessage>(_options.ReceivedCollection);
var collection = _database.GetCollection<ReceivedMessage>(_options.ReceivedCollection);
return await collection.Find(x => x.Id == id).FirstOrDefaultAsync();
}

public async Task<IEnumerable<CapReceivedMessage>> GetReceivedMessagesOfNeedRetry()
{
var fourMinsAgo = DateTime.Now.AddMinutes(-4);
var collection = _database.GetCollection<CapReceivedMessage>(_options.ReceivedCollection);
var collection = _database.GetCollection<ReceivedMessage>(_options.ReceivedCollection);

return await collection
.Find(x => x.Retries < _capOptions.FailedRetryCount && x.Added < fourMinsAgo &&
(x.StatusName == StatusName.Failed || x.StatusName == StatusName.Scheduled))
.Find(x => x.Retries < _capOptions.FailedRetryCount
&& x.Added < fourMinsAgo
&& x.Version == _capOptions.Version
&& (x.StatusName == StatusName.Failed || x.StatusName == StatusName.Scheduled))
.Limit(200)
.ToListAsync();
}
@@ -101,10 +105,22 @@ namespace DotNetCore.CAP.MongoDB
{
throw new ArgumentNullException(nameof(message));
}
var collection = _database.GetCollection<ReceivedMessage>(_options.ReceivedCollection);

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

collection.InsertOne(message);
var store = new ReceivedMessage()
{
Id = message.Id,
Group = message.Group,
Name = message.Name,
Content = message.Content,
Added = message.Added,
StatusName = message.StatusName,
ExpiresAt = message.ExpiresAt,
Retries = message.Retries,
Version = _capOptions.Version
};

collection.InsertOne(store);
}
}
}

+ 14
- 0
src/DotNetCore.CAP.MongoDB/StorageMessage.cs ファイルの表示

@@ -0,0 +1,14 @@
using DotNetCore.CAP.Models;

namespace DotNetCore.CAP.MongoDB
{
internal class ReceivedMessage : CapReceivedMessage
{
public string Version { get; set; }
}

internal class PublishedMessage : CapPublishedMessage
{
public string Version { get; set; }
}
}

+ 5
- 0
src/DotNetCore.CAP.MySql/CAP.EFOptions.cs ファイルの表示

@@ -19,5 +19,10 @@ namespace DotNetCore.CAP
/// EF db context type.
/// </summary>
internal Type DbContextType { get; set; }

/// <summary>
/// Data version
/// </summary>
internal string Version { get; set; }
}
}

+ 2
- 0
src/DotNetCore.CAP.MySql/CAP.Options.Extensions.cs ファイルの表示

@@ -22,6 +22,7 @@ namespace Microsoft.Extensions.DependencyInjection
throw new ArgumentNullException(nameof(configure));
}

configure += x => x.Version = options.Version;

options.RegisterExtension(new MySqlCapOptionsExtension(configure));

@@ -46,6 +47,7 @@ namespace Microsoft.Extensions.DependencyInjection
{
configure(x);
x.DbContextType = typeof(TContext);
x.Version = options.Version;
}));

return options;


+ 3
- 3
src/DotNetCore.CAP.MySql/DotNetCore.CAP.MySql.csproj ファイルの表示

@@ -13,9 +13,9 @@

<ItemGroup>
<PackageReference Include="Dapper" Version="1.50.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.1.0" />
<PackageReference Include="MySqlConnector" Version="0.46.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.2.0" />
<PackageReference Include="MySqlConnector" Version="0.47.1" />
</ItemGroup>

<ItemGroup>


+ 2
- 1
src/DotNetCore.CAP.MySql/ICapPublisher.MySql.cs ファイルの表示

@@ -55,7 +55,8 @@ namespace DotNetCore.CAP.MySql
private string PrepareSql()
{
return
$"INSERT INTO `{_options.TableNamePrefix}.published` (`Id`,`Name`,`Content`,`Retries`,`Added`,`ExpiresAt`,`StatusName`)VALUES(@Id,@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
$"INSERT INTO `{_options.TableNamePrefix}.published` (`Id`,`Version`,`Name`,`Content`,`Retries`,`Added`,`ExpiresAt`,`StatusName`)" +
$"VALUES(@Id,'{_options.Version}',@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
}

#endregion private methods


+ 3
- 1
src/DotNetCore.CAP.MySql/IStorage.MySql.cs ファイルの表示

@@ -48,7 +48,7 @@ namespace DotNetCore.CAP.MySql
var sql = CreateDbTablesScript(_options.TableNamePrefix);
using (var connection = new MySqlConnection(_options.ConnectionString))
{
await connection.ExecuteAsync(sql);
await connection.ExecuteAsync(sql);
}

_logger.LogDebug("Ensuring all create database tables script are applied.");
@@ -60,6 +60,7 @@ namespace DotNetCore.CAP.MySql
$@"
CREATE TABLE IF NOT EXISTS `{prefix}.received` (
`Id` bigint NOT NULL,
`Version` varchar(20) DEFAULT NULL,
`Name` varchar(400) NOT NULL,
`Group` varchar(200) DEFAULT NULL,
`Content` longtext,
@@ -72,6 +73,7 @@ CREATE TABLE IF NOT EXISTS `{prefix}.received` (

CREATE TABLE IF NOT EXISTS `{prefix}.published` (
`Id` bigint NOT NULL,
`Version` varchar(20) DEFAULT NULL,
`Name` varchar(200) NOT NULL,
`Content` longtext,
`Retries` int(11) DEFAULT NULL,


+ 4
- 4
src/DotNetCore.CAP.MySql/IStorageConnection.MySql.cs ファイルの表示

@@ -44,7 +44,7 @@ namespace DotNetCore.CAP.MySql
{
var fourMinsAgo = DateTime.Now.AddMinutes(-4).ToString("O");
var sql =
$"SELECT * FROM `{_prefix}.published` WHERE `Retries`<{_capOptions.FailedRetryCount} AND `Added`<'{fourMinsAgo}' AND (`StatusName` = '{StatusName.Failed}' OR `StatusName` = '{StatusName.Scheduled}') LIMIT 200;";
$"SELECT * FROM `{_prefix}.published` WHERE `Retries`<{_capOptions.FailedRetryCount} AND `Version`='{_capOptions.Version}' AND `Added`<'{fourMinsAgo}' AND (`StatusName` = '{StatusName.Failed}' OR `StatusName` = '{StatusName.Scheduled}') LIMIT 200;";

using (var connection = new MySqlConnection(Options.ConnectionString))
{
@@ -60,8 +60,8 @@ namespace DotNetCore.CAP.MySql
}

var sql = $@"
INSERT INTO `{_prefix}.received`(`Id`,`Name`,`Group`,`Content`,`Retries`,`Added`,`ExpiresAt`,`StatusName`)
VALUES(@Id,@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
INSERT INTO `{_prefix}.received`(`Id`,`Version`,`Name`,`Group`,`Content`,`Retries`,`Added`,`ExpiresAt`,`StatusName`)
VALUES(@Id,'{_capOptions.Version}',@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";

using (var connection = new MySqlConnection(Options.ConnectionString))
{
@@ -82,7 +82,7 @@ VALUES(@Id,@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
{
var fourMinsAgo = DateTime.Now.AddMinutes(-4).ToString("O");
var sql =
$"SELECT * FROM `{_prefix}.received` WHERE `Retries`<{_capOptions.FailedRetryCount} AND `Added`<'{fourMinsAgo}' AND (`StatusName` = '{StatusName.Failed}' OR `StatusName` = '{StatusName.Scheduled}') LIMIT 200;";
$"SELECT * FROM `{_prefix}.received` WHERE `Retries`<{_capOptions.FailedRetryCount} AND `Version`='{_capOptions.Version}' AND `Added`<'{fourMinsAgo}' AND (`StatusName` = '{StatusName.Failed}' OR `StatusName` = '{StatusName.Scheduled}') LIMIT 200;";
using (var connection = new MySqlConnection(Options.ConnectionString))
{
return await connection.QueryAsync<CapReceivedMessage>(sql);


+ 5
- 0
src/DotNetCore.CAP.PostgreSql/CAP.EFOptions.cs ファイルの表示

@@ -17,5 +17,10 @@ namespace DotNetCore.CAP
public string Schema { get; set; } = DefaultSchema;

internal Type DbContextType { get; set; }

/// <summary>
/// Data version
/// </summary>
internal string Version { get; set; }
}
}

+ 3
- 0
src/DotNetCore.CAP.PostgreSql/CAP.Options.Extensions.cs ファイルの表示

@@ -22,6 +22,8 @@ namespace Microsoft.Extensions.DependencyInjection
throw new ArgumentNullException(nameof(configure));
}

configure += x => x.Version = options.Version;

options.RegisterExtension(new PostgreSqlCapOptionsExtension(configure));

return options;
@@ -44,6 +46,7 @@ namespace Microsoft.Extensions.DependencyInjection
options.RegisterExtension(new PostgreSqlCapOptionsExtension(x =>
{
configure(x);
x.Version = options.Version;
x.DbContextType = typeof(TContext);
}));



+ 2
- 2
src/DotNetCore.CAP.PostgreSql/DotNetCore.CAP.PostgreSql.csproj ファイルの表示

@@ -13,8 +13,8 @@
<ItemGroup>
<PackageReference Include="Dapper" Version="1.50.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.2.0" />
<PackageReference Include="Npgsql" Version="4.0.3" />
</ItemGroup>



+ 1
- 1
src/DotNetCore.CAP.PostgreSql/ICapPublisher.PostgreSql.cs ファイルの表示

@@ -55,7 +55,7 @@ namespace DotNetCore.CAP.PostgreSql
private string PrepareSql()
{
return
$"INSERT INTO \"{_options.Schema}\".\"published\" (\"Id\",\"Name\",\"Content\",\"Retries\",\"Added\",\"ExpiresAt\",\"StatusName\")VALUES(@Id,@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
$"INSERT INTO \"{_options.Schema}\".\"published\" (\"Id\",\"Version\",\"Name\",\"Content\",\"Retries\",\"Added\",\"ExpiresAt\",\"StatusName\")VALUES(@Id,@Version,@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
}

private IDbConnection InitDbConnection()


+ 7
- 1
src/DotNetCore.CAP.PostgreSql/IStorage.PostgreSql.cs ファイルの表示

@@ -102,6 +102,7 @@ CREATE SCHEMA IF NOT EXISTS ""{schema}"";

CREATE TABLE IF NOT EXISTS ""{schema}"".""received""(
""Id"" BIGINT PRIMARY KEY NOT NULL,
""Version"" VARCHAR(20) NOT NULL,
""Name"" VARCHAR(200) NOT NULL,
""Group"" VARCHAR(200) NULL,
""Content"" TEXT NULL,
@@ -113,13 +114,18 @@ CREATE TABLE IF NOT EXISTS ""{schema}"".""received""(

CREATE TABLE IF NOT EXISTS ""{schema}"".""published""(
""Id"" BIGINT PRIMARY KEY NOT NULL,
""Version"" VARCHAR(20) NOT NULL,
""Name"" VARCHAR(200) NOT NULL,
""Content"" TEXT NULL,
""Retries"" INT NOT NULL,
""Added"" TIMESTAMP NOT NULL,
""ExpiresAt"" TIMESTAMP NULL,
""StatusName"" VARCHAR(50) NOT NULL
);";
);

ALTER TABLE ""{schema}"".""received"" ADD COLUMN IF NOT EXISTS ""Version"" VARCHAR(20) NOT NULL;
ALTER TABLE ""{schema}"".""published"" ADD COLUMN IF NOT EXISTS ""Version"" VARCHAR(20) NOT NULL;
";
return batchSql;
}
}

+ 3
- 7
src/DotNetCore.CAP.PostgreSql/IStorageConnection.PostgreSql.cs ファイルの表示

@@ -42,7 +42,7 @@ namespace DotNetCore.CAP.PostgreSql
{
var fourMinsAgo = DateTime.Now.AddMinutes(-4).ToString("O");
var sql =
$"SELECT * FROM \"{Options.Schema}\".\"published\" WHERE \"Retries\"<{_capOptions.FailedRetryCount} AND \"Added\"<'{fourMinsAgo}' AND (\"StatusName\"='{StatusName.Failed}' OR \"StatusName\"='{StatusName.Scheduled}') LIMIT 200;";
$"SELECT * FROM \"{Options.Schema}\".\"published\" WHERE \"Retries\"<{_capOptions.FailedRetryCount} AND \"Version\"='{_capOptions.Version}' AND \"Added\"<'{fourMinsAgo}' AND (\"StatusName\"='{StatusName.Failed}' OR \"StatusName\"='{StatusName.Scheduled}') LIMIT 200;";

using (var connection = new NpgsqlConnection(Options.ConnectionString))
{
@@ -58,7 +58,7 @@ namespace DotNetCore.CAP.PostgreSql
}

var sql =
$"INSERT INTO \"{Options.Schema}\".\"received\"(\"Id\",\"Name\",\"Group\",\"Content\",\"Retries\",\"Added\",\"ExpiresAt\",\"StatusName\")VALUES(@Id,@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName) RETURNING \"Id\";";
$"INSERT INTO \"{Options.Schema}\".\"received\"(\"Id\",\"Version\",\"Name\",\"Group\",\"Content\",\"Retries\",\"Added\",\"ExpiresAt\",\"StatusName\")VALUES(@Id,'{_capOptions.Version}',@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName) RETURNING \"Id\";";

using (var connection = new NpgsqlConnection(Options.ConnectionString))
{
@@ -79,7 +79,7 @@ namespace DotNetCore.CAP.PostgreSql
{
var fourMinsAgo = DateTime.Now.AddMinutes(-4).ToString("O");
var sql =
$"SELECT * FROM \"{Options.Schema}\".\"received\" WHERE \"Retries\"<{_capOptions.FailedRetryCount} AND \"Added\"<'{fourMinsAgo}' AND (\"StatusName\"='{StatusName.Failed}' OR \"StatusName\"='{StatusName.Scheduled}') LIMIT 200;";
$"SELECT * FROM \"{Options.Schema}\".\"received\" WHERE \"Retries\"<{_capOptions.FailedRetryCount} AND \"Version\"='{_capOptions.Version}' AND \"Added\"<'{fourMinsAgo}' AND (\"StatusName\"='{StatusName.Failed}' OR \"StatusName\"='{StatusName.Scheduled}') LIMIT 200;";
using (var connection = new NpgsqlConnection(Options.ConnectionString))
{
return await connection.QueryAsync<CapReceivedMessage>(sql);
@@ -107,9 +107,5 @@ namespace DotNetCore.CAP.PostgreSql
return connection.Execute(sql) > 0;
}
}

public void Dispose()
{
}
}
}

+ 13
- 4
src/DotNetCore.CAP.RabbitMQ/IConnectionChannelPool.Default.cs ファイルの表示

@@ -22,7 +22,9 @@ namespace DotNetCore.CAP.RabbitMQ
private int _count;
private int _maxSize;

public ConnectionChannelPool(ILogger<ConnectionChannelPool> logger, RabbitMQOptions options)
public ConnectionChannelPool(ILogger<ConnectionChannelPool> logger,
CapOptions capOptions,
RabbitMQOptions options)
{
_logger = logger;
_maxSize = DefaultPoolSize;
@@ -30,10 +32,17 @@ namespace DotNetCore.CAP.RabbitMQ
_connectionActivator = CreateConnection(options);

HostAddress = options.HostName + ":" + options.Port;
Exchange = options.ExchangeName;

_logger.LogDebug("RabbitMQ configuration of CAP :\r\n {0}",
JsonConvert.SerializeObject(options, Formatting.Indented));
if (CapOptions.DefaultVersion == capOptions.Version)
{
Exchange = options.ExchangeName;
}
else
{
Exchange = options.ExchangeName + "." + capOptions.Version;
}

_logger.LogDebug("RabbitMQ configuration of CAP :\r\n {0}", JsonConvert.SerializeObject(options, Formatting.Indented));
}

IModel IConnectionChannelPool.Rent()


+ 7
- 1
src/DotNetCore.CAP.RabbitMQ/IPublishMessageSender.RabbitMQ.cs ファイルの表示

@@ -8,6 +8,7 @@ using DotNetCore.CAP.Internal;
using DotNetCore.CAP.Processor.States;
using Microsoft.Extensions.Logging;
using RabbitMQ.Client;
using RabbitMQ.Client.Framing;

namespace DotNetCore.CAP.RabbitMQ
{
@@ -33,8 +34,13 @@ namespace DotNetCore.CAP.RabbitMQ
try
{
var body = Encoding.UTF8.GetBytes(content);
var props = new BasicProperties()
{
DeliveryMode = 2
};

channel.ExchangeDeclare(_exchange, RabbitMQOptions.ExchangeType, true);
channel.BasicPublish(_exchange, keyName, null, body);
channel.BasicPublish(_exchange, keyName, props, body);

_logger.LogDebug($"RabbitMQ topic message [{keyName}] has been published.");



+ 1
- 1
src/DotNetCore.CAP.RabbitMQ/RabbitMQConsumerClient.cs ファイルの表示

@@ -28,7 +28,7 @@ namespace DotNetCore.CAP.RabbitMQ
_queueName = queueName;
_connectionChannelPool = connectionChannelPool;
_rabbitMQOptions = options;
_exchageName = options.ExchangeName;
_exchageName = connectionChannelPool.Exchange;

InitClient();
}


+ 5
- 0
src/DotNetCore.CAP.SqlServer/CAP.EFOptions.cs ファイルの表示

@@ -23,6 +23,11 @@ namespace DotNetCore.CAP

internal bool IsSqlServer2008 { get; set; }

/// <summary>
/// Data version
/// </summary>
internal string Version { get; set; }

public EFOptions UseSqlServer2008()
{
IsSqlServer2008 = true;


+ 3
- 0
src/DotNetCore.CAP.SqlServer/CAP.Options.Extensions.cs ファイルの表示

@@ -22,6 +22,8 @@ namespace Microsoft.Extensions.DependencyInjection
throw new ArgumentNullException(nameof(configure));
}

configure += x => x.Version = options.Version;

options.RegisterExtension(new SqlServerCapOptionsExtension(configure));

return options;
@@ -44,6 +46,7 @@ namespace Microsoft.Extensions.DependencyInjection
options.RegisterExtension(new SqlServerCapOptionsExtension(x =>
{
configure(x);
x.Version = options.Version;
x.DbContextType = typeof(TContext);
}));



+ 3
- 3
src/DotNetCore.CAP.SqlServer/DotNetCore.CAP.SqlServer.csproj ファイルの表示

@@ -14,9 +14,9 @@
<ItemGroup>
<PackageReference Include="Dapper" Version="1.50.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.1.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.5.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.2.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.6.0" />
</ItemGroup>

<ItemGroup>


+ 1
- 1
src/DotNetCore.CAP.SqlServer/ICapPublisher.SqlServer.cs ファイルの表示

@@ -55,7 +55,7 @@ namespace DotNetCore.CAP.SqlServer
private string PrepareSql()
{
return
$"INSERT INTO {_options.Schema}.[Published] ([Id],[Name],[Content],[Retries],[Added],[ExpiresAt],[StatusName])VALUES(@Id,@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
$"INSERT INTO {_options.Schema}.[Published] ([Id],[Version],[Name],[Content],[Retries],[Added],[ExpiresAt],[StatusName])VALUES(@Id,'{_options.Version}',@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
}

#endregion private methods


+ 2
- 0
src/DotNetCore.CAP.SqlServer/IStorage.SqlServer.cs ファイルの表示

@@ -75,6 +75,7 @@ IF OBJECT_ID(N'[{schema}].[Received]',N'U') IS NULL
BEGIN
CREATE TABLE [{schema}].[Received](
[Id] [bigint] NOT NULL,
[Version] [nvarchar](20) NOT NULL,
[Name] [nvarchar](200) NOT NULL,
[Group] [nvarchar](200) NULL,
[Content] [nvarchar](max) NULL,
@@ -93,6 +94,7 @@ IF OBJECT_ID(N'[{schema}].[Published]',N'U') IS NULL
BEGIN
CREATE TABLE [{schema}].[Published](
[Id] [bigint] NOT NULL,
[Version] [nvarchar](20) NOT NULL,
[Name] [nvarchar](200) NOT NULL,
[Content] [nvarchar](max) NULL,
[Retries] [int] NOT NULL,


+ 4
- 4
src/DotNetCore.CAP.SqlServer/IStorageConnection.SqlServer.cs ファイルの表示

@@ -42,7 +42,7 @@ namespace DotNetCore.CAP.SqlServer
{
var fourMinsAgo = DateTime.Now.AddMinutes(-4).ToString("O");
var sql =
$"SELECT TOP (200) * FROM [{Options.Schema}].[Published] WITH (readpast) WHERE Retries<{_capOptions.FailedRetryCount} AND Added<'{fourMinsAgo}' AND (StatusName = '{StatusName.Failed}' OR StatusName = '{StatusName.Scheduled}')";
$"SELECT TOP (200) * FROM [{Options.Schema}].[Published] WITH (readpast) WHERE Retries<{_capOptions.FailedRetryCount} AND Version='{_capOptions.Version}' AND Added<'{fourMinsAgo}' AND (StatusName = '{StatusName.Failed}' OR StatusName = '{StatusName.Scheduled}')";

using (var connection = new SqlConnection(Options.ConnectionString))
{
@@ -58,8 +58,8 @@ namespace DotNetCore.CAP.SqlServer
}

var sql = $@"
INSERT INTO [{Options.Schema}].[Received]([Id],[Name],[Group],[Content],[Retries],[Added],[ExpiresAt],[StatusName])
VALUES(@Id,@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
INSERT INTO [{Options.Schema}].[Received]([Id],[Version],[Name],[Group],[Content],[Retries],[Added],[ExpiresAt],[StatusName])
VALUES(@Id,'{_capOptions.Version}',@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";

using (var connection = new SqlConnection(Options.ConnectionString))
{
@@ -80,7 +80,7 @@ VALUES(@Id,@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
{
var fourMinsAgo = DateTime.Now.AddMinutes(-4).ToString("O");
var sql =
$"SELECT TOP (200) * FROM [{Options.Schema}].[Received] WITH (readpast) WHERE Retries<{_capOptions.FailedRetryCount} AND Added<'{fourMinsAgo}' AND (StatusName = '{StatusName.Failed}' OR StatusName = '{StatusName.Scheduled}')";
$"SELECT TOP (200) * FROM [{Options.Schema}].[Received] WITH (readpast) WHERE Retries<{_capOptions.FailedRetryCount} AND Version='{_capOptions.Version}' AND Added<'{fourMinsAgo}' AND (StatusName = '{StatusName.Failed}' OR StatusName = '{StatusName.Scheduled}')";
using (var connection = new SqlConnection(Options.ConnectionString))
{
return await connection.QueryAsync<CapReceivedMessage>(sql);


+ 11
- 0
src/DotNetCore.CAP/CAP.Options.cs ファイルの表示

@@ -28,6 +28,11 @@ namespace DotNetCore.CAP
/// </summary>
public const int DefaultFailedRetryCount = 50;

/// <summary>
/// Default version
/// </summary>
public const string DefaultVersion = "v1";


public CapOptions()
{
@@ -35,6 +40,7 @@ namespace DotNetCore.CAP
FailedRetryInterval = DefaultFailedMessageWaitingInterval;
FailedRetryCount = DefaultFailedRetryCount;
Extensions = new List<ICapOptionsExtension>();
Version = DefaultVersion;
DefaultGroup = "cap.queue." + Assembly.GetEntryAssembly().GetName().Name.ToLower();
}

@@ -45,6 +51,11 @@ namespace DotNetCore.CAP
/// </summary>
public string DefaultGroup { get; set; }

/// <summary>
/// The default version of the message, configured to isolate data in the same instance. The length must not exceed 20
/// </summary>
public string Version { get; set; }

/// <summary>
/// Sent or received succeed message after time span of due, then the message will be deleted at due time.
/// Default is 24*3600 seconds.


+ 9
- 72
src/DotNetCore.CAP/Dashboard/Content/resx/Strings.Designer.cs ファイルの表示

@@ -185,6 +185,15 @@ namespace DotNetCore.CAP.Dashboard.Resources {
return ResourceManager.GetString("Common_Id", resourceCulture);
}
}

/// <summary>
/// Looks up a localized string similar to Version.
/// </summary>
public static string Common_Version {
get {
return ResourceManager.GetString("Common_Version", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Less details....
@@ -321,24 +330,6 @@ namespace DotNetCore.CAP.Dashboard.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to The queue is empty..
/// </summary>
public static string EnqueuedJobsPage_NoJobs {
get {
return ResourceManager.GetString("EnqueuedJobsPage_NoJobs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueued jobs.
/// </summary>
public static string EnqueuedJobsPage_Title {
get {
return ResourceManager.GetString("EnqueuedJobsPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Publish Failed.
/// </summary>
@@ -816,60 +807,6 @@ namespace DotNetCore.CAP.Dashboard.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Heartbeat.
/// </summary>
public static string ServersPage_Table_Heartbeat {
get {
return ResourceManager.GetString("ServersPage_Table_Heartbeat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Name.
/// </summary>
public static string ServersPage_Table_Name {
get {
return ResourceManager.GetString("ServersPage_Table_Name", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Queues.
/// </summary>
public static string ServersPage_Table_Queues {
get {
return ResourceManager.GetString("ServersPage_Table_Queues", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Started.
/// </summary>
public static string ServersPage_Table_Started {
get {
return ResourceManager.GetString("ServersPage_Table_Started", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Workers.
/// </summary>
public static string ServersPage_Table_Workers {
get {
return ResourceManager.GetString("ServersPage_Table_Workers", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Servers.
/// </summary>
public static string ServersPage_Title {
get {
return ResourceManager.GetString("ServersPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed.
/// </summary>


+ 6
- 36
src/DotNetCore.CAP/Dashboard/Content/resx/Strings.resx ファイルの表示

@@ -123,18 +123,12 @@
<data name="Common_Delete" xml:space="preserve">
<value>Delete</value>
</data>
<data name="Common_DeleteConfirm" xml:space="preserve">
<value>Do you really want to DELETE ALL selected jobs?</value>
</data>
<data name="Common_Deleting" xml:space="preserve">
<value>Deleting...</value>
</data>
<data name="Common_DeleteSelected" xml:space="preserve">
<value>Delete selected</value>
</data>
<data name="Common_EnqueueButton_Text" xml:space="preserve">
<value>Enqueue jobs</value>
</data>
<data name="Common_Enqueueing" xml:space="preserve">
<value>Enqueueing...</value>
</data>
@@ -144,6 +138,9 @@
<data name="Common_Id" xml:space="preserve">
<value>Id</value>
</data>
<data name="Common_Version" xml:space="preserve">
<value>Version</value>
</data>
<data name="Common_LessDetails" xml:space="preserve">
<value>Less details...</value>
</data>
@@ -177,12 +174,6 @@
<data name="Common_Unknown" xml:space="preserve">
<value>Unknown</value>
</data>
<data name="EnqueuedJobsPage_NoJobs" xml:space="preserve">
<value>The queue is empty.</value>
</data>
<data name="EnqueuedJobsPage_Title" xml:space="preserve">
<value>Enqueued jobs</value>
</data>
<data name="HomePage_HistoryGraph" xml:space="preserve">
<value>24h graph</value>
</data>
@@ -215,25 +206,7 @@
</data>
<data name="NodePage_NoNodes" xml:space="preserve">
<value>There are no config distributed node discory. </value>
</data>
<data name="ServersPage_Table_Heartbeat" xml:space="preserve">
<value>Heartbeat</value>
</data>
<data name="ServersPage_Table_Name" xml:space="preserve">
<value>Name</value>
</data>
<data name="ServersPage_Table_Queues" xml:space="preserve">
<value>Queues</value>
</data>
<data name="ServersPage_Table_Started" xml:space="preserve">
<value>Started</value>
</data>
<data name="ServersPage_Table_Workers" xml:space="preserve">
<value>Workers</value>
</data>
<data name="ServersPage_Title" xml:space="preserve">
<value>Servers</value>
</data>
</data>
<data name="PublishedMessagesPage_Title" xml:space="preserve">
<value>Published Messages</value>
</data>
@@ -267,9 +240,6 @@
<data name="Metrics_ActiveConnections" xml:space="preserve">
<value>Active Connections</value>
</data>
<data name="Metrics_DeletedJobs" xml:space="preserve">
<value>Deleted Jobs</value>
</data>
<data name="Metrics_Retries" xml:space="preserve">
<value>Retries</value>
</data>
@@ -295,7 +265,7 @@
<value>Enqueued / Queues</value>
</data>
<data name="Metrics_FailedCountOrNull" xml:space="preserve">
<value>{0} failed job(s) found. Retry or delete them manually.</value>
<value>{0} failed message(s) found. </value>
</data>
<data name="HomePage_GraphHover_PFailed" xml:space="preserve">
<value>Publish Failed</value>
@@ -340,7 +310,7 @@
<value>No messages found.</value>
</data>
<data name="PublishedPage_Title" xml:space="preserve">
<value>Published Jobs</value>
<value>Published messages</value>
</data>
<data name="MessagesPage_Query_MessageGroup" xml:space="preserve">
<value>Message group</value>


+ 5
- 26
src/DotNetCore.CAP/Dashboard/Content/resx/Strings.zh.resx ファイルの表示

@@ -144,6 +144,9 @@
<data name="Common_Id" xml:space="preserve">
<value>编号</value>
</data>
<data name="Common_Version" xml:space="preserve">
<value>版本</value>
</data>
<data name="Common_LessDetails" xml:space="preserve">
<value>收起...</value>
</data>
@@ -174,12 +177,6 @@
<data name="Common_Unknown" xml:space="preserve">
<value>未知</value>
</data>
<data name="EnqueuedJobsPage_NoJobs" xml:space="preserve">
<value>没有任何作业</value>
</data>
<data name="EnqueuedJobsPage_Title" xml:space="preserve">
<value>队列作业</value>
</data>
<data name="HomePage_HistoryGraph" xml:space="preserve">
<value>当日走势</value>
</data>
@@ -209,25 +206,7 @@
</data>
<data name="PerPageSelector_ItemsPerPage" xml:space="preserve">
<value>每页条数</value>
</data>
<data name="ServersPage_Table_Heartbeat" xml:space="preserve">
<value>心跳</value>
</data>
<data name="ServersPage_Table_Name" xml:space="preserve">
<value>名称</value>
</data>
<data name="ServersPage_Table_Queues" xml:space="preserve">
<value>队列</value>
</data>
<data name="ServersPage_Table_Started" xml:space="preserve">
<value>执行</value>
</data>
<data name="ServersPage_Table_Workers" xml:space="preserve">
<value>工作区</value>
</data>
<data name="ServersPage_Title" xml:space="preserve">
<value>服务器</value>
</data>
</data>
<data name="PublishedMessagesPage_Title" xml:space="preserve">
<value>发送出的消息</value>
</data>
@@ -271,7 +250,7 @@
<value>队列</value>
</data>
<data name="Metrics_FailedCountOrNull" xml:space="preserve">
<value>{0} failed job(s) found. Retry or delete them manually.</value>
<value>发现了 {0} 个失败的消息</value>
</data>
<data name="HomePage_GraphHover_PFailed" xml:space="preserve">
<value>发送失败</value>


+ 7
- 1
src/DotNetCore.CAP/Dashboard/JsonDispatcher.cs ファイルの表示

@@ -34,7 +34,13 @@ namespace DotNetCore.CAP.Dashboard
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter[] {new StringEnumConverter {CamelCaseText = true}}
Converters = new JsonConverter[]
{
new StringEnumConverter
{
NamingStrategy = new CamelCaseNamingStrategy()
}
}
};
serialized = JsonConvert.SerializeObject(result, settings);
}


+ 7
- 1
src/DotNetCore.CAP/Dashboard/JsonStats.cs ファイルの表示

@@ -30,7 +30,13 @@ namespace DotNetCore.CAP.Dashboard
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter[] {new StringEnumConverter {CamelCaseText = true}}
Converters = new JsonConverter[]
{
new StringEnumConverter
{
NamingStrategy = new CamelCaseNamingStrategy()
}
}
};
var serialized = JsonConvert.SerializeObject(result, settings);



+ 2
- 0
src/DotNetCore.CAP/Dashboard/Monitoring/MessageDto.cs ファイルの表示

@@ -9,6 +9,8 @@ namespace DotNetCore.CAP.Dashboard.Monitoring
{
public long Id { get; set; }

public string Version { get; set; }

public string Group { get; set; }

public string Name { get; set; }


+ 6
- 2
src/DotNetCore.CAP/Dashboard/Pages/PublishedPage.cshtml ファイルの表示

@@ -80,7 +80,8 @@
<th style="width: 60px;">
<input type="checkbox" class="js-jobs-list-select-all"/>
</th>
<th>@Strings.MessagesPage_Table_Code</th>
<th>@Strings.Common_Id</th>
<th>@Strings.Common_Version</th>
<th>@Strings.MessagesPage_Table_Name</th>
<th class="min-width">@Strings.MessagesPage_Table_Retries</th>
@if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
@@ -95,11 +96,14 @@
{
<tr class="js-jobs-list-row hover">
<td>
<input type="checkbox" class="js-jobs-list-checkbox" name="messages[]" value="@message.Id"/>
<input type="checkbox" class="js-jobs-list-checkbox" name="messages[]" value="@message.Id" />
</td>
<td class="word-break">
<a href="javascript:;" data-url='@(Url.To("/published/message/") + message.Id)' class="openModal">#@message.Id</a>
</td>
<td>
@message.Version
</td>
<td>
@message.Name
</td>


+ 15
- 2
src/DotNetCore.CAP/Dashboard/Pages/PublishedPage.generated.cs ファイルの表示

@@ -267,19 +267,25 @@ namespace DotNetCore.CAP.Dashboard.Pages
<th style=""width:60px;"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th>");
<th style=""width:22%;"">");



#line 83 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_Code);
Write(Strings.Common_Id);


#line default
#line hidden
WriteLiteral("</th>\r\n <th>");

#line 84 "..\..\PublishedPage.cshtml"
Write(Strings.Common_Version);


#line default
#line hidden
WriteLiteral("</th>\r\n <th>");

#line 84 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_Name);
@@ -387,7 +393,14 @@ namespace DotNetCore.CAP.Dashboard.Pages
" ");


#line 102 "..\..\PublishedPage.cshtml"
Write(message.Version);


#line default
#line hidden
WriteLiteral("</a>\r\n </td>\r\n <td>\r\n " +
" ");
#line 104 "..\..\PublishedPage.cshtml"
Write(message.Name);



+ 5
- 1
src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.cshtml ファイルの表示

@@ -85,7 +85,8 @@
<th style="width: 60px;">
<input type="checkbox" class="js-jobs-list-select-all"/>
</th>
<th>@Strings.MessagesPage_Table_Code</th>
<th>@Strings.Common_Id</th>
<th>@Strings.Common_Version</th>
<th>@Strings.MessagesPage_Table_Group</th>
<th>@Strings.MessagesPage_Table_Name</th>
<th class="min-width">@Strings.MessagesPage_Table_Retries</th>
@@ -106,6 +107,9 @@
<td class="word-break">
<a href="javascript:;" data-url='@(Url.To("/received/message/") + message.Id)' class="openModal">#@message.Id</a>
</td>
<td>
@message.Version
</td>
<td>
@message.Group
</td>


+ 18
- 1
src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.generated.cs ファイルの表示

@@ -297,7 +297,15 @@ namespace DotNetCore.CAP.Dashboard.Pages


#line 88 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_Code);
Write(Strings.Common_Id);


#line default
#line hidden
WriteLiteral("</th>\r\n <th>");

#line 88 "..\..\ReceivedPage.cshtml"
Write(Strings.Common_Version);


#line default
@@ -424,6 +432,15 @@ namespace DotNetCore.CAP.Dashboard.Pages



#line 111 "..\..\ReceivedPage.cshtml"
Write(message.Version);

#line default
#line hidden
WriteLiteral("\r\n </td>\r\n " +
"<td>\r\n ");


#line 110 "..\..\ReceivedPage.cshtml"
Write(message.Group);



+ 6
- 6
src/DotNetCore.CAP/DotNetCore.CAP.csproj ファイルの表示

@@ -32,12 +32,12 @@
<ItemGroup>
<PackageReference Include="Consul" Version="0.7.2.6" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="4.5.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.2.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="4.5.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
</ItemGroup>
<ItemGroup>


+ 3
- 0
src/DotNetCore.CAP/ISubscriberExecutor.cs ファイルの表示

@@ -6,6 +6,9 @@ using DotNetCore.CAP.Models;

namespace DotNetCore.CAP
{
/// <summary>
/// Consumer execotor
/// </summary>
public interface ISubscriberExecutor
{
Task<OperateResult> ExecuteAsync(CapReceivedMessage message);


+ 34
- 18
src/DotNetCore.CAP/Internal/IConsumerServiceSelector.Default.cs ファイルの表示

@@ -9,6 +9,7 @@ using System.Text.RegularExpressions;
using DotNetCore.CAP.Abstractions;
using DotNetCore.CAP.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using System.Collections.Concurrent;

namespace DotNetCore.CAP.Internal
{
@@ -20,8 +21,12 @@ namespace DotNetCore.CAP.Internal
{
private readonly CapOptions _capOptions;
private readonly IServiceProvider _serviceProvider;
private List<RegexExecuteDescriptor<ConsumerExecutorDescriptor>> _asteriskList;
private List<RegexExecuteDescriptor<ConsumerExecutorDescriptor>> _poundList;

/// <summary>
/// since this class be designed as a Singleton service,the following two list must be thread safe!!!
/// </summary>
private readonly ConcurrentDictionary<string, List<RegexExecuteDescriptor<ConsumerExecutorDescriptor>>> _asteriskList;
private readonly ConcurrentDictionary<string, List<RegexExecuteDescriptor<ConsumerExecutorDescriptor>>> _poundList;

/// <summary>
/// Creates a new <see cref="DefaultConsumerServiceSelector" />.
@@ -30,6 +35,9 @@ namespace DotNetCore.CAP.Internal
{
_serviceProvider = serviceProvider;
_capOptions = capOptions;

_asteriskList = new ConcurrentDictionary<string, List<RegexExecuteDescriptor<ConsumerExecutorDescriptor>>>();
_poundList = new ConcurrentDictionary<string, List<RegexExecuteDescriptor<ConsumerExecutorDescriptor>>>();
}

public IReadOnlyList<ConsumerExecutorDescriptor> SelectCandidates()
@@ -120,7 +128,11 @@ namespace DotNetCore.CAP.Internal
{
if (attr.Group == null)
{
attr.Group = _capOptions.DefaultGroup;
attr.Group = _capOptions.DefaultGroup + "." + _capOptions.Version;
}
else
{
attr.Group = attr.Group + "." + _capOptions.Version;
}

yield return InitDescriptor(attr, method, typeInfo);
@@ -150,17 +162,19 @@ namespace DotNetCore.CAP.Internal

private ConsumerExecutorDescriptor MatchAsteriskUsingRegex(string key, IReadOnlyList<ConsumerExecutorDescriptor> executeDescriptor)
{
if (_asteriskList == null)
var group = executeDescriptor.First().Attribute.Group;
if (!_asteriskList.TryGetValue(group, out var tmpList))
{
_asteriskList = executeDescriptor
.Where(x => x.Attribute.Name.IndexOf('*') >= 0)
tmpList = executeDescriptor.Where(x => x.Attribute.Name.IndexOf('*') >= 0)
.Select(x => new RegexExecuteDescriptor<ConsumerExecutorDescriptor>
{
Name = ("^" + x.Attribute.Name + "$").Replace("*", "[a-zA-Z]+").Replace(".", "\\."),
Descriptor = x
}).ToList();
{
Name = ("^" + x.Attribute.Name + "$").Replace("*", "[0-9_a-zA-Z]+").Replace(".", "\\."),
Descriptor = x
}).ToList();
_asteriskList.TryAdd(group, tmpList);
}
foreach (var red in _asteriskList)

foreach (var red in tmpList)
{
if (Regex.IsMatch(key, red.Name, RegexOptions.Singleline))
{
@@ -173,18 +187,20 @@ namespace DotNetCore.CAP.Internal

private ConsumerExecutorDescriptor MatchPoundUsingRegex(string key, IReadOnlyList<ConsumerExecutorDescriptor> executeDescriptor)
{
if (_poundList == null)
var group = executeDescriptor.First().Attribute.Group;
if (!_poundList.TryGetValue(group, out var tmpList))
{
_poundList = executeDescriptor
tmpList = executeDescriptor
.Where(x => x.Attribute.Name.IndexOf('#') >= 0)
.Select(x => new RegexExecuteDescriptor<ConsumerExecutorDescriptor>
{
Name = ("^" + x.Attribute.Name + "$").Replace("#", "[a-zA-Z\\.]+"),
Descriptor = x
}).ToList();
{
Name = ("^" + x.Attribute.Name + "$").Replace("#", "[0-9_a-zA-Z\\.]+"),
Descriptor = x
}).ToList();
_poundList.TryAdd(group, tmpList);
}

foreach (var red in _poundList)
foreach (var red in tmpList)
{
if (Regex.IsMatch(key, red.Name, RegexOptions.Singleline))
{


+ 6
- 6
test/DotNetCore.CAP.MongoDB.Test/DotNetCore.CAP.MongoDB.Test.csproj ファイルの表示

@@ -6,13 +6,13 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.0" />
<PackageReference Include="FluentAssertions" Version="5.4.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
<PackageReference Include="FluentAssertions" Version="5.5.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0">
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>


+ 5
- 3
test/DotNetCore.CAP.MongoDB.Test/MongoDBMonitoringApiTest.cs ファイルの表示

@@ -17,21 +17,23 @@ namespace DotNetCore.CAP.MongoDB.Test
{
_api = new MongoDBMonitoringApi(MongoClient, MongoDBOptions);

var collection = Database.GetCollection<CapPublishedMessage>(MongoDBOptions.PublishedCollection);
var collection = Database.GetCollection<PublishedMessage>(MongoDBOptions.PublishedCollection);
collection.InsertMany(new[]
{
new CapPublishedMessage
new PublishedMessage
{
Id = SnowflakeId.Default().NextId(),
Added = DateTime.Now.AddHours(-1),
StatusName = "Failed",
Version = "v1",
Content = "abc"
},
new CapPublishedMessage
new PublishedMessage
{
Id = SnowflakeId.Default().NextId(),
Added = DateTime.Now,
StatusName = "Failed",
Version = "v1",
Content = "bbc"
}
});


+ 9
- 5
test/DotNetCore.CAP.MongoDB.Test/MongoDBStorageConnectionTest.cs ファイルの表示

@@ -24,9 +24,13 @@ namespace DotNetCore.CAP.MongoDB.Test
Content = "test-content"
};

_connection.StoreReceivedMessage(new CapReceivedMessage(messageContext)
_connection.StoreReceivedMessage(new ReceivedMessage()
{
Id = SnowflakeId.Default().NextId()
Id = SnowflakeId.Default().NextId(),
Group=messageContext.Group,
Content=messageContext.Content,
Name=messageContext.Name,
Version="v1"
});
}

@@ -34,7 +38,7 @@ namespace DotNetCore.CAP.MongoDB.Test
public void ChangeReceivedState_Test()
{
StoreReceivedMessageAsync_TestAsync();
var collection = Database.GetCollection<CapReceivedMessage>(MongoDBOptions.ReceivedCollection);
var collection = Database.GetCollection<ReceivedMessage>(MongoDBOptions.ReceivedCollection);

var msg = collection.Find(x => true).FirstOrDefault();
_connection.ChangeReceivedState(msg.Id, StatusName.Scheduled).Should().BeTrue();
@@ -60,9 +64,9 @@ namespace DotNetCore.CAP.MongoDB.Test
};
_connection.StoreReceivedMessage(msg);

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

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

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


+ 11
- 11
test/DotNetCore.CAP.MySql.Test/DotNetCore.CAP.MySql.Test.csproj ファイルの表示

@@ -13,20 +13,20 @@
<ItemGroup>
<PackageReference Include="Dapper" Version="1.50.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0">
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.0" />
<PackageReference Include="Moq" Version="4.10.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="Moq" Version="4.10.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.0" />
</ItemGroup>
</Project>

+ 3
- 3
test/DotNetCore.CAP.MySql.Test/MySqlStorageConnectionTest.cs ファイルの表示

@@ -22,7 +22,7 @@ namespace DotNetCore.CAP.MySql.Test
[Fact]
public async Task GetPublishedMessageAsync_Test()
{
var sql = "INSERT INTO `cap.published`(`Id`,`Name`,`Content`,`Retries`,`Added`,`ExpiresAt`,`StatusName`) VALUES(@Id,@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
var sql = "INSERT INTO `cap.published`(`Id`,`Version`,`Name`,`Content`,`Retries`,`Added`,`ExpiresAt`,`StatusName`) VALUES(@Id,'v1',@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
var insertedId = SnowflakeId.Default().NextId();
var publishMessage = new CapPublishedMessage
{
@@ -69,8 +69,8 @@ namespace DotNetCore.CAP.MySql.Test
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);";
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
{


+ 2
- 2
test/DotNetCore.CAP.PostgreSql.Test/DotNetCore.CAP.PostgreSql.Test.csproj ファイルの表示

@@ -9,8 +9,8 @@
<PackageReference Include="Dapper" Version="1.50.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="Npgsql" Version="4.0.3" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0">
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>


+ 3
- 3
test/DotNetCore.CAP.PostgreSql.Test/PostgreSqlStorageConnectionTest.cs ファイルの表示

@@ -22,7 +22,7 @@ namespace DotNetCore.CAP.PostgreSql.Test
[Fact]
public async Task GetPublishedMessageAsync_Test()
{
var sql = @"INSERT INTO ""cap"".""published""(""Id"",""Name"",""Content"",""Retries"",""Added"",""ExpiresAt"",""StatusName"") VALUES(@Id,@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
var sql = @"INSERT INTO ""cap"".""published""(""Id"",""Version"",""Name"",""Content"",""Retries"",""Added"",""ExpiresAt"",""StatusName"") VALUES(@Id,'v1',@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
var insertedId = SnowflakeId.Default().NextId();
var publishMessage = new CapPublishedMessage
{
@@ -69,8 +69,8 @@ namespace DotNetCore.CAP.PostgreSql.Test
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);";
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
{


+ 12
- 12
test/DotNetCore.CAP.SqlServer.Test/DotNetCore.CAP.SqlServer.Test.csproj ファイルの表示

@@ -13,21 +13,21 @@
<ItemGroup>
<PackageReference Include="Dapper" Version="1.50.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.5.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0">
<PackageReference Include="System.Data.SqlClient" Version="4.6.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.0" />
<PackageReference Include="Moq" Version="4.10.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="Moq" Version="4.10.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.0" />
</ItemGroup>

</Project>

+ 2
- 2
test/DotNetCore.CAP.SqlServer.Test/SqlServerStorageConnectionTest.cs ファイルの表示

@@ -20,7 +20,7 @@ namespace DotNetCore.CAP.SqlServer.Test
[Fact]
public async Task GetPublishedMessageAsync_Test()
{
var sql = "INSERT INTO [Cap].[Published]([Id],[Name],[Content],[Retries],[Added],[ExpiresAt],[StatusName]) VALUES(@Id,@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
var sql = "INSERT INTO [Cap].[Published]([Id],[Version],[Name],[Content],[Retries],[Added],[ExpiresAt],[StatusName]) VALUES(@Id,'v1',@Name,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
var insertedId = SnowflakeId.Default().NextId();
var publishMessage = new CapPublishedMessage
{
@@ -67,7 +67,7 @@ namespace DotNetCore.CAP.SqlServer.Test
[Fact]
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 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
{


+ 6
- 6
test/DotNetCore.CAP.Test/DotNetCore.CAP.Test.csproj ファイルの表示

@@ -8,15 +8,15 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="System.Data.Common" Version="4.3.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0">
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.0" />
<PackageReference Include="Moq" Version="4.10.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="Moq" Version="4.10.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
</ItemGroup>

<ItemGroup>


読み込み中…
キャンセル
保存