Browse Source

Improve

pull/10159/head
liangshiwei 5 years ago
parent
commit
3ee9f57c9d
  1. 2
      framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj
  2. 3
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs
  3. 6
      framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs
  4. 7
      framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs
  5. 7
      framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs
  6. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs
  7. 9
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs
  8. 8
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs
  9. 11
      framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs
  10. 8
      framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs
  11. 4
      framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs
  12. 8
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs
  13. 4
      framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs
  14. 4
      framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs
  15. 9
      framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs
  16. 13
      test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs

2
framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj

@ -17,7 +17,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Volo.Abp.Auditing\Volo.Abp.Auditing.csproj" /> <ProjectReference Include="..\Volo.Abp.Auditing\Volo.Abp.Auditing.csproj" />
<ProjectReference Include="..\Volo.Abp.Data\Volo.Abp.Data.csproj" /> <ProjectReference Include="..\Volo.Abp.Data\Volo.Abp.Data.csproj" />
<ProjectReference Include="..\Volo.Abp.EventBus\Volo.Abp.EventBus.csproj" /> <ProjectReference Include="..\Volo.Abp.EventBus.Boxes\Volo.Abp.EventBus.Boxes.csproj" />
<ProjectReference Include="..\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj" /> <ProjectReference Include="..\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj" />
<ProjectReference Include="..\Volo.Abp.Guids\Volo.Abp.Guids.csproj" /> <ProjectReference Include="..\Volo.Abp.Guids\Volo.Abp.Guids.csproj" />
<ProjectReference Include="..\Volo.Abp.MultiTenancy\Volo.Abp.MultiTenancy.csproj" /> <ProjectReference Include="..\Volo.Abp.MultiTenancy\Volo.Abp.MultiTenancy.csproj" />

3
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs

