private static RepositoryQueuesPrefetchCount GetPrefetchCount(IComponentContext arg) { var retVal = new RepositoryQueuesPrefetchCount { DownloadQueuePrefetchCount = BusConfigurator.GetPrefetchCountForEndpoint(BusConstants.RepositoryManagerDownloadPackageMessageQueue) ?? 4, SyncQueuePrefetchCount = BusConfigurator.GetPrefetchCountForEndpoint(BusConstants.RepositoryManagerArchiveRecordAppendPackageMessageQueue) ?? 4 }; return(retVal); }
/// <summary> /// Die Priorisierungsengine liefert den nächsten Job für die verschiedenen Kanäle. /// Dazu wird geschaut wieviele Aufträge aktuell im Repository Service am laufen sind und in welchen Kanälen. /// /// Wenn es in einem Kanal Platz hat, wird der nächste pendente Auftrag aus der Datenbank abgerufen. /// /// Es wird mit 4 Kanälen gerechnet, d.h. alle Aufträge werden anhand ihrer Grösse in eine Priorisierungskategorie /// eingeteilt. /// Die Auftäge werden dann anhand der Priorisierungskategorie einem der 4 Kanäle zugeordnet. /// </summary> /// <param name="primaerdatenDb">Der Datenbankzugriff auf die Primärdaten Jobs.</param> /// <param name="channelAssignmentDefinition"> /// Die Konfiguration welche Priorisierungskategorien in welchen Kanälen /// zugeordnet werden können /// </param> /// <param name="prefetchCount">Einstellungen wieviele parallele Jobs die Repository Queue (RabbitMq) verarbeiten kann.</param> public PackagePriorizationEngine(IPrimaerdatenAuftragAccess primaerdatenDb, ChannelAssignmentDefinition channelAssignmentDefinition, RepositoryQueuesPrefetchCount prefetchCount) { this.primaerdatenDb = primaerdatenDb; // Fülle in einen Dictionary wieviele Jobs pro Kanal verfügbar sind. MaxJobCountPerChannelForSync = GetMaxJobCountPerChannel(prefetchCount.SyncQueuePrefetchCount); MaxJobCountPerChannelForDownload = GetMaxJobCountPerChannel(prefetchCount.DownloadQueuePrefetchCount); // Definieren die KategorieRanges pro Kanal KategorieRangesPerChannel = new Dictionary <int, List <List <int> > > { { 1, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(1)) }, { 2, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(2)) }, { 3, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(3)) }, { 4, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(4)) } }; Log.Debug( "Initialized Package Priorization Engine with the following settings: Max job count for sync: {MaxJobCountPerChannelForSync}. " + "Max job count for download: {MaxJobCountPerChannelForDownload}", MaxJobCountPerChannelForSync, MaxJobCountPerChannelForDownload); }