瀏覽代碼

Merge branch 'develop' of https://github.com/dotnetcore/CAP into develop

master
Savorboard 7 年之前
父節點
當前提交
8d564cde41
共有 83 個檔案被更改,包括 1177 行新增1139 行删除
  1. +2
    -2
      src/DotNetCore.CAP.MySql/CapPublisher.cs
  2. +3
    -7
      src/DotNetCore.CAP.MySql/IAdditionalProcessor.Default.cs
  3. +1
    -1
      src/DotNetCore.CAP.MySql/MySqlStorageConnection.cs
  4. +1
    -1
      src/DotNetCore.CAP.MySql/MySqlStorageTransaction.cs
  5. +2
    -2
      src/DotNetCore.CAP.PostgreSql/CapPublisher.cs
  6. +0
    -1
      src/DotNetCore.CAP.PostgreSql/PostgreSqlStorage.cs
  7. +1
    -1
      src/DotNetCore.CAP.PostgreSql/PostgreSqlStorageConnection.cs
  8. +1
    -1
      src/DotNetCore.CAP.PostgreSql/PostgreSqlStorageTransaction.cs
  9. +1
    -3
      src/DotNetCore.CAP.RabbitMQ/CAP.RabbiMQOptions.cs
  10. +1
    -4
      src/DotNetCore.CAP.RabbitMQ/IConnectionPool.cs
  11. +2
    -2
      src/DotNetCore.CAP.RabbitMQ/RabbitMQConsumerClient.cs
  12. +1
    -4
      src/DotNetCore.CAP.RabbitMQ/RabbitMQConsumerClientFactory.cs
  13. +2
    -2
      src/DotNetCore.CAP.SqlServer/CapPublisher.cs
  14. +2
    -6
      src/DotNetCore.CAP.SqlServer/IAdditionalProcessor.Default.cs
  15. +31
    -44
      src/DotNetCore.CAP.SqlServer/SqlServerMonitoringApi.cs
  16. +1
    -1
      src/DotNetCore.CAP.SqlServer/SqlServerStorageConnection.cs
  17. +1
    -1
      src/DotNetCore.CAP.SqlServer/SqlServerStorageTransaction.cs
  18. +1
    -3
      src/DotNetCore.CAP/Abstractions/IConsumerServiceSelector.cs
  19. +1
    -1
      src/DotNetCore.CAP/Abstractions/ModelBinding/ModelBindingResult.cs
  20. +1
    -5
      src/DotNetCore.CAP/Abstractions/TopicAttribute.cs
  21. +2
    -1
      src/DotNetCore.CAP/CAP.AppBuilderExtensions.cs
  22. +1
    -1
      src/DotNetCore.CAP/CAP.Builder.cs
  23. +1
    -1
      src/DotNetCore.CAP/CAP.Options.cs
  24. +1
    -2
      src/DotNetCore.CAP/CAP.ServiceCollectionExtensions.cs
  25. +39
    -39
      src/DotNetCore.CAP/CapCache.cs
  26. +10
    -13
      src/DotNetCore.CAP/Dashboard/CAP.DashboardMiddleware.cs
  27. +2
    -3
      src/DotNetCore.CAP/Dashboard/CAP.DashboardOptions.cs
  28. +3
    -5
      src/DotNetCore.CAP/Dashboard/CAP.DashboardOptionsExtensions.cs
  29. +7
    -3
      src/DotNetCore.CAP/Dashboard/Content/css/cap.css
  30. +2
    -2
      src/DotNetCore.CAP/Dashboard/Content/js/cap.js
  31. +21
    -3
      src/DotNetCore.CAP/Dashboard/Content/resx/Strings.Designer.cs
  32. +8
    -2
      src/DotNetCore.CAP/Dashboard/Content/resx/Strings.resx
  33. +7
    -1
      src/DotNetCore.CAP/Dashboard/Content/resx/Strings.zh.resx
  34. +5
    -6
      src/DotNetCore.CAP/Dashboard/DashboardResponse.cs
  35. +0
    -5
      src/DotNetCore.CAP/Dashboard/DashboardRoutes.cs
  36. +10
    -6
      src/DotNetCore.CAP/Dashboard/EmbeddedResourceDispatcher.cs
  37. +1
    -1
      src/DotNetCore.CAP/Dashboard/GatewayProxy/DownstreamUrl.cs
  38. +4
    -7
      src/DotNetCore.CAP/Dashboard/GatewayProxy/GatewayProxyMiddleware.cs
  39. +1
    -1
      src/DotNetCore.CAP/Dashboard/GatewayProxy/Requester/HttpClientHttpRequester.cs
  40. +3
    -1
      src/DotNetCore.CAP/Dashboard/GatewayProxy/Requester/IHttpClientBuilder.cs
  41. +4
    -8
      src/DotNetCore.CAP/Dashboard/GatewayProxy/Requester/MemoryHttpClientCache.cs
  42. +6
    -25
      src/DotNetCore.CAP/Dashboard/HtmlHelper.cs
  43. +0
    -2
      src/DotNetCore.CAP/Dashboard/JobHistoryRenderer.cs
  44. +0
    -3
      src/DotNetCore.CAP/Dashboard/JsonDispatcher.cs
  45. +1
    -1
      src/DotNetCore.CAP/Dashboard/Pages/BlockMetric.cs
  46. +1
    -1
      src/DotNetCore.CAP/Dashboard/Pages/Breadcrumbs.cs
  47. +3
    -4
      src/DotNetCore.CAP/Dashboard/Pages/NodePage.cs
  48. +3
    -6
      src/DotNetCore.CAP/Dashboard/Pages/PublishedPage.cs
  49. +12
    -2
      src/DotNetCore.CAP/Dashboard/Pages/PublishedPage.cshtml
  50. +443
    -385
      src/DotNetCore.CAP/Dashboard/Pages/PublishedPage1.generated.cs
  51. +3
    -6
      src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.cs
  52. +13
    -3
      src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.cshtml
  53. +421
    -359
      src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.generated.cs
  54. +2
    -3
      src/DotNetCore.CAP/Dashboard/Pages/SidebarMenu.cs
  55. +1
    -1
      src/DotNetCore.CAP/Dashboard/Pages/SubscriberPage.cshtml
  56. +3
    -3
      src/DotNetCore.CAP/Dashboard/RouteCollectionExtensions.cs
  57. +1
    -2
      src/DotNetCore.CAP/Dashboard/UrlHelper.cs
  58. +1
    -2
      src/DotNetCore.CAP/IBootstrapper.Default.cs
  59. +5
    -12
      src/DotNetCore.CAP/IConsumerHandler.Default.cs
  60. +1
    -0
      src/DotNetCore.CAP/IProcessingServer.cs
  61. +2
    -3
      src/DotNetCore.CAP/IQueueExecutor.Publish.Base.cs
  62. +1
    -1
      src/DotNetCore.CAP/IQueueExecutor.Subscibe.cs
  63. +8
    -9
      src/DotNetCore.CAP/Infrastructure/Helper.cs
  64. +4
    -13
      src/DotNetCore.CAP/Internal/IConsumerInvoker.Default.cs
  65. +5
    -5
      src/DotNetCore.CAP/Internal/IConsumerServiceSelector.Default.cs
  66. +1
    -1
      src/DotNetCore.CAP/Internal/IModelBinder.SimpleType.cs
  67. +1
    -1
      src/DotNetCore.CAP/Internal/ModelBinderFactory.cs
  68. +5
    -5
      src/DotNetCore.CAP/LoggerExtensions.cs
  69. +3
    -2
      src/DotNetCore.CAP/NodeDiscovery/CAP.DiscoveryOptions.cs
  70. +1
    -3
      src/DotNetCore.CAP/NodeDiscovery/CAP.DiscoveryOptionsExtensions.cs
  71. +1
    -3
      src/DotNetCore.CAP/NodeDiscovery/IDiscoveryProviderFactory.Default.cs
  72. +2
    -6
      src/DotNetCore.CAP/NodeDiscovery/IDiscoveryProviderFactory.cs
  73. +4
    -3
      src/DotNetCore.CAP/NodeDiscovery/INodeDiscoveryProvider.Consul.cs
  74. +1
    -3
      src/DotNetCore.CAP/NodeDiscovery/INodeDiscoveryProvider.cs
  75. +7
    -11
      src/DotNetCore.CAP/NodeDiscovery/IProcessingServer.Consul.cs
  76. +1
    -5
      src/DotNetCore.CAP/NodeDiscovery/Node.cs
  77. +5
    -2
      src/DotNetCore.CAP/OperateResult.cs
  78. +3
    -13
      src/DotNetCore.CAP/Processor/IDispatcher.Default.cs
  79. +3
    -3
      src/DotNetCore.CAP/Processor/IProcessingServer.Cap.cs
  80. +3
    -3
      src/DotNetCore.CAP/Processor/IProcessor.PublishQueuer.cs
  81. +7
    -7
      src/DotNetCore.CAP/Processor/IProcessor.SubscribeQueuer.cs
  82. +1
    -1
      src/DotNetCore.CAP/Processor/States/IState.Succeeded.cs
  83. +0
    -13
      src/DotNetCore.CAP/StateData.cs

+ 2
- 2
src/DotNetCore.CAP.MySql/CapPublisher.cs 查看文件

@@ -52,14 +52,14 @@ namespace DotNetCore.CAP.MySql
{
dbConnection.Execute(PrepareSql(), message, dbTransaction);

_logger.LogInformation("Published Message has been persisted in the database. name:" + message.ToString());
_logger.LogInformation("Published Message has been persisted in the database. name:" + message);
}

protected override async Task ExecuteAsync(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message)
{
await dbConnection.ExecuteAsync(PrepareSql(), message, dbTransaction);

_logger.LogInformation("Published Message has been persisted in the database. name:" + message.ToString());
_logger.LogInformation("Published Message has been persisted in the database. name:" + message);
}

public async Task PublishAsync(CapPublishedMessage message)


+ 3
- 7
src/DotNetCore.CAP.MySql/IAdditionalProcessor.Default.cs 查看文件