@ -3,6 +3,7 @@ using Volo.Abp.Auditing;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Volo.Abp.EventBus.Boxes;
using Volo.Abp.ExceptionHandling; using Volo.Abp.ExceptionHandling;
using Volo.Abp.Guids; using Volo.Abp.Guids;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
@ -18,7 +19,7 @@ namespace Volo.Abp.Domain
[DependsOn( [DependsOn(
typeof(AbpAuditingModule), typeof(AbpAuditingModule),
typeof(AbpDataModule), typeof(AbpDataModule),
typeof(AbpEventBusModule), typeof(AbpEventBusBoxesModule),
typeof(AbpGuidsModule), typeof(AbpGuidsModule),
typeof(AbpMultiTenancyModule), typeof(AbpMultiTenancyModule),
typeof(AbpThreadingModule), typeof(AbpThreadingModule),

6
framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs

@ -2,6 +2,7 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.EventBus.Boxes;
using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Timing; using Volo.Abp.Timing;
using Volo.Abp.Uow; using Volo.Abp.Uow;
@ -14,7 +15,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
public OracleDbContextEventInbox( public OracleDbContextEventInbox(
IDbContextProvider<TDbContext> dbContextProvider, IDbContextProvider<TDbContext> dbContextProvider,
IClock clock, IClock clock,
IOptions<AbpDistributedEventBusOptions> distributedEventsOptions) : base(dbContextProvider, clock, distributedEventsOptions) IOptions<AbpEventBusBoxesOptions> eventBusBoxesOptions)
: base(dbContextProvider, clock, eventBusBoxesOptions)
{ {
} }
@ -33,7 +35,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
{ {
var dbContext = await DbContextProvider.GetDbContextAsync(); var dbContext = await DbContextProvider.GetDbContextAsync();
var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName();
var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); var timeToKeepEvents = Clock.Now.Add(- EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents);
var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')"; var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')";
await dbContext.Database.ExecuteSqlRawAsync(sql); await dbContext.Database.ExecuteSqlRawAsync(sql);

7
framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs

@ -2,7 +2,7 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Boxes;
using Volo.Abp.Timing; using Volo.Abp.Timing;
using Volo.Abp.Uow; using Volo.Abp.Uow;
@ -14,7 +14,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
public OracleDbContextEventInbox( public OracleDbContextEventInbox(
IDbContextProvider<TDbContext> dbContextProvider, IDbContextProvider<TDbContext> dbContextProvider,
IClock clock, IClock clock,
IOptions<AbpDistributedEventBusOptions> distributedEventsOptions) : base(dbContextProvider, clock, distributedEventsOptions) IOptions<AbpEventBusBoxesOptions> eventBusBoxesOptions)
: base(dbContextProvider, clock, eventBusBoxesOptions)
{ {
} }
@ -33,7 +34,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
{ {
var dbContext = await DbContextProvider.GetDbContextAsync(); var dbContext = await DbContextProvider.GetDbContextAsync();
var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName();
var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents;
var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')"; var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')";
await dbContext.Database.ExecuteSqlRawAsync(sql); await dbContext.Database.ExecuteSqlRawAsync(sql);

7
framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs

@ -2,6 +2,7 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.EventBus.Boxes;
using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Timing; using Volo.Abp.Timing;
using Volo.Abp.Uow; using Volo.Abp.Uow;
@ -14,8 +15,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
public PostgreSqlDbContextEventInbox( public PostgreSqlDbContextEventInbox(
IDbContextProvider<TDbContext> dbContextProvider, IDbContextProvider<TDbContext> dbContextProvider,
IClock clock, IClock clock,
IOptions<AbpDistributedEventBusOptions> distributedEventsOptions) IOptions<AbpEventBusBoxesOptions> eventBusBoxesOptions)
: base(dbContextProvider, clock, distributedEventsOptions) : base(dbContextProvider, clock, eventBusBoxesOptions)
{ {
} }
@ -34,7 +35,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
{ {
var dbContext = await DbContextProvider.GetDbContextAsync(); var dbContext = await DbContextProvider.GetDbContextAsync();
var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName();
var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents;
var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < '{timeToKeepEvents}'"; var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < '{timeToKeepEvents}'";
await dbContext.Database.ExecuteSqlRawAsync(sql); await dbContext.Database.ExecuteSqlRawAsync(sql);

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs

@ -2,10 +2,8 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Domain; using Volo.Abp.Domain;
using Volo.Abp.EntityFrameworkCore.DependencyInjection;
using Volo.Abp.EntityFrameworkCore.DistributedEvents; using Volo.Abp.EntityFrameworkCore.DistributedEvents;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.Uow;
using Volo.Abp.Uow.EntityFrameworkCore; using Volo.Abp.Uow.EntityFrameworkCore;
namespace Volo.Abp.EntityFrameworkCore namespace Volo.Abp.EntityFrameworkCore

9
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs

@ -5,6 +5,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.EventBus.Boxes;
using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Timing; using Volo.Abp.Timing;
using Volo.Abp.Uow; using Volo.Abp.Uow;
@ -15,17 +16,17 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
where TDbContext : IHasEventInbox where TDbContext : IHasEventInbox
{ {
protected IDbContextProvider<TDbContext> DbContextProvider { get; } protected IDbContextProvider<TDbContext> DbContextProvider { get; }
protected AbpDistributedEventBusOptions DistributedEventsOptions { get; } protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; }
protected IClock Clock { get; } protected IClock Clock { get; }
public DbContextEventInbox( public DbContextEventInbox(
IDbContextProvider<TDbContext> dbContextProvider, IDbContextProvider<TDbContext> dbContextProvider,
IClock clock, IClock clock,
IOptions<AbpDistributedEventBusOptions> distributedEventsOptions) IOptions<AbpEventBusBoxesOptions> eventBusBoxesOptions)
{ {
DbContextProvider = dbContextProvider; DbContextProvider = dbContextProvider;
Clock = clock; Clock = clock;
DistributedEventsOptions = distributedEventsOptions.Value; EventBusBoxesOptions = eventBusBoxesOptions.Value;
} }
[UnitOfWork] [UnitOfWork]
@ -78,7 +79,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
public virtual async Task DeleteOldEventsAsync() public virtual async Task DeleteOldEventsAsync()
{ {
var dbContext = await DbContextProvider.GetDbContextAsync(); var dbContext = await DbContextProvider.GetDbContextAsync();
var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents;
var oldEvents = await dbContext.IncomingEvents var oldEvents = await dbContext.IncomingEvents
.Where(x => x.Processed && x.CreationTime < timeToKeepEvents) .Where(x => x.Processed && x.CreationTime < timeToKeepEvents)
.ToListAsync(); .ToListAsync();

8
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs

@ -2,7 +2,7 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Boxes;
using Volo.Abp.Timing; using Volo.Abp.Timing;
using Volo.Abp.Uow; using Volo.Abp.Uow;
@ -14,8 +14,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
public SqlRawDbContextEventInbox( public SqlRawDbContextEventInbox(
IDbContextProvider<TDbContext> dbContextProvider, IDbContextProvider<TDbContext> dbContextProvider,
IClock clock, IClock clock,
IOptions<AbpDistributedEventBusOptions> distributedEventsOptions) IOptions<AbpEventBusBoxesOptions> eventBusBoxesOptions)
: base(dbContextProvider, clock, distributedEventsOptions) : base(dbContextProvider, clock, eventBusBoxesOptions)
{ {
} }
@ -34,7 +34,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents
{ {
var dbContext = await DbContextProvider.GetDbContextAsync(); var dbContext = await DbContextProvider.GetDbContextAsync();
var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName();
var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents;
var sql = $"DELETE FROM {tableName} WHERE Processed = '1' AND CreationTime < '{timeToKeepEvents}'"; var sql = $"DELETE FROM {tableName} WHERE Processed = '1' AND CreationTime < '{timeToKeepEvents}'";
await dbContext.Database.ExecuteSqlRawAsync(sql); await dbContext.Database.ExecuteSqlRawAsync(sql);

11
framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs

@ -26,10 +26,14 @@ namespace Volo.Abp.EventBus.Boxes
public TimeSpan PeriodTimeSpan { get; set; } public TimeSpan PeriodTimeSpan { get; set; }
/// <summary> /// <summary>
/// Delay time of <see cref="InboxProcessor"/> and <see cref="OutboxSender"/>
/// Default: 15 seconds /// Default: 15 seconds
/// </summary> /// </summary>
public TimeSpan DelayTimeSpan { get; set; } public TimeSpan DistributedLockWaitDuration { get; set; }
/// <summary>
/// Default: 2 hours
/// </summary>
public TimeSpan WaitTimeToDeleteProcessedInboxEvents { get; set; }
public AbpEventBusBoxesOptions() public AbpEventBusBoxesOptions()
{ {
@ -37,7 +41,8 @@ namespace Volo.Abp.EventBus.Boxes
InboxWaitingEventMaxCount = 1000; InboxWaitingEventMaxCount = 1000;
OutboxWaitingEventMaxCount = 1000; OutboxWaitingEventMaxCount = 1000;
PeriodTimeSpan = TimeSpan.FromSeconds(2); PeriodTimeSpan = TimeSpan.FromSeconds(2);
DelayTimeSpan = TimeSpan.FromSeconds(15); DistributedLockWaitDuration = TimeSpan.FromSeconds(15);
WaitTimeToDeleteProcessedInboxEvents = TimeSpan.FromHours(2);
} }
} }
} }

8
framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs

@ -49,7 +49,7 @@ namespace Volo.Abp.EventBus.Boxes
UnitOfWorkManager = unitOfWorkManager; UnitOfWorkManager = unitOfWorkManager;
Clock = clock; Clock = clock;
EventBusBoxesOptions = eventBusBoxesOptions.Value; EventBusBoxesOptions = eventBusBoxesOptions.Value;
Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Seconds; Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Milliseconds;
Timer.Elapsed += TimerOnElapsed; Timer.Elapsed += TimerOnElapsed;
Logger = NullLogger<InboxProcessor>.Instance; Logger = NullLogger<InboxProcessor>.Instance;
StoppingTokenSource = new CancellationTokenSource(); StoppingTokenSource = new CancellationTokenSource();
@ -120,21 +120,21 @@ namespace Volo.Abp.EventBus.Boxes
else else
{ {
Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName);
await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DelayTimeSpan.Milliseconds, StoppingToken); await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DistributedLockWaitDuration.Milliseconds, StoppingToken);
} }
} }
} }
protected virtual async Task DeleteOldEventsAsync() protected virtual async Task DeleteOldEventsAsync()
{ {
if (LastCleanTime != null && LastCleanTime > Clock.Now.Add(EventBusBoxesOptions.CleanOldEventTimeIntervalSpan)) if (LastCleanTime != null && LastCleanTime + EventBusBoxesOptions.CleanOldEventTimeIntervalSpan > Clock.Now)
{ {
return; return;
} }
await Inbox.DeleteOldEventsAsync(); await Inbox.DeleteOldEventsAsync();
LastCleanTime = DateTime.Now; LastCleanTime = Clock.Now;
} }
} }
} }

