public async Task DispatchAllAsync(CancellationToken cancellationToken = default) { // Ez a metódus a bg service által kerül meghívásra, tenant nem elérhető // => Dispatchelünk minden tenant outboxából var tenants = await masterDbContext.Tenants.ToListAsync(cancellationToken); foreach (var tenant in tenants) { await using var context = tenantOutboxDbContextFactory.CreateContext(tenant); var dispatcher = new EfCoreMessageDispatcher <TContext>( context, serviceProvider.GetRequiredService <IOptions <OutboxConfiguration> >(), serviceProvider.GetRequiredService <IPublishEndpoint>(), serviceProvider.GetRequiredService <ILogger <EfCoreMessageDispatcher <TContext> > >()); await dispatcher.DispatchAllAsync(cancellationToken); } }
public async Task TryDispatchMessagesAsync(IEnumerable <Guid> messageIds, CancellationToken cancellationToken = default) { // Ez a metódus a middleware vagy a MT filter által kerül meghívásra, nem biztos, hogy van tenantunk // => Ha van, akkor dispatcheljük az adott azonosítójú üzeneteket a tenantból // => Ha nincs akkor kivárjuk hogy a background job mindent dispatcheljen var tenant = serviceProvider.GetService <Tenant>(); if (tenant != null) { await using var context = tenantOutboxDbContextFactory.CreateContext(tenant); var dispatcher = new EfCoreMessageDispatcher <TContext>( context, serviceProvider.GetRequiredService <IOptions <OutboxConfiguration> >(), serviceProvider.GetRequiredService <IPublishEndpoint>(), serviceProvider.GetRequiredService <ILogger <EfCoreMessageDispatcher <TContext> > >()); await dispatcher.TryDispatchMessagesAsync(messageIds, cancellationToken); } }