@@ -9,7 +9,6 @@ namespace DotNetCore.CAP.MySql
{
internal class DefaultAdditionalProcessor : IAdditionalProcessor
{
private readonly IServiceProvider _provider;
private readonly ILogger _logger;
private readonly MySqlOptions _options;

@@ -17,13 +16,10 @@ namespace DotNetCore.CAP.MySql
private readonly TimeSpan _delay = TimeSpan.FromSeconds(1);
private readonly TimeSpan _waitingInterval = TimeSpan.FromMinutes(5);

public DefaultAdditionalProcessor(
IServiceProvider provider,
ILogger<DefaultAdditionalProcessor> logger,
public DefaultAdditionalProcessor(ILogger<DefaultAdditionalProcessor> logger,
MySqlOptions mysqlOptions)
{
_logger = logger;
_provider = provider;
_options = mysqlOptions;
}

@@ -31,14 +27,14 @@ namespace DotNetCore.CAP.MySql
{
_logger.LogDebug("Collecting expired entities.");

var tables = new string[]{
var tables = new[]{
$"{_options.TableNamePrefix}.published",
$"{_options.TableNamePrefix}.received"
};

foreach (var table in tables)
{
var removedCount = 0;
int removedCount;
do
{
using (var connection = new MySqlConnection(_options.ConnectionString))


+ 1
- 1
src/DotNetCore.CAP.MySql/MySqlStorageConnection.cs 查看文件

@@ -129,7 +129,7 @@ VALUES(@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
var connection = new MySqlConnection(_options.ConnectionString);
await connection.OpenAsync();
var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
FetchedMessage fetchedMessage = null;
FetchedMessage fetchedMessage;
try
{
fetchedMessage = await connection.QueryFirstOrDefaultAsync<FetchedMessage>(sql, args, transaction);


+ 1
- 1
src/DotNetCore.CAP.MySql/MySqlStorageTransaction.cs 查看文件

@@ -7,7 +7,7 @@ using MySql.Data.MySqlClient;

namespace DotNetCore.CAP.MySql
{
public class MySqlStorageTransaction : IStorageTransaction, IDisposable
public class MySqlStorageTransaction : IStorageTransaction
{
private readonly string _prefix;



+ 2
- 2
src/DotNetCore.CAP.PostgreSql/CapPublisher.cs 查看文件

@@ -52,14 +52,14 @@ namespace DotNetCore.CAP.PostgreSql
{
dbConnection.Execute(PrepareSql(), message, dbTransaction);

_logger.LogInformation("Published Message has been persisted in the database. name:" + message.ToString());
_logger.LogInformation("Published Message has been persisted in the database. name:" + message);
}

protected override async Task ExecuteAsync(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message)
{
await dbConnection.ExecuteAsync(PrepareSql(), message, dbTransaction);

_logger.LogInformation("Published Message has been persisted in the database. name:" + message.ToString());
_logger.LogInformation("Published Message has been persisted in the database. name:" + message);
}

public async Task PublishAsync(CapPublishedMessage message)


+ 0
- 1
src/DotNetCore.CAP.PostgreSql/PostgreSqlStorage.cs 查看文件

@@ -2,7 +2,6 @@ using System.Threading;
using System.Threading.Tasks;
using Dapper;
using DotNetCore.CAP.Dashboard;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Npgsql;



+ 1
- 1
src/DotNetCore.CAP.PostgreSql/PostgreSqlStorageConnection.cs 查看文件

@@ -113,7 +113,7 @@ namespace DotNetCore.CAP.PostgreSql
var connection = new NpgsqlConnection(_options.ConnectionString);
await connection.OpenAsync();
var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
FetchedMessage fetchedMessage = null;
FetchedMessage fetchedMessage;
try
{
fetchedMessage = await connection.QueryFirstOrDefaultAsync<FetchedMessage>(sql, args, transaction);


+ 1
- 1
src/DotNetCore.CAP.PostgreSql/PostgreSqlStorageTransaction.cs 查看文件

@@ -7,7 +7,7 @@ using Npgsql;

namespace DotNetCore.CAP.PostgreSql
{
public class PostgreSqlStorageTransaction : IStorageTransaction, IDisposable
public class PostgreSqlStorageTransaction : IStorageTransaction
{
private readonly string _schema;



+ 1
- 3
src/DotNetCore.CAP.RabbitMQ/CAP.RabbiMQOptions.cs 查看文件

@@ -1,6 +1,4 @@
using System;

// ReSharper disable once CheckNamespace
// ReSharper disable once CheckNamespace
namespace DotNetCore.CAP
{
public class RabbitMQOptions


+ 1
- 4
src/DotNetCore.CAP.RabbitMQ/IConnectionPool.cs 查看文件

@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using RabbitMQ.Client;
using RabbitMQ.Client;

namespace DotNetCore.CAP.RabbitMQ
{


+ 2
- 2
src/DotNetCore.CAP.RabbitMQ/RabbitMQConsumerClient.cs 查看文件

@@ -13,8 +13,8 @@ namespace DotNetCore.CAP.RabbitMQ
private readonly string _exchageName;
private readonly string _queueName;
private readonly RabbitMQOptions _rabbitMQOptions;
private readonly ConnectionPool _connectionPool;

private ConnectionPool _connectionPool;
private IModel _channel;
private ulong _deliveryTag;

@@ -45,7 +45,7 @@ namespace DotNetCore.CAP.RabbitMQ
type: RabbitMQOptions.ExchangeType,
durable: true);

var arguments = new Dictionary<string, object> { { "x-message-ttl", (int)_rabbitMQOptions.QueueMessageExpires } };
var arguments = new Dictionary<string, object> { { "x-message-ttl", _rabbitMQOptions.QueueMessageExpires } };
_channel.QueueDeclare(_queueName,
durable: true,
exclusive: false,


+ 1
- 4
src/DotNetCore.CAP.RabbitMQ/RabbitMQConsumerClientFactory.cs 查看文件

@@ -1,7 +1,4 @@
using Microsoft.Extensions.Options;
using RabbitMQ.Client;

namespace DotNetCore.CAP.RabbitMQ
namespace DotNetCore.CAP.RabbitMQ
{
internal sealed class RabbitMQConsumerClientFactory : IConsumerClientFactory
{


+ 2
- 2
src/DotNetCore.CAP.SqlServer/CapPublisher.cs 查看文件

@@ -52,14 +52,14 @@ namespace DotNetCore.CAP.SqlServer
{
dbConnection.Execute(PrepareSql(), message, dbTransaction);

_logger.LogInformation("Published Message has been persisted in the database. name:" + message.ToString());
_logger.LogInformation("Published Message has been persisted in the database. name:" + message);
}

protected override async Task ExecuteAsync(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message)
{
await dbConnection.ExecuteAsync(PrepareSql(), message, dbTransaction);

_logger.LogInformation("Published Message has been persisted in the database. name:" + message.ToString());
_logger.LogInformation("Published Message has been persisted in the database. name:" + message);
}

public async Task PublishAsync(CapPublishedMessage message)


+ 2
- 6
src/DotNetCore.CAP.SqlServer/IAdditionalProcessor.Default.cs 查看文件

@@ -9,7 +9,6 @@ namespace DotNetCore.CAP.SqlServer
{
public class DefaultAdditionalProcessor : IAdditionalProcessor
{
private readonly IServiceProvider _provider;
private readonly ILogger _logger;
private readonly SqlServerOptions _options;

@@ -22,13 +21,10 @@ namespace DotNetCore.CAP.SqlServer
"Published","Received"
};

public DefaultAdditionalProcessor(
IServiceProvider provider,
ILogger<DefaultAdditionalProcessor> logger,
public DefaultAdditionalProcessor(ILogger<DefaultAdditionalProcessor> logger,
SqlServerOptions sqlServerOptions)
{
_logger = logger;
_provider = provider;
_options = sqlServerOptions;
}

@@ -38,7 +34,7 @@ namespace DotNetCore.CAP.SqlServer

foreach (var table in Tables)
{
var removedCount = 0;
int removedCount;
do
{
using (var connection = new SqlConnection(_options.ConnectionString))


+ 31
- 44
src/DotNetCore.CAP.SqlServer/SqlServerMonitoringApi.cs 查看文件

@@ -18,11 +18,8 @@ namespace DotNetCore.CAP.SqlServer

public SqlServerMonitoringApi(IStorage storage, SqlServerOptions options)
{
if (storage == null) throw new ArgumentNullException(nameof(storage));
if (options == null) throw new ArgumentNullException(nameof(options));

_options = options;
_storage = storage as SqlServerStorage;
_options = options ?? throw new ArgumentNullException(nameof(options));
_storage = storage as SqlServerStorage ?? throw new ArgumentNullException(nameof(storage));
}


@@ -35,7 +32,7 @@ select count(Id) from [{0}].Published with (nolock) where StatusName = N'Succeed
select count(Id) from [{0}].Received with (nolock) where StatusName = N'Succeeded';
select count(Id) from [{0}].Published with (nolock) where StatusName = N'Failed';
select count(Id) from [{0}].Received with (nolock) where StatusName = N'Failed';
select count(Id) from [{0}].Published with (nolock) where StatusName = N'Processing';
select count(Id) from [{0}].Published with (nolock) where StatusName in (N'Processing',N'Scheduled',N'Enqueued');
select count(Id) from [{0}].Received with (nolock) where StatusName = N'Processing';",
_options.Schema);

@@ -74,11 +71,18 @@ _options.Schema);

public IList<MessageDto> Messages(MessageQueryDto queryDto)
{
var tableName = queryDto.MessageType == Models.MessageType.Publish ? "Published" : "Received";
var tableName = queryDto.MessageType == MessageType.Publish ? "Published" : "Received";
var where = string.Empty;
if (!string.IsNullOrEmpty(queryDto.StatusName))
{
where += " and statusname=@StatusName";
if (string.Equals(queryDto.StatusName, ProcessingState.StateName, StringComparison.CurrentCultureIgnoreCase))
{
where += " and statusname in (N'Processing',N'Scheduled',N'Enqueued')";
}
else
{
where += " and statusname=@StatusName";
}
}
if (!string.IsNullOrEmpty(queryDto.Name))
{
@@ -95,71 +99,53 @@ _options.Schema);

var sqlQuery = $"select * from [{_options.Schema}].{tableName} where 1=1 {where} order by Added desc offset @Offset rows fetch next @Limit rows only";

return UseConnection(conn =>
return UseConnection(conn => conn.Query<MessageDto>(sqlQuery, new
{
return conn.Query<MessageDto>(sqlQuery, new
{
StatusName = queryDto.StatusName,
Group = queryDto.Group,
Name = queryDto.Name,
Content = queryDto.Content,
Offset = queryDto.CurrentPage * queryDto.PageSize,
Limit = queryDto.PageSize,
}).ToList();
});
StatusName = queryDto.StatusName,
Group = queryDto.Group,
Name = queryDto.Name,
Content = queryDto.Content,
Offset = queryDto.CurrentPage * queryDto.PageSize,
Limit = queryDto.PageSize,
}).ToList());
}

public int PublishedFailedCount()
{
return UseConnection(conn =>
{
return GetNumberOfMessage(conn, "Published", StatusName.Failed);
});
return UseConnection(conn => GetNumberOfMessage(conn, "Published", StatusName.Failed));
}

public int PublishedProcessingCount()
{
return UseConnection(conn =>
{
return GetNumberOfMessage(conn, "Published", StatusName.Processing);
});
return UseConnection(conn => GetNumberOfMessage(conn, "Published", StatusName.Processing));
}

public int PublishedSucceededCount()
{
return UseConnection(conn =>
{
return GetNumberOfMessage(conn, "Published", StatusName.Succeeded);
});
return UseConnection(conn => GetNumberOfMessage(conn, "Published", StatusName.Succeeded));
}

public int ReceivedFailedCount()
{
return UseConnection(conn =>
{
return GetNumberOfMessage(conn, "Received", StatusName.Failed);
});
return UseConnection(conn => GetNumberOfMessage(conn, "Received", StatusName.Failed));
}

public int ReceivedProcessingCount()
{
return UseConnection(conn =>
{
return GetNumberOfMessage(conn, "Received", StatusName.Processing);
});
return UseConnection(conn => GetNumberOfMessage(conn, "Received", StatusName.Processing));
}

public int ReceivedSucceededCount()
{
return UseConnection(conn =>
{
return GetNumberOfMessage(conn, "Received", StatusName.Succeeded);
});
return UseConnection(conn => GetNumberOfMessage(conn, "Received", StatusName.Succeeded));
}

private int GetNumberOfMessage(IDbConnection connection, string tableName, string statusName)
{
var sqlQuery = $"select count(Id) from [{_options.Schema}].{tableName} with (nolock) where StatusName = @state";
var sqlQuery = statusName == StatusName.Processing
? $"select count(Id) from [{_options.Schema}].{tableName} with (nolock) where StatusName in (N'Processing',N'Scheduled',N'Enqueued')"
: $"select count(Id) from [{_options.Schema}].{tableName} with (nolock) where StatusName = @state";

var count = connection.ExecuteScalar<int>(sqlQuery, new { state = statusName });
return count;
}
@@ -190,6 +176,7 @@ _options.Schema);
string statusName,
IDictionary<string, DateTime> keyMaps)
{
//SQL Server 2012+
string sqlQuery =
$@"
with aggr as (


+ 1
- 1
src/DotNetCore.CAP.SqlServer/SqlServerStorageConnection.cs 查看文件

@@ -139,7 +139,7 @@ VALUES(@Name,@Group,@Content,@Retries,@Added,@ExpiresAt,@StatusName);";
var connection = new SqlConnection(_options.ConnectionString);
await connection.OpenAsync();
var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
FetchedMessage fetchedMessage = null;
FetchedMessage fetchedMessage;
try
{
fetchedMessage = await connection.QueryFirstOrDefaultAsync<FetchedMessage>(sql, args, transaction);


+ 1
- 1
src/DotNetCore.CAP.SqlServer/SqlServerStorageTransaction.cs 查看文件

@@ -7,7 +7,7 @@ using DotNetCore.CAP.Models;

namespace DotNetCore.CAP.SqlServer
{
public class SqlServerStorageTransaction : IStorageTransaction, IDisposable
public class SqlServerStorageTransaction : IStorageTransaction
{
private readonly string _schema;



+ 1
- 3
src/DotNetCore.CAP/Abstractions/IConsumerServiceSelector.cs 查看文件

@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;

namespace DotNetCore.CAP.Abstractions
{
@@ -10,7 +9,6 @@ namespace DotNetCore.CAP.Abstractions
{
/// <summary>
/// Selects a set of <see cref="ConsumerExecutorDescriptor"/> candidates for the current message associated with
/// <paramref name="provider"/>.
/// </summary>
/// <returns>A set of <see cref="ConsumerExecutorDescriptor"/> candidates or <c>null</c>.</returns>
IReadOnlyList<ConsumerExecutorDescriptor> SelectCandidates();


+ 1
- 1
src/DotNetCore.CAP/Abstractions/ModelBinding/ModelBindingResult.cs 查看文件

@@ -77,7 +77,7 @@ namespace DotNetCore.CAP.Abstractions.ModelBinding
{
return
IsSuccess == other.IsSuccess &&
object.Equals(Model, other.Model);
Equals(Model, other.Model);
}

/// <summary>


+ 1
- 5
src/DotNetCore.CAP/Abstractions/TopicAttribute.cs 查看文件

@@ -2,6 +2,7 @@

namespace DotNetCore.CAP.Abstractions
{
/// <inheritdoc />
/// <summary>
/// An abstract attribute that for kafka attribute or rabbitmq attribute
/// </summary>
@@ -23,10 +24,5 @@ namespace DotNetCore.CAP.Abstractions
/// rabbitmq --> queue.name
/// </summary>
public string Group { get; set; } = "cap.default.group";

/// <summary>
/// unused now
/// </summary>
public bool IsOneWay { get; set; }
}
}

+ 2
- 1
src/DotNetCore.CAP/CAP.AppBuilderExtensions.cs 查看文件

@@ -3,6 +3,7 @@ using DotNetCore.CAP;
using DotNetCore.CAP.Dashboard.GatewayProxy;
using Microsoft.Extensions.DependencyInjection;

// ReSharper disable once CheckNamespace
namespace Microsoft.AspNetCore.Builder
{
/// <summary>
@@ -52,7 +53,7 @@ namespace Microsoft.AspNetCore.Builder
var marker = app.ApplicationServices.GetService<CapMarkerService>();
if (marker == null)
{
throw new InvalidOperationException("AddCap must be called on the service collection. eg: services.AddCap(...)");
throw new InvalidOperationException("AddCap() must be called on the service collection. eg: services.AddCap(...)");
}

var messageQueuemarker = app.ApplicationServices.GetService<CapMessageQueueMakerService>();


+ 1
- 1
src/DotNetCore.CAP/CAP.Builder.cs 查看文件

@@ -39,7 +39,7 @@ namespace DotNetCore.CAP
/// <summary>
/// Gets the <see cref="IServiceCollection"/> where MVC services are configured.
/// </summary>
public IServiceCollection Services { get; private set; }
public IServiceCollection Services { get; }

/// <summary>
/// Adds a scoped service of the type specified in serviceType with an implementation


+ 1
- 1
src/DotNetCore.CAP/CAP.Options.cs 查看文件

@@ -8,7 +8,7 @@ namespace DotNetCore.CAP
/// </summary>
public class CapOptions
{
internal IList<ICapOptionsExtension> Extensions { get; private set; }
internal IList<ICapOptionsExtension> Extensions { get; }

/// <summary>
/// Default value for polling delay timeout, in seconds.


+ 1
- 2
src/DotNetCore.CAP/CAP.ServiceCollectionExtensions.cs 查看文件

@@ -1,14 +1,13 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using DotNetCore.CAP;
using DotNetCore.CAP.Abstractions;
using DotNetCore.CAP.Infrastructure;
using DotNetCore.CAP.Internal;
using DotNetCore.CAP.Processor;
using DotNetCore.CAP.Processor.States;
using Microsoft.Extensions.DependencyInjection.Extensions;

// ReSharper disable once CheckNamespace
namespace Microsoft.Extensions.DependencyInjection
{
/// <summary>


+ 39
- 39
src/DotNetCore.CAP/CapCache.cs 查看文件

@@ -19,9 +19,9 @@ namespace DotNetCore.CAP
/// </summary>
public Cache() { }

private Dictionary<K, T> cache = new Dictionary<K, T>();
private Dictionary<K, Timer> timers = new Dictionary<K, Timer>();
private ReaderWriterLockSlim locker = new ReaderWriterLockSlim();
private Dictionary<K, T> _cache = new Dictionary<K, T>();
private Dictionary<K, Timer> _timers = new Dictionary<K, Timer>();
private ReaderWriterLockSlim _locker = new ReaderWriterLockSlim();
#endregion

#region IDisposable implementation & Clear
@@ -51,7 +51,7 @@ namespace DotNetCore.CAP
{
// Dispose managed resources.
Clear();
locker.Dispose();
_locker.Dispose();
}
// Dispose unmanaged resources
}
@@ -62,21 +62,21 @@ namespace DotNetCore.CAP
/// </summary>
public void Clear()
{
locker.EnterWriteLock();
_locker.EnterWriteLock();
try
{
try
{
foreach (Timer t in timers.Values)
foreach (Timer t in _timers.Values)
t.Dispose();
}
catch
{ }

timers.Clear();
cache.Clear();
_timers.Clear();
_cache.Clear();
}
finally { locker.ExitWriteLock(); }
finally { _locker.ExitWriteLock(); }
}
#endregion

@@ -86,22 +86,22 @@ namespace DotNetCore.CAP
{
Timer timer;

if (timers.TryGetValue(key, out timer))
if (_timers.TryGetValue(key, out timer))
{
if (restartTimerIfExists)
{
timer.Change(
(cacheTimeout == null ? Timeout.InfiniteTimeSpan : cacheTimeout.Value),
cacheTimeout ?? Timeout.InfiniteTimeSpan,
Timeout.InfiniteTimeSpan);
}
}
else
timers.Add(
_timers.Add(
key,
new Timer(
new TimerCallback(RemoveByTimer),
key,
(cacheTimeout == null ? Timeout.InfiniteTimeSpan : cacheTimeout.Value),
cacheTimeout ?? Timeout.InfiniteTimeSpan,
Timeout.InfiniteTimeSpan));
}

@@ -125,17 +125,17 @@ namespace DotNetCore.CAP
{
if (disposed) return;

locker.EnterWriteLock();
_locker.EnterWriteLock();
try
{
CheckTimer(key, cacheTimeout, restartTimerIfExists);

if (!cache.ContainsKey(key))
cache.Add(key, cacheObject);
if (!_cache.ContainsKey(key))
_cache.Add(key, cacheObject);
else
cache[key] = cacheObject;
_cache[key] = cacheObject;
}
finally { locker.ExitWriteLock(); }
finally { _locker.ExitWriteLock(); }
}

/// <summary>
@@ -164,13 +164,13 @@ namespace DotNetCore.CAP
{
if (disposed) return default(T);

locker.EnterReadLock();
_locker.EnterReadLock();
try
{
T rv;
return (cache.TryGetValue(key, out rv) ? rv : default(T));
return (_cache.TryGetValue(key, out rv) ? rv : default(T));
}
finally { locker.ExitReadLock(); }
finally { _locker.ExitReadLock(); }
}

/// <summary>
@@ -187,12 +187,12 @@ namespace DotNetCore.CAP
return false;
}

locker.EnterReadLock();
_locker.EnterReadLock();
try
{
return cache.TryGetValue(key, out value);
return _cache.TryGetValue(key, out value);
}
finally { locker.ExitReadLock(); }
finally { _locker.ExitReadLock(); }
}

/// <summary>
@@ -203,22 +203,22 @@ namespace DotNetCore.CAP
{
if (disposed) return;

locker.EnterWriteLock();
_locker.EnterWriteLock();
try
{
var removers = (from k in cache.Keys.Cast<K>()
var removers = (from k in _cache.Keys.Cast<K>()
where keyPattern(k)
select k).ToList();

foreach (K workKey in removers)
{
try { timers[workKey].Dispose(); }
try { _timers[workKey].Dispose(); }
catch { }
timers.Remove(workKey);
cache.Remove(workKey);
_timers.Remove(workKey);
_cache.Remove(workKey);
}
}
finally { locker.ExitWriteLock(); }
finally { _locker.ExitWriteLock(); }
}

/// <summary>
@@ -230,18 +230,18 @@ namespace DotNetCore.CAP
{
if (disposed) return;

locker.EnterWriteLock();
_locker.EnterWriteLock();
try
{
if (cache.ContainsKey(key))
if (_cache.ContainsKey(key))
{
try { timers[key].Dispose(); }
try { _timers[key].Dispose(); }
catch { }
timers.Remove(key);
cache.Remove(key);
_timers.Remove(key);
_cache.Remove(key);
}
}
finally { locker.ExitWriteLock(); }
finally { _locker.ExitWriteLock(); }
}

/// <summary>
@@ -253,12 +253,12 @@ namespace DotNetCore.CAP
{
if (disposed) return false;

locker.EnterReadLock();
_locker.EnterReadLock();
try
{
return cache.ContainsKey(key);
return _cache.ContainsKey(key);
}
finally { locker.ExitReadLock(); }
finally { _locker.ExitReadLock(); }
}
#endregion
}


+ 10
- 13
src/DotNetCore.CAP/Dashboard/CAP.DashboardMiddleware.cs 查看文件

@@ -1,9 +1,11 @@
using System;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using DotNetCore.CAP.Dashboard;
using Microsoft.AspNetCore.Http;

// ReSharper disable once CheckNamespace
namespace DotNetCore.CAP
{
public class DashboardMiddleware
@@ -23,10 +25,8 @@ namespace DotNetCore.CAP

public Task Invoke(HttpContext context)
{
PathString matchedPath;
PathString remainingPath;

if (context.Request.Path.StartsWithSegments(_options.PathMatch, out matchedPath, out remainingPath))
if (context.Request.Path.StartsWithSegments(_options.PathMatch,
out var matchedPath, out var remainingPath))
{
// Update the path
var path = context.Request.Path;
@@ -44,18 +44,15 @@ namespace DotNetCore.CAP
return _next.Invoke(context);
}

foreach (var filter in _options.Authorization)
if (_options.Authorization.Any(filter => !filter.Authorize(dashboardContext)))
{
if (!filter.Authorize(dashboardContext))
{
var isAuthenticated = context.User?.Identity?.IsAuthenticated;
var isAuthenticated = context.User?.Identity?.IsAuthenticated;

context.Response.StatusCode = isAuthenticated == true
? (int)HttpStatusCode.Forbidden
: (int)HttpStatusCode.Unauthorized;
context.Response.StatusCode = isAuthenticated == true
? (int)HttpStatusCode.Forbidden
: (int)HttpStatusCode.Unauthorized;

return Task.CompletedTask;
}
return Task.CompletedTask;
}

dashboardContext.UriMatch = findResult.Item2;


+ 2
- 3
src/DotNetCore.CAP/Dashboard/CAP.DashboardOptions.cs 查看文件

@@ -1,8 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Generic;
using DotNetCore.CAP.Dashboard;

// ReSharper disable once CheckNamespace
namespace DotNetCore.CAP
{
public class DashboardOptions


+ 3
- 5
src/DotNetCore.CAP/Dashboard/CAP.DashboardOptionsExtensions.cs 查看文件

@@ -2,9 +2,9 @@

namespace DotNetCore.CAP
{
using DotNetCore.CAP.Dashboard;
using DotNetCore.CAP.Dashboard.GatewayProxy;
using DotNetCore.CAP.Dashboard.GatewayProxy.Requester;
using Dashboard;
using Dashboard.GatewayProxy;
using Dashboard.GatewayProxy.Requester;
using Microsoft.Extensions.DependencyInjection;

internal sealed class DashboardOptionsExtension : ICapOptionsExtension
@@ -25,8 +25,6 @@ namespace DotNetCore.CAP
services.AddSingleton<IHttpRequester, HttpClientHttpRequester>();
services.AddSingleton<IHttpClientCache, MemoryHttpClientCache>();
services.AddSingleton<IRequestMapper, RequestMapper>();
//services.AddScoped<IRequestScopedDataRepository, ScopedDataRepository>();
//services.AddScoped<IRequestScopedDataRepository, HttpDataRepository>();
}
}
}


+ 7
- 3
src/DotNetCore.CAP/Dashboard/Content/css/cap.css 查看文件

@@ -310,6 +310,7 @@ a:hover .label-hover {
padding: 12px;
background-color: #fff;
border: 1px solid #e5e5e5;
-ms-border-radius: 3px;
border-radius: 3px;
}

@@ -333,12 +334,14 @@ a:hover .label-hover {
.state-card-body {
padding: 10px;
margin: 10px -12px -12px -12px;
-ms-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
-ms-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
background-color: #f5f5f5;
}

.state-card-body dl {
.state-card-body dl {
margin-top: 5px;
margin-bottom: 0;
}
@@ -353,7 +356,7 @@ a:hover .label-hover {
.state-card-body .stack-trace {
background-color: transparent;
padding: 0 20px;
margin-bottom: 0px;
margin-bottom: 0;
}

.state-card-body .exception-type {
@@ -453,6 +456,7 @@ span.metric-default {

div.metric {
border: solid 1px transparent;
-ms-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,.05);
box-shadow: 0 1px 1px rgba(0,0,0,.05);
@@ -460,7 +464,7 @@ div.metric {
transition: color .1s ease-out, background .1s ease-out, border .1s ease-out;
}

div.metric .metric-body {
div.metric .metric-body {
padding: 15px 15px 0;
font-size: 26px;
text-align: center;


+ 2
- 2
src/DotNetCore.CAP/Dashboard/Content/js/cap.js 查看文件

@@ -398,10 +398,10 @@
updateRelativeDates();
setInterval(updateRelativeDates, 30 * 1000);

$('*[title]').tooltip();
$("*[title]").tooltip();

var self = this;
$('*[data-metric]').each(function () {
$("*[data-metric]").each(function () {
var name = $(this).data('metric');
self._metrics.addElement(name, this);
});


+ 21
- 3
src/DotNetCore.CAP/Dashboard/Content/resx/Strings.Designer.cs 查看文件

@@ -268,11 +268,20 @@ namespace DotNetCore.CAP.Dashboard.Resources {
}
/// <summary>
/// Looks up a localized string similar to Requeue jobs.
/// Looks up a localized string similar to ReExecution.
/// </summary>
public static string Common_RequeueJobs {
public static string Common_ReConsume {
get {
return ResourceManager.GetString("Common_RequeueJobs", resourceCulture);
return ResourceManager.GetString("Common_ReConsume", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Requeue messages.
/// </summary>
public static string Common_RequeueMessages {
get {
return ResourceManager.GetString("Common_RequeueMessages", resourceCulture);
}
}
@@ -546,6 +555,15 @@ namespace DotNetCore.CAP.Dashboard.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to State.
/// </summary>
public static string MessagesPage_Table_State {
get {
return ResourceManager.GetString("MessagesPage_Table_State", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Active Connections.
/// </summary>


+ 8
- 2
src/DotNetCore.CAP/Dashboard/Content/resx/Strings.resx 查看文件

@@ -162,8 +162,8 @@
<data name="Common_Reason" xml:space="preserve">
<value>Reason</value>
</data>
<data name="Common_RequeueJobs" xml:space="preserve">
<value>Requeue jobs</value>
<data name="Common_RequeueMessages" xml:space="preserve">
<value>Requeue messages</value>
</data>
<data name="Common_Retry" xml:space="preserve">
<value>Retry</value>
@@ -384,4 +384,10 @@
<data name="NodePage_Switch" xml:space="preserve">
<value>Switch</value>
</data>
<data name="Common_ReConsume" xml:space="preserve">
<value>ReExecution</value>
</data>
<data name="MessagesPage_Table_State" xml:space="preserve">
<value>State</value>
</data>
</root>

+ 7
- 1
src/DotNetCore.CAP/Dashboard/Content/resx/Strings.zh.resx 查看文件

@@ -162,7 +162,7 @@
<data name="Common_Reason" xml:space="preserve">
<value>原因</value>
</data>
<data name="Common_RequeueJobs" xml:space="preserve">
<data name="Common_RequeueMessages" xml:space="preserve">
<value>重新加入队列</value>
</data>
<data name="Common_Retry" xml:space="preserve">
@@ -408,4 +408,10 @@
<data name="NodePage_Switch" xml:space="preserve">
<value>切换到</value>
</data>
<data name="Common_ReConsume" xml:space="preserve">
<value>重新消费</value>
</data>
<data name="MessagesPage_Table_State" xml:space="preserve">
<value>状态</value>
</data>
</root>

+ 5
- 6
src/DotNetCore.CAP/Dashboard/DashboardResponse.cs 查看文件

@@ -24,20 +24,19 @@ namespace DotNetCore.CAP.Dashboard

public CapDashboardResponse(HttpContext context)
{
if (context == null) throw new ArgumentNullException(nameof(context));
_context = context;
_context = context ?? throw new ArgumentNullException(nameof(context));
}

public override string ContentType
{
get { return _context.Response.ContentType; }
set { _context.Response.ContentType = value; }
get => _context.Response.ContentType;
set => _context.Response.ContentType = value;
}

public override int StatusCode
{
get { return _context.Response.StatusCode; }
set { _context.Response.StatusCode = value; }
get => _context.Response.StatusCode;
set => _context.Response.StatusCode = value;
}

public override Stream Body => _context.Response.Body;


+ 0
- 5
src/DotNetCore.CAP/Dashboard/DashboardRoutes.cs 查看文件

@@ -125,11 +125,6 @@ namespace DotNetCore.CAP.Dashboard
return $"{GetContentFolderNamespace(contentFolder)}.{resourceName}";
}

private static EnqueuedState CreateEnqueuedState()
{
return new EnqueuedState();
}

private static Assembly GetExecutingAssembly()
{
return typeof(DashboardRoutes).GetTypeInfo().Assembly;


+ 10
- 6
src/DotNetCore.CAP/Dashboard/EmbeddedResourceDispatcher.cs 查看文件

@@ -15,12 +15,16 @@ namespace DotNetCore.CAP.Dashboard
Assembly assembly,
string resourceName)
{
if (contentType == null) throw new ArgumentNullException(nameof(contentType));
if (assembly == null) throw new ArgumentNullException(nameof(assembly));

_assembly = assembly;
_resourceName = resourceName;
_contentType = contentType;
if (assembly != null)
{
_assembly = assembly;
_resourceName = resourceName;
_contentType = contentType ?? throw new ArgumentNullException(nameof(contentType));
}
else
{
throw new ArgumentNullException(nameof(assembly));
}
}

public Task Dispatch(DashboardContext context)


+ 1
- 1
src/DotNetCore.CAP/Dashboard/GatewayProxy/DownstreamUrl.cs 查看文件

@@ -7,6 +7,6 @@
Value = value;
}

public string Value { get; private set; }
public string Value { get; }
}
}

+ 4
- 7
src/DotNetCore.CAP/Dashboard/GatewayProxy/GatewayProxyMiddleware.cs 查看文件

@@ -15,7 +15,7 @@ namespace DotNetCore.CAP.Dashboard.GatewayProxy
{
public class GatewayProxyMiddleware
{
private const string NODE_COOKIE_NAME = "cap.node";
public const string NodeCookieName = "cap.node";

private readonly RequestDelegate _next;
private readonly ILogger _logger;
@@ -45,12 +45,9 @@ namespace DotNetCore.CAP.Dashboard.GatewayProxy

var request = context.Request;
var pathMatch = discoveryOptions.MatchPath;
var isCapRequest = request.Path.StartsWithSegments(
new PathString(pathMatch),
out PathString matchedPath,
out PathString remainingPath);
var isCapRequest = request.Path.StartsWithSegments(new PathString(pathMatch));

var isSwitchNode = request.Cookies.TryGetValue(NODE_COOKIE_NAME, out string requestNodeId);
var isSwitchNode = request.Cookies.TryGetValue(NodeCookieName, out string requestNodeId);
var isCurrentNode = discoveryOptions.NodeId.ToString() == requestNodeId;

if (!isCapRequest || !isSwitchNode || isCurrentNode)
@@ -80,7 +77,7 @@ namespace DotNetCore.CAP.Dashboard.GatewayProxy
}
else
{
context.Response.Cookies.Delete(NODE_COOKIE_NAME);
context.Response.Cookies.Delete(NodeCookieName);
await _next.Invoke(context);
}
}


+ 1
- 1
src/DotNetCore.CAP/Dashboard/GatewayProxy/Requester/HttpClientHttpRequester.cs 查看文件

@@ -31,7 +31,7 @@ namespace DotNetCore.CAP.Dashboard.GatewayProxy.Requester
catch (Exception exception)
{
_logger.LogError("Error making http request, exception:" + exception.Message);
throw exception;
throw;
}
finally
{


+ 3
- 1
src/DotNetCore.CAP/Dashboard/GatewayProxy/Requester/IHttpClientBuilder.cs 查看文件

@@ -1,4 +1,6 @@
namespace DotNetCore.CAP.Dashboard.GatewayProxy.Requester
using System.Net.Http;

namespace DotNetCore.CAP.Dashboard.GatewayProxy.Requester
{
public interface IHttpClientBuilder
{


+ 4
- 8
src/DotNetCore.CAP/Dashboard/GatewayProxy/Requester/MemoryHttpClientCache.cs 查看文件

@@ -9,8 +9,7 @@ namespace DotNetCore.CAP.Dashboard.GatewayProxy.Requester

public void Set(string id, IHttpClient client, TimeSpan expirationTime)
{
ConcurrentQueue<IHttpClient> connectionQueue;
if (_httpClientsCache.TryGetValue(id, out connectionQueue))
if (_httpClientsCache.TryGetValue(id, out var connectionQueue))
{
connectionQueue.Enqueue(client);
}
@@ -24,15 +23,13 @@ namespace DotNetCore.CAP.Dashboard.GatewayProxy.Requester

public bool Exists(string id)
{
ConcurrentQueue<IHttpClient> connectionQueue;
return _httpClientsCache.TryGetValue(id, out connectionQueue);
return _httpClientsCache.TryGetValue(id, out _);
}

public IHttpClient Get(string id)
{
IHttpClient client = null;
ConcurrentQueue<IHttpClient> connectionQueue;
if (_httpClientsCache.TryGetValue(id, out connectionQueue))
if (_httpClientsCache.TryGetValue(id, out var connectionQueue))
{
connectionQueue.TryDequeue(out client);
}
@@ -41,8 +38,7 @@ namespace DotNetCore.CAP.Dashboard.GatewayProxy.Requester

public void Remove(string id)
{
ConcurrentQueue<IHttpClient> connectionQueue;
_httpClientsCache.TryRemove(id, out connectionQueue);
_httpClientsCache.TryRemove(id, out _);
}
}
}

+ 6
- 25
src/DotNetCore.CAP/Dashboard/HtmlHelper.cs 查看文件

@@ -19,8 +19,7 @@ namespace DotNetCore.CAP.Dashboard

public HtmlHelper(RazorPage page)
{
if (page == null) throw new ArgumentNullException(nameof(page));
_page = page;
_page = page ?? throw new ArgumentNullException(nameof(page));
}

public NonEscapedString Breadcrumbs(string title, IDictionary<string, string> items)
@@ -35,10 +34,7 @@ namespace DotNetCore.CAP.Dashboard
{
return SidebarMenu(MessagesSidebarMenu.PublishedItems);
}
else
{
return SidebarMenu(MessagesSidebarMenu.ReceivedItems);
}
return SidebarMenu(MessagesSidebarMenu.ReceivedItems);
}

public NonEscapedString SidebarMenu(IEnumerable<Func<RazorPage, MenuItem>> items)
@@ -198,11 +194,9 @@ namespace DotNetCore.CAP.Dashboard
#region MethodEscaped
public NonEscapedString MethodEscaped(MethodInfo method)
{
var outputString = string.Empty;

var @public = WrapKeyword("public");
var @async = string.Empty;
var @return = string.Empty;
string @return;

var isAwaitable = CoercedAwaitableInfo.IsTypeAwaitable(method.ReturnType, out var coercedAwaitableInfo);
if (isAwaitable)
@@ -221,7 +215,6 @@ namespace DotNetCore.CAP.Dashboard

string paramType = null;
string paramName = null;
string paramString = string.Empty;

var @params = method.GetParameters();
if (@params.Length == 1)
@@ -232,16 +225,9 @@ namespace DotNetCore.CAP.Dashboard
paramName = firstParam.Name;
}

if (paramType == null)
{
paramString = "();";
}
else
{
paramString = $"({paramType} {paramName});";
}
var paramString = paramType == null ? "();" : $"({paramType} {paramName});";

outputString = @public + " " + (string.IsNullOrEmpty(@async) ? "" : @async + " ") + @return + " " + @name + paramString;
var outputString = @public + " " + (string.IsNullOrEmpty(@async) ? "" : @async + " ") + @return + " " + @name + paramString;

return new NonEscapedString(outputString);
}
@@ -261,7 +247,7 @@ namespace DotNetCore.CAP.Dashboard
{
return WrapType(type.Name);
}
if (type.IsPrimitive || type.Equals(typeof(string)) || type.Equals(typeof(decimal)))
if (type.IsPrimitive || type == typeof(string) || type == typeof(decimal))
{
return WrapKeyword(type.Name.ToLower());
}
@@ -286,11 +272,6 @@ namespace DotNetCore.CAP.Dashboard
return Span("type", value);
}

private string WrapString(string value)
{
return Span("string", value);
}

private string Span(string @class, string value)
{
return $"<span class=\"{@class}\">{value}</span>";


+ 0
- 2
src/DotNetCore.CAP/Dashboard/JobHistoryRenderer.cs 查看文件

@@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using DotNetCore.CAP.Infrastructure;
using DotNetCore.CAP.Processor.States;
using Newtonsoft.Json;

namespace DotNetCore.CAP.Dashboard
{


+ 0
- 3
src/DotNetCore.CAP/Dashboard/JsonDispatcher.cs 查看文件

@@ -23,9 +23,6 @@ namespace DotNetCore.CAP.Dashboard

public async Task Dispatch(DashboardContext context)
{
var request = context.Request;
var response = context.Response;

string serialized = null;
if (_command != null)
{


+ 1
- 1
src/DotNetCore.CAP/Dashboard/Pages/BlockMetric.cs 查看文件

@@ -1,6 +1,6 @@
namespace DotNetCore.CAP.Dashboard.Pages
{
partial class BlockMetric
internal partial class BlockMetric
{
public BlockMetric(DashboardMetric dashboardMetric)
{


+ 1
- 1
src/DotNetCore.CAP/Dashboard/Pages/Breadcrumbs.cs 查看文件

@@ -2,7 +2,7 @@

namespace DotNetCore.CAP.Dashboard.Pages
{
partial class Breadcrumbs
internal partial class Breadcrumbs
{
public Breadcrumbs(string title, IDictionary<string, string> items)
{


+ 3
- 4
src/DotNetCore.CAP/Dashboard/Pages/NodePage.cs 查看文件

@@ -1,13 +1,12 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using DotNetCore.CAP.NodeDiscovery;
using Microsoft.Extensions.DependencyInjection;

namespace DotNetCore.CAP.Dashboard.Pages
{
partial class NodePage
internal partial class NodePage
{
private IList<Node> _nodes = null;
private IList<Node> _nodes;
private INodeDiscoveryProvider _discoveryProvider;

public NodePage()


+ 3
- 6
src/DotNetCore.CAP/Dashboard/Pages/PublishedPage.cs 查看文件

@@ -14,18 +14,15 @@ namespace DotNetCore.CAP.Dashboard.Pages

public int GetTotal(IMonitoringApi api)
{
if (String.Compare(StatusName, SucceededState.StateName, true) == 0)
if (string.Equals(StatusName, SucceededState.StateName, StringComparison.CurrentCultureIgnoreCase))
{
return api.PublishedSucceededCount();
}
else if (String.Compare(StatusName, ProcessingState.StateName, true) == 0)
if (string.Equals(StatusName, ProcessingState.StateName, StringComparison.CurrentCultureIgnoreCase))
{
return api.PublishedProcessingCount();
}
else
{
return api.PublishedFailedCount();
}
return api.PublishedFailedCount();
}
}
}

+ 12
- 2
src/DotNetCore.CAP/Dashboard/Pages/PublishedPage.cshtml 查看文件

@@ -32,7 +32,7 @@

<div class="row">
<div class="col-md-3">
@Html.JobsSidebar(MessageType.Publish)
@Html.MessagesSidebar(MessageType.Publish)
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.PublishedPage_Title</h1>
@@ -67,7 +67,7 @@
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_RequeueJobs
@Strings.Common_RequeueMessages
</button>

@Html.PerPageSelector(pager)
@@ -83,6 +83,10 @@
<th>@Strings.MessagesPage_Table_Code</th>
<th>@Strings.MessagesPage_Table_Name</th>
<th class="min-width">@Strings.MessagesPage_Table_Retries</th>
@if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
{
<th>@Strings.MessagesPage_Table_State</th>
}
<th class="align-right">@Strings.MessagesPage_Table_ExpiresAt</th>
</tr>
</thead>
@@ -102,6 +106,12 @@
<td>
@message.Retries
</td>
@if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
{
<td>
@message.StatusName
</td>
}
<td class="align-right">
@if (message.ExpiresAt.HasValue)
{


+ 443
- 385
src/DotNetCore.CAP/Dashboard/Pages/PublishedPage1.generated.cs 查看文件

@@ -11,46 +11,46 @@

namespace DotNetCore.CAP.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\PublishedPage.cshtml"
#line 2 "..\..\PublishedPage.cshtml"
using System;
#line default
#line hidden
#line default
#line hidden
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 4 "..\..\Dashboard\Pages\PublishedPage.cshtml"
#line 4 "..\..\PublishedPage.cshtml"
using DotNetCore.CAP.Dashboard;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\PublishedPage.cshtml"
#line default
#line hidden
#line 6 "..\..\PublishedPage.cshtml"
using DotNetCore.CAP.Dashboard.Monitoring;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\PublishedPage.cshtml"
#line default
#line hidden
#line 5 "..\..\PublishedPage.cshtml"
using DotNetCore.CAP.Dashboard.Pages;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\PublishedPage.cshtml"
#line default
#line hidden
#line 7 "..\..\PublishedPage.cshtml"
using DotNetCore.CAP.Dashboard.Resources;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\PublishedPage.cshtml"
#line default
#line hidden
#line 3 "..\..\PublishedPage.cshtml"
using DotNetCore.CAP.Models;
#line default
#line hidden
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class PublishedPage : RazorPage
{
@@ -60,7 +60,7 @@ namespace DotNetCore.CAP.Dashboard.Pages
{


WriteLiteral("\r\n");
WriteLiteral("\r\n");



@@ -70,438 +70,496 @@ WriteLiteral("\r\n");



#line 9 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Layout = new LayoutPage(Strings.PublishedMessagesPage_Title);

int from, perPage;
#line 9 "..\..\PublishedPage.cshtml"

int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
string name = Query("name");
string content = Query("content");
Layout = new LayoutPage(Strings.PublishedMessagesPage_Title);

var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, GetTotal(monitor));
var queryDto = new MessageQueryDto
{
MessageType = MessageType.Publish,
Name = name,
Content = content,
StatusName = StatusName,
CurrentPage = pager.CurrentPage - 1,
PageSize = pager.RecordsPerPage
};
var succeededMessages = monitor.Messages(queryDto);
int from, perPage;

int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
string name = Query("name");
string content = Query("content");

#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, GetTotal(monitor));
var queryDto = new MessageQueryDto
{
MessageType = MessageType.Publish,
Name = name,
Content = content,
StatusName = StatusName,
CurrentPage = pager.CurrentPage - 1,
PageSize = pager.RecordsPerPage
};
var succeededMessages = monitor.Messages(queryDto);


#line 35 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Html.MessagesSidebar(MessageType.Publish));

#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");


#line 38 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.PublishedPage_Title);

#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 35 "..\..\PublishedPage.cshtml"
Write(Html.MessagesSidebar(MessageType.Publish));


#line 40 "..\..\Dashboard\Pages\PublishedPage.cshtml"
if (succeededMessages.Count == 0)
{
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");

#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");


#line 43 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_NoMessages);
#line 38 "..\..\PublishedPage.cshtml"
Write(Strings.PublishedPage_Title);

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

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

#line 45 "..\..\Dashboard\Pages\PublishedPage.cshtml"
}
else
{

#line default
#line hidden
WriteLiteral(@" <div class=""js-jobs-list"">
<div class=""btn-toolbar btn-toolbar-top"">
<form class=""row"">
<span class=""col-md-3"">
<input type=""text"" class=""form-control"" name=""name"" value=""");

#line 40 "..\..\PublishedPage.cshtml"
if (succeededMessages.Count == 0)
{

#line 52 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Query("name"));

#line default
#line hidden
WriteLiteral("\" placeholder=\"");
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");


#line 52 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageName);
#line 43 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_NoMessages);

#line default
#line hidden
WriteLiteral("\" />\r\n </span>\r\n <div class=\"col-md" +
"-5\">\r\n <div class=\"input-group\">\r\n " +
" <input type=\"text\" class=\"form-control\" name=\"content\" value=\"");

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

#line 56 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Query("content"));

#line default
#line hidden
WriteLiteral("\" placeholder=\"");

#line 45 "..\..\PublishedPage.cshtml"
}
else
{

#line 56 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageBody);

#line default
#line hidden
WriteLiteral("\" />\r\n <span class=\"input-group-btn\">\r\n " +
" <button class=\"btn btn-info\">");
#line default
#line hidden
WriteLiteral(" <div class=\"js-jobs-list\">\r\n <div class=\"btn-toolbar btn-toolb" +
"ar-top\">\r\n <form class=\"row\">\r\n <span class=\"c" +
"ol-md-3\">\r\n <input type=\"text\" class=\"form-control\" name=" +
"\"name\" value=\"");


#line 58 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Query_Button);

#line default
#line hidden
WriteLiteral(@"</button>
</span>
</div>
#line 52 "..\..\PublishedPage.cshtml"
Write(Query(" name"));


#line default
#line hidden
WriteLiteral("\" placeholder=\"");



#line 52 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageName);


#line default
#line hidden
WriteLiteral("\" />\r\n </span>\r\n <div class=\"col-md-5\">\r\n " +
" <div class=\"input-group\">\r\n <in" +
"put type=\"text\" class=\"form-control\" name=\"content\" value=\"");



#line 56 "..\..\PublishedPage.cshtml"
Write(Query(" content"));


#line default
#line hidden
WriteLiteral("\" placeholder=\"");



#line 56 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageBody);


#line default
#line hidden
WriteLiteral("\" />\r\n <span class=\"input-group-btn\">\r\n " +
" <button class=\"btn btn-info\">");



#line 58 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Query_Button);


#line default
#line hidden
WriteLiteral(@"</button>
</span>
</div>
</form>
</div>
<div class=""btn-toolbar btn-toolbar-top"">
<button class=""js-jobs-list-command btn btn-sm btn-primary""
data-url=""");
</div>
</form>
</div>
<div class=""btn-toolbar btn-toolbar-top"">
<button class=""js-jobs-list-command btn btn-sm btn-primary""
data-url=""");


#line 66 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Url.To("/published/requeue"));

#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 66 "..\..\PublishedPage.cshtml"
Write(Url.To("/published/requeue"));


#line 67 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.Common_Enqueueing);
#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");

#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-repeat\"></span>\r\n ");


#line 70 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.Common_RequeueJobs);
#line 67 "..\..\PublishedPage.cshtml"
Write(Strings.Common_Enqueueing);

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

#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <span class=\"glyphicon g" +
"lyphicon-repeat\"></span>\r\n ");

#line 73 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Html.PerPageSelector(pager));

#line default
#line hidden
WriteLiteral(@"
</div>

<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th style=""width:60px;"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th>");
#line 70 "..\..\PublishedPage.cshtml"
Write(Strings.Common_RequeueMessages);


#line 83 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_Code);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");

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


#line 84 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_Name);
#line 73 "..\..\PublishedPage.cshtml"
Write(Html.PerPageSelector(pager));

#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");

#line default
#line hidden
WriteLiteral(@"
</div>

#line 85 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_Retries);
<div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th style=""width:60px;"">
<input type=""checkbox"" class=""js-jobs-list-select-all"" />
</th>
<th>");

#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");


#line 86 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_ExpiresAt);

#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line 83 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_Code);


#line 90 "..\..\Dashboard\Pages\PublishedPage.cshtml"
foreach (var message in succeededMessages)
{
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");

#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row hover\">\r\n " +
" <td>\r\n <input typ" +
"e=\"checkbox\" class=\"js-jobs-list-checkbox\" name=\"messages[]\" value=\"");


#line 94 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(message.Id);
#line 84 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_Name);

#line default
#line hidden
WriteLiteral("\" />\r\n </td>\r\n " +
" <td class=\"word-break\">\r\n <a href=\"ja" +
"vascript:;\" data-url=\'");

#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");

#line 97 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Url.To("/published/message/")+message.Id);

#line default
#line hidden
WriteLiteral("\' class=\"openModal\">#");


#line 97 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(message.Id);

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


#line 100 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(message.Name);

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

#line 85 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_Retries);

#line 103 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(message.Retries);

#line default
#line hidden
WriteLiteral("\r\n </td>\r\n " +
"<td class=\"align-right\">\r\n");
#line default
#line hidden
WriteLiteral("</th>\r\n");


#line 106 "..\..\Dashboard\Pages\PublishedPage.cshtml"
if (message.ExpiresAt.HasValue)
{
#line default
#line hidden
#line 108 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Html.RelativeTime(message.ExpiresAt.Value));

#line default
#line hidden
#line 108 "..\..\Dashboard\Pages\PublishedPage.cshtml"
}

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


#line 113 "..\..\Dashboard\Pages\PublishedPage.cshtml"
}
#line 86 "..\..\PublishedPage.cshtml"
if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
{

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


#line 117 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Html.Paginator(pager));

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


#line 119 "..\..\Dashboard\Pages\PublishedPage.cshtml"


#line default
#line hidden
WriteLiteral(@" <div>
<div class=""modal fade"" tabindex=""-1"" role=""dialog"">
<div class=""modal-dialog"" role=""document"">
<div class=""modal-content"">
<div class=""modal-header"">
<button type=""button"" class=""close"" data-dismiss=""modal"" aria-label=""Close""><span aria-hidden=""true"">&times;</span></button>
<h4 class=""modal-title"">Message Content</h4>
</div>
<div id=""jsonContent"" style=""max-height:500px;overflow-y:auto;"" class=""modal-body"">
</div>
<div class=""modal-footer"">
<button type=""button"" class=""btn btn-sm btn-primary"" id=""formatBtn"" onclick="""">");


#line 131 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Modal_Format);

#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"rawBtn\" onclick=\"\">");


#line 132 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Modal_Raw);

#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"expandBtn\" onclick=\"\">");


#line 133 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Modal_Expand);

#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"collapseBtn\" onclick=\"\">");


#line 134 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_Model_Collaspse);

#line default
#line hidden
WriteLiteral("</button>\r\n </div>\r\n </div><!--" +
" /.modal-content -->\r\n </div><!-- /.modal-dialog -->\r\n " +
" </div><!-- /.modal -->\r\n </div>\r\n");

#line default
#line hidden
WriteLiteral(" <th>");

#line 140 "..\..\Dashboard\Pages\PublishedPage.cshtml"
}

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

#line 88 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_State);


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



#line 89 "..\..\PublishedPage.cshtml"
}


#line default
#line hidden
WriteLiteral(" <th class=\"align-right\">");



#line 90 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Table_ExpiresAt);


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



#line 94 "..\..\PublishedPage.cshtml"
foreach (var message in succeededMessages)
{


#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row hover\">\r\n " +
" <td>\r\n <input type=\"checkbox\" class=\"js-j" +
"obs-list-checkbox\" name=\"messages[]\" value=\"");



#line 98 "..\..\PublishedPage.cshtml"
Write(message.Id);


#line default
#line hidden
WriteLiteral("\" />\r\n </td>\r\n <td class=\"w" +
"ord-break\">\r\n <a href=\"javascript:;\" data-url=\'");



#line 101 "..\..\PublishedPage.cshtml"
Write(Url.To("/published/message/") + message.Id);


#line default
#line hidden
WriteLiteral("\' class=\"openModal\">#");



#line 101 "..\..\PublishedPage.cshtml"
Write(message.Id);


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



#line 104 "..\..\PublishedPage.cshtml"
Write(message.Name);


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



#line 107 "..\..\PublishedPage.cshtml"
Write(message.Retries);


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



#line 109 "..\..\PublishedPage.cshtml"
if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
{


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



#line 112 "..\..\PublishedPage.cshtml"
Write(message.StatusName);


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



#line 114 "..\..\PublishedPage.cshtml"
}


#line default
#line hidden
WriteLiteral(" <td class=\"align-right\">\r\n");



#line 116 "..\..\PublishedPage.cshtml"
if (message.ExpiresAt.HasValue)
{


#line default
#line hidden

#line 118 "..\..\PublishedPage.cshtml"
Write(Html.RelativeTime(message.ExpiresAt.Value));


#line default
#line hidden

#line 118 "..\..\PublishedPage.cshtml"

}


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



#line 123 "..\..\PublishedPage.cshtml"
}


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



#line 127 "..\..\PublishedPage.cshtml"
Write(Html.Paginator(pager));


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



#line 129 "..\..\PublishedPage.cshtml"



#line default
#line hidden
WriteLiteral(@" <div>
<div class=""modal fade"" tabindex=""-1"" role=""dialog"">
<div class=""modal-dialog"" role=""document"">
<div class=""modal-content"">
<div class=""modal-header"">
<button type=""button"" class=""close"" data-dismiss=""modal"" aria-label=""Close""><span aria-hidden=""true"">&times;</span></button>
<h4 class=""modal-title"">Message Content</h4>
</div>
<div id=""jsonContent"" style=""max-height:500px;overflow-y:auto;"" class=""modal-body"">
</div>
<div class=""modal-footer"">
<button type=""button"" class=""btn btn-sm btn-primary"" id=""formatBtn"" onclick="""">");



#line 141 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Modal_Format);


#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-sm bt" +
"n-primary\" id=\"rawBtn\" onclick=\"\">");



#line 142 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Modal_Raw);


#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-sm bt" +
"n-primary\" id=\"expandBtn\" onclick=\"\">");



#line 143 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Modal_Expand);


#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-sm bt" +
"n-primary\" id=\"collapseBtn\" onclick=\"\">");



#line 144 "..\..\PublishedPage.cshtml"
Write(Strings.MessagesPage_Model_Collaspse);


#line default
#line hidden
WriteLiteral("</button>\r\n </div>\r\n </div><!-- /.modal" +
"-content -->\r\n </div><!-- /.modal-dialog -->\r\n </div><" +
"!-- /.modal -->\r\n </div>\r\n");



#line 150 "..\..\PublishedPage.cshtml"
}


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


}


+ 3
- 6
src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.cs 查看文件

@@ -14,18 +14,15 @@ namespace DotNetCore.CAP.Dashboard.Pages

public int GetTotal(IMonitoringApi api)
{
if (String.Compare(StatusName, SucceededState.StateName, true) == 0)
if (string.Equals(StatusName, SucceededState.StateName, StringComparison.CurrentCultureIgnoreCase))
{
return api.ReceivedSucceededCount();
}
else if (String.Compare(StatusName, ProcessingState.StateName, true) == 0)
if (string.Equals(StatusName, ProcessingState.StateName, StringComparison.CurrentCultureIgnoreCase))
{
return api.ReceivedProcessingCount();
}
else
{
return api.ReceivedFailedCount();
}
return api.ReceivedFailedCount();
}
}
}

+ 13
- 3
src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.cshtml 查看文件

@@ -22,7 +22,7 @@
var queryDto = new MessageQueryDto
{
MessageType = MessageType.Subscribe,
Group =group,
Group = group,
Name = name,
Content = content,
StatusName = StatusName,
@@ -34,7 +34,7 @@

<div class="row">
<div class="col-md-3">
@Html.JobsSidebar(MessageType.Subscribe)
@Html.MessagesSidebar(MessageType.Subscribe)
</div>
<div class="col-md-9">
<h1 class="page-header">@Strings.ReceivedPage_Title</h1>
@@ -72,7 +72,7 @@
data-loading-text="@Strings.Common_Enqueueing"
disabled="disabled">
<span class="glyphicon glyphicon-repeat"></span>
@Strings.Common_RequeueJobs
@Strings.Common_ReConsume
</button>

@Html.PerPageSelector(pager)
@@ -89,6 +89,10 @@
<th>@Strings.MessagesPage_Table_Group</th>
<th>@Strings.MessagesPage_Table_Name</th>
<th class="min-width">@Strings.MessagesPage_Table_Retries</th>
@if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
{
<th>@Strings.MessagesPage_Table_State</th>
}
<th class="align-right">@Strings.MessagesPage_Table_ExpiresAt</th>
</tr>
</thead>
@@ -111,6 +115,12 @@
<td>
@message.Retries
</td>
@if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
{
<td>
@message.StatusName
</td>
}
<td class="align-right">
@if (message.ExpiresAt.HasValue)
{


+ 421
- 359
src/DotNetCore.CAP/Dashboard/Pages/ReceivedPage.generated.cs 查看文件

@@ -11,46 +11,46 @@

namespace DotNetCore.CAP.Dashboard.Pages
{
#line 2 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
#line 2 "..\..\ReceivedPage.cshtml"
using System;
#line default
#line hidden
#line default
#line hidden
using System.Collections.Generic;
using System.Linq;
using System.Text;
#line 4 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
#line 4 "..\..\ReceivedPage.cshtml"
using DotNetCore.CAP.Dashboard;
#line default
#line hidden
#line 6 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
#line default
#line hidden
#line 6 "..\..\ReceivedPage.cshtml"
using DotNetCore.CAP.Dashboard.Monitoring;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
#line default
#line hidden
#line 5 "..\..\ReceivedPage.cshtml"
using DotNetCore.CAP.Dashboard.Pages;
#line default
#line hidden
#line 7 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
#line default
#line hidden
#line 7 "..\..\ReceivedPage.cshtml"
using DotNetCore.CAP.Dashboard.Resources;
#line default
#line hidden
#line 3 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
#line default
#line hidden
#line 3 "..\..\ReceivedPage.cshtml"
using DotNetCore.CAP.Models;
#line default
#line hidden
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class ReceivedPage : RazorPage
{
@@ -60,7 +60,7 @@ namespace DotNetCore.CAP.Dashboard.Pages
{


WriteLiteral("\r\n");
WriteLiteral("\r\n");



@@ -70,170 +70,170 @@ WriteLiteral("\r\n");



#line 9 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Layout = new LayoutPage(Strings.ReceivedMessagesPage_Title);

int from, perPage;
#line 9 "..\..\ReceivedPage.cshtml"

int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
string group = Query("group");
string name = Query("name");
string content = Query("content");
Layout = new LayoutPage(Strings.ReceivedMessagesPage_Title);

var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, GetTotal(monitor));
var queryDto = new MessageQueryDto
{
MessageType = MessageType.Subscribe,
Group =group,
Name = name,
Content = content,
StatusName = StatusName,
CurrentPage = pager.CurrentPage - 1,
PageSize = pager.RecordsPerPage
};
var succeededMessages = monitor.Messages(queryDto);
int from, perPage;

int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
string group = Query("group");
string name = Query("name");
string content = Query("content");

#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");
var monitor = Storage.GetMonitoringApi();
var pager = new Pager(from, perPage, GetTotal(monitor));
var queryDto = new MessageQueryDto
{
MessageType = MessageType.Subscribe,
Group = group,
Name = name,
Content = content,
StatusName = StatusName,
CurrentPage = pager.CurrentPage - 1,
PageSize = pager.RecordsPerPage
};
var succeededMessages = monitor.Messages(queryDto);


#line 37 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Html.MessagesSidebar(MessageType.Subscribe));

#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n ");


#line 40 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.ReceivedPage_Title);

#line default
#line hidden
WriteLiteral("</h1>\r\n\r\n");
#line 37 "..\..\ReceivedPage.cshtml"
Write(Html.MessagesSidebar(MessageType.Subscribe));


#line 42 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
if (succeededMessages.Count == 0)
{
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">");

#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");


#line 45 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_NoMessages);
#line 40 "..\..\ReceivedPage.cshtml"
Write(Strings.ReceivedPage_Title);

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

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



#line 42 "..\..\ReceivedPage.cshtml"
if (succeededMessages.Count == 0)
{


#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n ");



#line 45 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_NoMessages);

#line 47 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
}
else
{

#line default
#line hidden
WriteLiteral(@" <div class=""js-jobs-list"">
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");



#line 47 "..\..\ReceivedPage.cshtml"
}
else
{


#line default
#line hidden
WriteLiteral(@" <div class=""js-jobs-list"">
<div class=""btn-toolbar btn-toolbar-top"">
<form class=""row"">
<span class=""col-md-2"">
<input type=""text"" class=""form-control"" name=""name"" value=""");
<input type=""text"" class=""form-control"" name=""group"" value=""");



#line 54 "..\..\ReceivedPage.cshtml"
Write(Query("group"));


#line default
#line hidden
WriteLiteral("\" placeholder=\"");



#line 54 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageGroup);


#line default
#line hidden
WriteLiteral("\" />\r\n </span>\r\n <span class=\"col-m" +
"d-3\">\r\n <input type=\"text\" class=\"form-control\" name=" +
"\"name\" value=\"");


#line 54 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Query("group"));

#line default
#line hidden
WriteLiteral("\" placeholder=\"");
#line 57 "..\..\ReceivedPage.cshtml"
Write(Query("name"));


#line 54 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageGroup);
#line default
#line hidden
WriteLiteral("\" placeholder=\"");

#line default
#line hidden
WriteLiteral("\" />\r\n </span>\r\n <span class=\"col-m" +
"d-3\">\r\n <input type=\"text\" class=\"form-control\" name=" +
"\"name\" value=\"");


#line 57 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Query("name"));
#line 57 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageName);

#line default
#line hidden
WriteLiteral("\" placeholder=\"");

#line default
#line hidden
WriteLiteral("\" />\r\n </span>\r\n <div class=\"col-md" +
"-5\">\r\n <div class=\"input-group\">\r\n " +
" <input type=\"text\" class=\"form-control\" name=\"content\" value=\"");

#line 57 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageName);

#line default
#line hidden
WriteLiteral("\" />\r\n </span>\r\n <div class=\"col-md" +
"-5\">\r\n <div class=\"input-group\">\r\n " +
" <input type=\"text\" class=\"form-control\" name=\"content\" value=\"");

#line 61 "..\..\ReceivedPage.cshtml"
Write(Query("content"));

#line 61 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Query("content"));

#line default
#line hidden
WriteLiteral("\" placeholder=\"");
#line default
#line hidden
WriteLiteral("\" placeholder=\"");


#line 61 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageBody);

#line default
#line hidden
WriteLiteral("\" />\r\n <span class=\"input-group-btn\">\r\n " +
" <button class=\"btn btn-info\">");
#line 61 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Query_MessageBody);


#line 63 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Query_Button);
#line default
#line hidden
WriteLiteral("\" />\r\n <span class=\"input-group-btn\">\r\n " +
" <button class=\"btn btn-info\">");

#line default
#line hidden
WriteLiteral(@"</button>


#line 63 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Query_Button);


#line default
#line hidden
WriteLiteral(@"</button>
</span>
</div>
</div>
@@ -244,45 +244,45 @@ WriteLiteral(@"</button>
data-url=""");


#line 71 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Url.To("/received/requeue"));

#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");
#line 71 "..\..\ReceivedPage.cshtml"
Write(Url.To("/received/requeue"));


#line default
#line hidden
WriteLiteral("\"\r\n data-loading-text=\"");



#line 72 "..\..\ReceivedPage.cshtml"
Write(Strings.Common_Enqueueing);


#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-repeat\"></span>\r\n ");


#line 72 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.Common_Enqueueing);

#line default
#line hidden
WriteLiteral("\"\r\n disabled=\"disabled\">\r\n <spa" +
"n class=\"glyphicon glyphicon-repeat\"></span>\r\n ");
#line 75 "..\..\ReceivedPage.cshtml"
Write(Strings.Common_ReConsume);


#line 75 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.Common_RequeueJobs);
#line default
#line hidden
WriteLiteral("\r\n </button>\r\n\r\n ");


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

#line 78 "..\..\ReceivedPage.cshtml"
Write(Html.PerPageSelector(pager));

#line 78 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Html.PerPageSelector(pager));

#line default
#line hidden
WriteLiteral(@"
#line default
#line hidden
WriteLiteral(@"
</div>

<div class=""table-responsive"">
@@ -295,192 +295,254 @@ WriteLiteral(@"
<th>");


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

#line default
#line hidden
WriteLiteral("</th>\r\n <th>");
#line 88 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_Code);


#line 89 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_Group);
#line default
#line hidden
WriteLiteral("</th>\r\n <th>");

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


#line 90 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_Name);
#line 89 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_Group);

#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");

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

#line 91 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_Retries);

#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"align-right\">");

#line 90 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_Name);

#line 92 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_ExpiresAt);

#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");
#line default
#line hidden
WriteLiteral("</th>\r\n <th class=\"min-width\">");


#line 96 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
foreach (var message in succeededMessages)
{

#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row hover\">\r\n " +
" <td>\r\n <input typ" +
"e=\"checkbox\" class=\"js-jobs-list-checkbox\" name=\"messages[]\" value=\"");
#line 91 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_Retries);


#line 100 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(message.Id);
#line default
#line hidden
WriteLiteral("</th>\r\n");

#line default
#line hidden
WriteLiteral("\" />\r\n </td>\r\n " +
" <td class=\"word-break\">\r\n <a href=\"ja" +
"vascript:;\" data-url=\'");


#line 103 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Url.To("/received/message/")+message.Id);
#line 92 "..\..\ReceivedPage.cshtml"
if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
{

#line default
#line hidden
WriteLiteral("\' class=\"openModal\">#");

#line default
#line hidden
WriteLiteral(" <th>");

#line 103 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(message.Id);

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

#line 94 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_State);

#line 106 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(message.Group);

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


#line 109 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(message.Name);

#line default
#line hidden
WriteLiteral("\r\n </td>\r\n " +
"<td>\r\n ");
#line 95 "..\..\ReceivedPage.cshtml"
}


#line default
#line hidden
WriteLiteral(" <th class=\"align-right\">");


#line 112 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(message.Retries);

#line default
#line hidden
WriteLiteral("\r\n </td>\r\n " +
"<td class=\"align-right\">\r\n");
#line 96 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Table_ExpiresAt);


#line 115 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
if (message.ExpiresAt.HasValue)
{
#line default
#line hidden
#line 117 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Html.RelativeTime(message.ExpiresAt.Value));
#line default
#line hidden
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " +
" <tbody>\r\n");

#line default
#line hidden
#line 117 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
}

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

#line 100 "..\..\ReceivedPage.cshtml"
foreach (var message in succeededMessages)
{

#line 122 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
}

#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n <" +
"/div>\r\n ");
#line default
#line hidden
WriteLiteral(" <tr class=\"js-jobs-list-row hover\">\r\n " +
" <td>\r\n <input typ" +
"e=\"checkbox\" class=\"js-jobs-list-checkbox\" name=\"messages[]\" value=\"");


#line 126 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Html.Paginator(pager));

#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 104 "..\..\ReceivedPage.cshtml"
Write(message.Id);


#line 128 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
#line default
#line hidden
WriteLiteral("\" />\r\n </td>\r\n " +
" <td class=\"word-break\">\r\n <a href=\"ja" +
"vascript:;\" data-url=\'");


#line default
#line hidden
WriteLiteral(@" <div>

#line 107 "..\..\ReceivedPage.cshtml"
Write(Url.To("/received/message/") + message.Id);


#line default
#line hidden
WriteLiteral("\' class=\"openModal\">#");



#line 107 "..\..\ReceivedPage.cshtml"
Write(message.Id);


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



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


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



#line 113 "..\..\ReceivedPage.cshtml"
Write(message.Name);


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



#line 116 "..\..\ReceivedPage.cshtml"
Write(message.Retries);


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



#line 118 "..\..\ReceivedPage.cshtml"
if (string.Equals(StatusName, "Processing", StringComparison.CurrentCultureIgnoreCase))
{


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



#line 121 "..\..\ReceivedPage.cshtml"
Write(message.StatusName);


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



#line 123 "..\..\ReceivedPage.cshtml"
}


#line default
#line hidden
WriteLiteral(" <td class=\"align-right\">\r\n");



#line 125 "..\..\ReceivedPage.cshtml"
if (message.ExpiresAt.HasValue)
{


#line default
#line hidden

#line 127 "..\..\ReceivedPage.cshtml"
Write(Html.RelativeTime(message.ExpiresAt.Value));


#line default
#line hidden

#line 127 "..\..\ReceivedPage.cshtml"

}


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



#line 132 "..\..\ReceivedPage.cshtml"
}


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



#line 136 "..\..\ReceivedPage.cshtml"
Write(Html.Paginator(pager));


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



#line 138 "..\..\ReceivedPage.cshtml"



#line default
#line hidden
WriteLiteral(@" <div>
<div class=""modal fade"" tabindex=""-1"" role=""dialog"">
<div class=""modal-dialog"" role=""document"">
<div class=""modal-content"">
@@ -494,59 +556,59 @@ WriteLiteral(@" <div>
<button type=""button"" class=""btn btn-sm btn-primary"" id=""formatBtn"" onclick="""">");


#line 140 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Modal_Format);

#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"rawBtn\" onclick=\"\">");
#line 150 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Modal_Format);


#line 141 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Modal_Raw);
#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"rawBtn\" onclick=\"\">");

#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"expandBtn\" onclick=\"\">");


#line 142 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Modal_Expand);
#line 151 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Modal_Raw);

#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"collapseBtn\" onclick=\"\">");

#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"expandBtn\" onclick=\"\">");

#line 143 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Model_Collaspse);

#line default
#line hidden
WriteLiteral("</button>\r\n </div>\r\n </div><!--" +
" /.modal-content -->\r\n </div><!-- /.modal-dialog -->\r\n " +
" </div><!-- /.modal -->\r\n </div>\r\n");

#line 152 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Modal_Expand);

#line 149 "..\..\Dashboard\Pages\ReceivedPage.cshtml"
}

#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
#line default
#line hidden
WriteLiteral("</button>\r\n <button type=\"button\" class=\"btn btn-s" +
"m btn-primary\" id=\"collapseBtn\" onclick=\"\">");



#line 153 "..\..\ReceivedPage.cshtml"
Write(Strings.MessagesPage_Model_Collaspse);


#line default
#line hidden
WriteLiteral("</button>\r\n </div>\r\n </div><!--" +
" /.modal-content -->\r\n </div><!-- /.modal-dialog -->\r\n " +
" </div><!-- /.modal -->\r\n </div>\r\n");



#line 159 "..\..\ReceivedPage.cshtml"
}


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


}


+ 2
- 3
src/DotNetCore.CAP/Dashboard/Pages/SidebarMenu.cs 查看文件

@@ -3,12 +3,11 @@ using System.Collections.Generic;

namespace DotNetCore.CAP.Dashboard.Pages
{
partial class SidebarMenu
internal partial class SidebarMenu
{
public SidebarMenu(IEnumerable<Func<RazorPage, MenuItem>> items)
{
if (items == null) throw new ArgumentNullException(nameof(items));
Items = items;
Items = items ?? throw new ArgumentNullException(nameof(items));
}

public IEnumerable<Func<RazorPage, MenuItem>> Items { get; }


+ 1
- 1
src/DotNetCore.CAP/Dashboard/Pages/SubscriberPage.cshtml 查看文件

@@ -39,7 +39,7 @@
{
var i = 0;
var rowCount = subscriber.Value.Count;
@foreach (var column in subscriber.Value)
foreach (var column in subscriber.Value)
{
<tr>
@if (i == 0)


+ 3
- 3
src/DotNetCore.CAP/Dashboard/RouteCollectionExtensions.cs 查看文件

@@ -44,13 +44,13 @@ namespace DotNetCore.CAP.Dashboard
public static void AddJsonResult(
this RouteCollection routes,
string pathTemplate,
Func<DashboardContext, string> Jsonfunc)
Func<DashboardContext, string> jsonfunc)
{
if (routes == null) throw new ArgumentNullException(nameof(routes));
if (pathTemplate == null) throw new ArgumentNullException(nameof(pathTemplate));
if (Jsonfunc == null) throw new ArgumentNullException(nameof(Jsonfunc));
if (jsonfunc == null) throw new ArgumentNullException(nameof(jsonfunc));

routes.Add(pathTemplate, new JsonDispatcher(Jsonfunc));
routes.Add(pathTemplate, new JsonDispatcher(jsonfunc));
}

public static void AddPublishBatchCommand(


+ 1
- 2
src/DotNetCore.CAP/Dashboard/UrlHelper.cs 查看文件

@@ -9,8 +9,7 @@ namespace DotNetCore.CAP.Dashboard

public UrlHelper(DashboardContext context)
{
if (context == null) throw new ArgumentNullException(nameof(context));
_context = context;
_context = context ?? throw new ArgumentNullException(nameof(context));
}

public string To(string relativePath)


+ 1
- 2
src/DotNetCore.CAP/IBootstrapper.Default.cs 查看文件

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

@@ -12,7 +11,7 @@ namespace DotNetCore.CAP
/// <summary>
/// Default implement of <see cref="IBootstrapper"/>.
/// </summary>
public class DefaultBootstrapper : IBootstrapper
internal class DefaultBootstrapper : IBootstrapper
{
private readonly ILogger<DefaultBootstrapper> _logger;
private readonly IApplicationLifetime _appLifetime;


+ 5
- 12
src/DotNetCore.CAP/IConsumerHandler.Default.cs 查看文件

@@ -8,20 +8,17 @@ using DotNetCore.CAP.Models;
using DotNetCore.CAP.Processor;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace DotNetCore.CAP
{
public class ConsumerHandler : IConsumerHandler, IDisposable
internal class ConsumerHandler : IConsumerHandler
{
private readonly IServiceProvider _serviceProvider;
private readonly IConsumerInvokerFactory _consumerInvokerFactory;
private readonly IConsumerClientFactory _consumerClientFactory;
private readonly ILogger _logger;

private readonly CancellationTokenSource _cts;
private readonly MethodMatcherCache _selector;
private readonly CapOptions _options;

private readonly TimeSpan _pollingDelay = TimeSpan.FromSeconds(1);

@@ -30,18 +27,14 @@ namespace DotNetCore.CAP

public ConsumerHandler(
IServiceProvider serviceProvider,
IConsumerInvokerFactory consumerInvokerFactory,
IConsumerClientFactory consumerClientFactory,
ILogger<ConsumerHandler> logger,
MethodMatcherCache selector,
IOptions<CapOptions> options)
MethodMatcherCache selector)
{
_selector = selector;
_logger = logger;
_serviceProvider = serviceProvider;
_consumerInvokerFactory = consumerInvokerFactory;
_consumerClientFactory = consumerClientFactory;
_options = options.Value;
_cts = new CancellationTokenSource();
}

@@ -99,7 +92,8 @@ namespace DotNetCore.CAP

using (var scope = _serviceProvider.CreateScope())
{
var receviedMessage = StoreMessage(scope, message);
StoreMessage(scope, message);

client.Commit();
}
Pulse();
@@ -111,7 +105,7 @@ namespace DotNetCore.CAP
};
}

private CapReceivedMessage StoreMessage(IServiceScope serviceScope, MessageContext messageContext)
private static void StoreMessage(IServiceScope serviceScope, MessageContext messageContext)
{
var provider = serviceScope.ServiceProvider;
var messageStore = provider.GetRequiredService<IStorageConnection>();
@@ -120,7 +114,6 @@ namespace DotNetCore.CAP
StatusName = StatusName.Scheduled,
};
messageStore.StoreReceivedMessageAsync(receivedMessage).GetAwaiter().GetResult();
return receivedMessage;
}

public void Pulse()


+ 1
- 0
src/DotNetCore.CAP/IProcessingServer.cs 查看文件

@@ -2,6 +2,7 @@

namespace DotNetCore.CAP
{
/// <inheritdoc />
/// <summary>
/// A process thread abstract of job process.
/// </summary>


+ 2
- 3
src/DotNetCore.CAP/IQueueExecutor.Publish.Base.cs 查看文件

@@ -41,7 +41,7 @@ namespace DotNetCore.CAP
var result = await PublishAsync(message.Name, message.Content);
sp.Stop();

var newState = default(IState);
IState newState;
if (!result.Succeeded)
{
var shouldRetry = await UpdateMessageForRetryAsync(message, connection);
@@ -78,11 +78,10 @@ namespace DotNetCore.CAP
}
}

private async Task<bool> UpdateMessageForRetryAsync(CapPublishedMessage message, IStorageConnection connection)
private static async Task<bool> UpdateMessageForRetryAsync(CapPublishedMessage message, IStorageConnection connection)
{
var retryBehavior = RetryBehavior.DefaultRetry;

var now = DateTime.Now;
var retries = ++message.Retries;
if (retries >= retryBehavior.RetryCount)
{


+ 1
- 1
src/DotNetCore.CAP/IQueueExecutor.Subscibe.cs 查看文件

@@ -47,7 +47,7 @@ namespace DotNetCore.CAP
var result = await ExecuteSubscribeAsync(message);
sp.Stop();

var newState = default(IState);
IState newState;
if (!result.Succeeded)
{
var shouldRetry = await UpdateMessageForRetryAsync(message, connection);


+ 8
- 9
src/DotNetCore.CAP/Infrastructure/Helper.cs 查看文件

@@ -57,8 +57,7 @@ namespace DotNetCore.CAP.Infrastructure

public static DateTime DeserializeDateTime(string value)
{
long timestamp;
if (long.TryParse(value, out timestamp))
if (long.TryParse(value, out var timestamp))
{
return FromTimestamp(timestamp);
}
@@ -102,13 +101,13 @@ namespace DotNetCore.CAP.Infrastructure
private static bool IsSimpleType(Type type)
{
return type.GetTypeInfo().IsPrimitive ||
type.Equals(typeof(decimal)) ||
type.Equals(typeof(string)) ||
type.Equals(typeof(DateTime)) ||
type.Equals(typeof(Guid)) ||
type.Equals(typeof(DateTimeOffset)) ||
type.Equals(typeof(TimeSpan)) ||
type.Equals(typeof(Uri));
type == typeof(decimal) ||
type == typeof(string) ||
type == typeof(DateTime) ||
type == typeof(Guid) ||
type == typeof(DateTimeOffset) ||
type == typeof(TimeSpan) ||
type == typeof(Uri);
}
}
}

+ 4
- 13
src/DotNetCore.CAP/Internal/IConsumerInvoker.Default.cs 查看文件

@@ -45,7 +45,7 @@ namespace DotNetCore.CAP.Internal
var jsonConent = _consumerContext.DeliverMessage.Content;
var message = serializer.DeSerialize<CapMessageDto>(jsonConent);

object result = null;
object result;
if (_executor.MethodParameters.Length > 0)
{
result = await ExecuteWithParameterAsync(obj, message.Content.ToString());
@@ -68,10 +68,7 @@ namespace DotNetCore.CAP.Internal
{
return await _executor.ExecuteAsync(@class);
}
else
{
return _executor.Execute(@class);
}
return _executor.Execute(@class);
}

private async Task<object> ExecuteWithParameterAsync(object @class, string parameterString)
@@ -87,15 +84,9 @@ namespace DotNetCore.CAP.Internal
{
return await _executor.ExecuteAsync(@class, bindResult.Model);
}
else
{
return _executor.Execute(@class, bindResult.Model);
}
}
else
{
throw new MethodBindException($"Parameters:{firstParameter.Name} bind failed! ParameterString is: {parameterString} ");
return _executor.Execute(@class, bindResult.Model);
}
throw new MethodBindException($"Parameters:{firstParameter.Name} bind failed! ParameterString is: {parameterString} ");
}
catch (FormatException ex)
{


+ 5
- 5
src/DotNetCore.CAP/Internal/IConsumerServiceSelector.Default.cs 查看文件

@@ -8,8 +8,9 @@ using Microsoft.Extensions.DependencyInjection;

namespace DotNetCore.CAP.Internal
{
/// <inheritdoc />
/// <summary>
/// A default <see cref="IConsumerServiceSelector"/> implementation.
/// A default <see cref="T:DotNetCore.CAP.Abstractions.IConsumerServiceSelector" /> implementation.
/// </summary>
public class DefaultConsumerServiceSelector : IConsumerServiceSelector
{
@@ -39,7 +40,7 @@ namespace DotNetCore.CAP.Internal

executorDescriptorList.AddRange(FindConsumersFromInterfaceTypes(_serviceProvider));

executorDescriptorList.AddRange(FindConsumersFromControllerTypes(_serviceProvider));
executorDescriptorList.AddRange(FindConsumersFromControllerTypes());

return executorDescriptorList;
}
@@ -67,8 +68,7 @@ namespace DotNetCore.CAP.Internal
}
}

private static IEnumerable<ConsumerExecutorDescriptor> FindConsumersFromControllerTypes(
IServiceProvider provider)
private static IEnumerable<ConsumerExecutorDescriptor> FindConsumersFromControllerTypes()
{
var executorDescriptorList = new List<ConsumerExecutorDescriptor>();

@@ -91,7 +91,7 @@ namespace DotNetCore.CAP.Internal
{
var topicAttrs = method.GetCustomAttributes<TopicAttribute>(true);

if (topicAttrs.Count() == 0) continue;
if (!topicAttrs.Any()) continue;

foreach (var attr in topicAttrs)
{


+ 1
- 1
src/DotNetCore.CAP/Internal/IModelBinder.SimpleType.cs 查看文件

@@ -73,7 +73,7 @@ namespace DotNetCore.CAP.Internal
// so we capture the inner exception.
exception = ExceptionDispatchInfo.Capture(exception.InnerException).SourceException;
}
throw exception;
throw;
}
}



+ 1
- 1
src/DotNetCore.CAP/Internal/ModelBinderFactory.cs 查看文件

@@ -88,7 +88,7 @@ namespace DotNetCore.CAP.Internal

public bool Equals(Key other)
{
return _metadata.Equals(other._metadata) && object.ReferenceEquals(_token, other._token);
return _metadata.Equals(other._metadata) && ReferenceEquals(_token, other._token);
}

public override bool Equals(object obj)


+ 5
- 5
src/DotNetCore.CAP/LoggerExtensions.cs 查看文件

@@ -16,11 +16,11 @@ namespace DotNetCore.CAP
private static readonly Action<ILogger, string, Exception> _receivedMessageRetryExecuting;
private static readonly Action<ILogger, string, string, string, Exception> _modelBinderFormattingException;

private static Action<ILogger, Exception> _jobFailed;
private static Action<ILogger, Exception> _jobFailedWillRetry;
private static Action<ILogger, double, Exception> _jobExecuted;
private static Action<ILogger, int, Exception> _jobRetrying;
private static Action<ILogger, string, Exception> _exceptionOccuredWhileExecutingJob;
private static readonly Action<ILogger, Exception> _jobFailed;
private static readonly Action<ILogger, Exception> _jobFailedWillRetry;
private static readonly Action<ILogger, double, Exception> _jobExecuted;
private static readonly Action<ILogger, int, Exception> _jobRetrying;
private static readonly Action<ILogger, string, Exception> _exceptionOccuredWhileExecutingJob;

static LoggerExtensions()
{


+ 3
- 2
src/DotNetCore.CAP/NodeDiscovery/CAP.DiscoveryOptions.cs 查看文件

@@ -1,4 +1,5 @@
namespace DotNetCore.CAP
// ReSharper disable once CheckNamespace
namespace DotNetCore.CAP
{
public class DiscoveryOptions
{
@@ -32,4 +33,4 @@
public string MatchPath { get; set; }
}

}
}

+ 1
- 3
src/DotNetCore.CAP/NodeDiscovery/CAP.DiscoveryOptionsExtensions.cs 查看文件

@@ -1,10 +1,8 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace DotNetCore.CAP
{
using DotNetCore.CAP.NodeDiscovery;
using NodeDiscovery;
using Microsoft.Extensions.DependencyInjection;

internal sealed class DiscoveryOptionsExtension : ICapOptionsExtension


+ 1
- 3
src/DotNetCore.CAP/NodeDiscovery/IDiscoveryProviderFactory.Default.cs 查看文件

@@ -1,10 +1,8 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace DotNetCore.CAP.NodeDiscovery
{
class DiscoveryProviderFactory : IDiscoveryProviderFactory
internal class DiscoveryProviderFactory : IDiscoveryProviderFactory
{
public INodeDiscoveryProvider Create(DiscoveryOptions options)
{


+ 2
- 6
src/DotNetCore.CAP/NodeDiscovery/IDiscoveryProviderFactory.cs 查看文件

@@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace DotNetCore.CAP.NodeDiscovery
namespace DotNetCore.CAP.NodeDiscovery
{
interface IDiscoveryProviderFactory
internal interface IDiscoveryProviderFactory
{
INodeDiscoveryProvider Create(DiscoveryOptions options);
}


+ 4
- 3
src/DotNetCore.CAP/NodeDiscovery/INodeDiscoveryProvider.Consul.cs 查看文件

@@ -39,10 +39,11 @@ namespace DotNetCore.CAP.NodeDiscovery
Port = x.Value.Port,
Tags = string.Join(", ", x.Value.Tags)
});
var nodeList = nodes.ToList();

CapCache.Global.AddOrUpdate("cap.nodes.count", nodes.Count(), TimeSpan.FromSeconds(30),true);
CapCache.Global.AddOrUpdate("cap.nodes.count", nodeList.Count, TimeSpan.FromSeconds(30),true);

return nodes.ToList();
return nodeList;
}
catch (Exception) {
return null;
@@ -57,7 +58,7 @@ namespace DotNetCore.CAP.NodeDiscovery
Name = _options.NodeName,
Address = _options.CurrentNodeHostName,
Port = _options.CurrentNodePort,
Tags = new string[] { "CAP", "Client", "Dashboard" },
Tags = new[] { "CAP", "Client", "Dashboard" },
Check = new AgentServiceCheck
{
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(30),


+ 1
- 3
src/DotNetCore.CAP/NodeDiscovery/INodeDiscoveryProvider.cs 查看文件

@@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace DotNetCore.CAP.NodeDiscovery


+ 7
- 11
src/DotNetCore.CAP/NodeDiscovery/IProcessingServer.Consul.cs 查看文件

@@ -1,25 +1,21 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace DotNetCore.CAP.NodeDiscovery
namespace DotNetCore.CAP.NodeDiscovery
{
class ConsulProcessingNodeServer : IProcessingServer
internal class ConsulProcessingNodeServer : IProcessingServer
{
private readonly DiscoveryOptions dashboardOptions;
private readonly IDiscoveryProviderFactory discoveryProviderFactory;
private readonly DiscoveryOptions _dashboardOptions;
private readonly IDiscoveryProviderFactory _discoveryProviderFactory;

public ConsulProcessingNodeServer(
DiscoveryOptions dashboardOptions,
IDiscoveryProviderFactory discoveryProviderFactory)
{
this.dashboardOptions = dashboardOptions;
this.discoveryProviderFactory = discoveryProviderFactory;
_dashboardOptions = dashboardOptions;
_discoveryProviderFactory = discoveryProviderFactory;
}

public void Start()
{
var discoveryProvider = discoveryProviderFactory.Create(dashboardOptions);
var discoveryProvider = _discoveryProviderFactory.Create(_dashboardOptions);

discoveryProvider.RegisterNode();
}


+ 1
- 5
src/DotNetCore.CAP/NodeDiscovery/Node.cs 查看文件

@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace DotNetCore.CAP.NodeDiscovery
namespace DotNetCore.CAP.NodeDiscovery
{
public class Node
{


+ 5
- 2
src/DotNetCore.CAP/OperateResult.cs 查看文件

@@ -51,8 +51,11 @@ namespace DotNetCore.CAP

public static OperateResult Failed(Exception ex, params OperateError[] errors)
{
var result = new OperateResult { Succeeded = false };
result.Exception = ex;
var result = new OperateResult
{
Succeeded = false,
Exception = ex
};
if (errors != null)
{
result._errors.AddRange(errors);


+ 3
- 13
src/DotNetCore.CAP/Processor/IDispatcher.Default.cs 查看文件

@@ -3,7 +3,6 @@ using System.Threading;
using System.Threading.Tasks;
using DotNetCore.CAP.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace DotNetCore.CAP.Processor
@@ -11,24 +10,15 @@ namespace DotNetCore.CAP.Processor
public class DefaultDispatcher : IDispatcher
{
private readonly IQueueExecutorFactory _queueExecutorFactory;
private readonly IServiceProvider _provider;
private readonly ILogger _logger;

private readonly CancellationTokenSource _cts;
private readonly TimeSpan _pollingDelay;

internal static readonly AutoResetEvent PulseEvent = new AutoResetEvent(true);

public DefaultDispatcher(
IServiceProvider provider,
IQueueExecutorFactory queueExecutorFactory,
IOptions<CapOptions> capOptions,
ILogger<DefaultDispatcher> logger)
public DefaultDispatcher(IQueueExecutorFactory queueExecutorFactory,
IOptions<CapOptions> capOptions)
{
_logger = logger;
_queueExecutorFactory = queueExecutorFactory;
_provider = provider;
_cts = new CancellationTokenSource();
_pollingDelay = TimeSpan.FromSeconds(capOptions.Value.PollingDelay);
}

@@ -73,7 +63,7 @@ namespace DotNetCore.CAP.Processor

private async Task<bool> Step(ProcessingContext context)
{
var fetched = default(IFetchedMessage);
IFetchedMessage fetched;
using (var scopedContext = context.CreateScope())
{
var provider = scopedContext.Provider;


+ 3
- 3
src/DotNetCore.CAP/Processor/IProcessingServer.Cap.cs 查看文件

@@ -9,16 +9,16 @@ using Microsoft.Extensions.Options;

namespace DotNetCore.CAP.Processor
{
public class CapProcessingServer : IProcessingServer, IDisposable
public class CapProcessingServer : IProcessingServer
{
private readonly ILogger _logger;
private readonly ILoggerFactory _loggerFactory;
private readonly IServiceProvider _provider;
private readonly CancellationTokenSource _cts;
private readonly CapOptions _options;
private readonly IList<IDispatcher> _messageDispatchers;

private IProcessor[] _processors;
private IList<IDispatcher> _messageDispatchers;
private ProcessingContext _context;
private Task _compositeTask;
private bool _disposed;
@@ -109,7 +109,7 @@ namespace DotNetCore.CAP.Processor
private IProcessor[] GetProcessors(int processorCount)
{
var returnedProcessors = new List<IProcessor>();
for (int i = 0; i < processorCount; i++)
for (var i = 0; i < processorCount; i++)
{
var messageProcessors = _provider.GetRequiredService<IDispatcher>();
_messageDispatchers.Add(messageProcessors);


+ 3
- 3
src/DotNetCore.CAP/Processor/IProcessor.PublishQueuer.cs 查看文件

@@ -13,7 +13,6 @@ namespace DotNetCore.CAP.Processor
public class PublishQueuer : IProcessor
{
private readonly ILogger _logger;
private readonly CapOptions _options;
private readonly IStateChanger _stateChanger;
private readonly IServiceProvider _provider;
private readonly TimeSpan _pollingDelay;
@@ -27,15 +26,16 @@ namespace DotNetCore.CAP.Processor
IServiceProvider provider)
{
_logger = logger;
_options = options.Value;
_stateChanger = stateChanger;
_provider = provider;

_pollingDelay = TimeSpan.FromSeconds(_options.PollingDelay);
var capOptions = options.Value;
_pollingDelay = TimeSpan.FromSeconds(capOptions.PollingDelay);
}

public async Task ProcessAsync(ProcessingContext context)
{
_logger.LogDebug("Publish Queuer start calling.");
using (var scope = _provider.CreateScope())
{
CapPublishedMessage sentMessage;


+ 7
- 7
src/DotNetCore.CAP/Processor/IProcessor.SubscribeQueuer.cs 查看文件

@@ -12,11 +12,10 @@ namespace DotNetCore.CAP.Processor
{
public class SubscribeQueuer : IProcessor
{
private ILogger _logger;
private CapOptions _options;
private IStateChanger _stateChanger;
private IServiceProvider _provider;
private TimeSpan _pollingDelay;
private readonly ILogger _logger;
private readonly IStateChanger _stateChanger;
private readonly IServiceProvider _provider;
private readonly TimeSpan _pollingDelay;

internal static readonly AutoResetEvent PulseEvent = new AutoResetEvent(true);

@@ -27,15 +26,16 @@ namespace DotNetCore.CAP.Processor
IServiceProvider provider)
{
_logger = logger;
_options = options.Value;
_stateChanger = stateChanger;
_provider = provider;

_pollingDelay = TimeSpan.FromSeconds(_options.PollingDelay);
var capOptions = options.Value;
_pollingDelay = TimeSpan.FromSeconds(capOptions.PollingDelay);
}

public async Task ProcessAsync(ProcessingContext context)
{
_logger.LogDebug("SubscribeQueuer start calling.");
using (var scope = _provider.CreateScope())
{
CapReceivedMessage message;


+ 1
- 1
src/DotNetCore.CAP/Processor/States/IState.Succeeded.cs 查看文件

@@ -7,7 +7,7 @@ namespace DotNetCore.CAP.Processor.States
{
public const string StateName = "Succeeded";

public TimeSpan? ExpiresAfter { get; private set; }
public TimeSpan? ExpiresAfter { get; }

public string Name => StateName;



+ 0
- 13
src/DotNetCore.CAP/StateData.cs 查看文件

@@ -1,13 +0,0 @@
using System.Collections.Generic;

namespace DotNetCore.CAP
{
public class StateData
{
public string Name { get; set; }

public string Reason { get; set; }

public IDictionary<string, string> Data { get; set; }
}
}

Loading…
取消
儲存