4
framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs

@ -39,7 +39,7 @@ namespace Volo.Abp.EventBus.Boxes
DistributedEventBus = distributedEventBus; DistributedEventBus = distributedEventBus;
DistributedLockProvider = distributedLockProvider; DistributedLockProvider = distributedLockProvider;
EventBusBoxesOptions = eventBusBoxesOptions.Value; EventBusBoxesOptions = eventBusBoxesOptions.Value;
Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Seconds; Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Milliseconds;
Timer.Elapsed += TimerOnElapsed; Timer.Elapsed += TimerOnElapsed;
Logger = NullLogger<OutboxSender>.Instance; Logger = NullLogger<OutboxSender>.Instance;
StoppingTokenSource = new CancellationTokenSource(); StoppingTokenSource = new CancellationTokenSource();
@ -100,7 +100,7 @@ namespace Volo.Abp.EventBus.Boxes
else else
{ {
Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName);
await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DelayTimeSpan.Milliseconds, StoppingToken); await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DistributedLockWaitDuration.Milliseconds, StoppingToken);
} }
} }
} }

8
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs

@ -1,4 +1,3 @@
using System;
using Volo.Abp.Collections; using Volo.Abp.Collections;
namespace Volo.Abp.EventBus.Distributed namespace Volo.Abp.EventBus.Distributed
@ -10,18 +9,11 @@ namespace Volo.Abp.EventBus.Distributed
public OutboxConfigDictionary Outboxes { get; } public OutboxConfigDictionary Outboxes { get; }
public InboxConfigDictionary Inboxes { get; } public InboxConfigDictionary Inboxes { get; }
/// <summary>
/// Default: -2 hours
/// </summary>
public TimeSpan InboxKeepEventTimeSpan { get; set; }
public AbpDistributedEventBusOptions() public AbpDistributedEventBusOptions()
{ {
Handlers = new TypeList<IEventHandler>(); Handlers = new TypeList<IEventHandler>();
Outboxes = new OutboxConfigDictionary(); Outboxes = new OutboxConfigDictionary();
Inboxes = new InboxConfigDictionary(); Inboxes = new InboxConfigDictionary();
InboxKeepEventTimeSpan = TimeSpan.FromHours(-2);
} }
} }
} }

4
framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs

@ -4,6 +4,6 @@ namespace Volo.Abp.MongoDB.DistributedEvents
{ {
public interface IHasEventInbox : IAbpMongoDbContext public interface IHasEventInbox : IAbpMongoDbContext
{ {
IMongoCollection<IncomingEventRecord> IncomingEvents { get; set; } IMongoCollection<IncomingEventRecord> IncomingEvents { get; }
} }
} }

4
framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs

@ -4,6 +4,6 @@ namespace Volo.Abp.MongoDB.DistributedEvents
{ {
public interface IHasEventOutbox : IAbpMongoDbContext public interface IHasEventOutbox : IAbpMongoDbContext
{ {
IMongoCollection<OutgoingEventRecord> OutgoingEvents { get; set; } IMongoCollection<OutgoingEventRecord> OutgoingEvents { get; }
} }
} }

9
framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs

@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using MongoDB.Driver; using MongoDB.Driver;
using MongoDB.Driver.Linq; using MongoDB.Driver.Linq;
using Volo.Abp.EventBus.Boxes;
using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Timing; using Volo.Abp.Timing;
using Volo.Abp.Uow; using Volo.Abp.Uow;
@ -16,17 +17,17 @@ namespace Volo.Abp.MongoDB.DistributedEvents
where TMongoDbContext : IHasEventInbox where TMongoDbContext : IHasEventInbox
{ {
protected IMongoDbContextProvider<TMongoDbContext> DbContextProvider { get; } protected IMongoDbContextProvider<TMongoDbContext> DbContextProvider { get; }
protected AbpDistributedEventBusOptions DistributedEventsOptions { get; } protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; }
protected IClock Clock { get; } protected IClock Clock { get; }
public MongoDbContextEventInbox( public MongoDbContextEventInbox(
IMongoDbContextProvider<TMongoDbContext> dbContextProvider, IMongoDbContextProvider<TMongoDbContext> dbContextProvider,
IClock clock, IClock clock,
IOptions<AbpDistributedEventBusOptions> distributedEventsOptions) IOptions<AbpEventBusBoxesOptions> eventBusBoxesOptions)
{ {
DbContextProvider = dbContextProvider; DbContextProvider = dbContextProvider;
Clock = clock; Clock = clock;
DistributedEventsOptions = distributedEventsOptions.Value; EventBusBoxesOptions = eventBusBoxesOptions.Value;
} }
@ -96,7 +97,7 @@ namespace Volo.Abp.MongoDB.DistributedEvents
public virtual async Task DeleteOldEventsAsync() public virtual async Task DeleteOldEventsAsync()
{ {
var dbContext = await DbContextProvider.GetDbContextAsync(); var dbContext = await DbContextProvider.GetDbContextAsync();
var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents;
if (dbContext.SessionHandle != null) if (dbContext.SessionHandle != null)
{ {

13
test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs

@ -11,16 +11,9 @@ namespace DistDemoApp
public IMongoCollection<TodoItem> TodoItems => Collection<TodoItem>(); public IMongoCollection<TodoItem> TodoItems => Collection<TodoItem>();
public IMongoCollection<TodoSummary> TodoSummaries => Collection<TodoSummary>(); public IMongoCollection<TodoSummary> TodoSummaries => Collection<TodoSummary>();
public IMongoCollection<OutgoingEventRecord> OutgoingEvents public IMongoCollection<OutgoingEventRecord> OutgoingEvents => Collection<OutgoingEventRecord>();
{
get => Collection<OutgoingEventRecord>(); public IMongoCollection<IncomingEventRecord> IncomingEvents => Collection<IncomingEventRecord>();
set {}
}
public IMongoCollection<IncomingEventRecord> IncomingEvents
{
get => Collection<IncomingEventRecord>();
set {}
}
} }
} }

Loading…
Cancel
Save