コード例 #1
0
        private static HashRingStreamQueueMapperOptions GetHashRingStreamQueueMapperOptions(List <string> azureQueueNames)
        {
            var options = new HashRingStreamQueueMapperOptions();

            options.TotalQueueCount = azureQueueNames.Count;
            return(options);
        }
コード例 #2
0
        public IStreamQueueMapper GetStreamQueueMapper()
        {
            var options = new HashRingStreamQueueMapperOptions();

            options.TotalQueueCount = 0;
            return(new HashRingBasedStreamQueueMapper(options, Name));
        }
コード例 #3
0
        private Dictionary <SiloAddress, List <int> > GetQueueHistogram(Dictionary <SiloAddress, List <IRingRangeInternal> > siloRanges, int totalNumQueues)
        {
            var options = new HashRingStreamQueueMapperOptions();

            options.TotalQueueCount = totalNumQueues;
            HashRingBasedStreamQueueMapper queueMapper = new HashRingBasedStreamQueueMapper(options, "AzureQueues");

            _ = queueMapper.GetAllQueues();

            Dictionary <SiloAddress, List <int> > queueHistogram = new Dictionary <SiloAddress, List <int> >();

            foreach (var siloRange in siloRanges)
            {
                List <int> agentRanges = new List <int>();
                foreach (IRingRangeInternal agentRange in siloRange.Value)
                {
                    int numQueues = queueMapper.GetQueuesForRange(agentRange).Count();
                    agentRanges.Add(numQueues);
                }
                agentRanges.Sort();
                queueHistogram.Add(siloRange.Key, agentRanges);
            }
            //queueHistogram.Sort((t1, t2) => t1.Item2.CompareTo(t2.Item2));
            return(queueHistogram);
        }
コード例 #4
0
        public RabbitMQAdapterFactory(
            string name,
            RabbitMQStreamProviderOptions config,
            HashRingStreamQueueMapperOptions queueMapperOptions,
            SimpleQueueCacheOptions cacheOptions,
            IServiceProvider serviceProvider,
            IOptions <ClusterOptions> clusterOptions,
            SerializationManager serializationManager,
            ILoggerFactory loggerFactory,
            IMessageSerializationHandler serializationHandler,
            IRabbitMQMapper mapper)

        {
            _config = config;

            _providerName         = name;
            _loggeFactory         = loggerFactory;
            _serializationHandler = serializationHandler;

            _mapper = mapper;
            _mapper.Init( );

            _cacheSize    = cacheOptions.CacheSize;
            _adapterCache = new SimpleQueueAdapterCache(cacheOptions, _providerName, _loggeFactory);

            _streamQueueMapper = new HashRingBasedStreamQueueMapper(queueMapperOptions, _providerName);
        }
コード例 #5
0
        public virtual void Init()
        {
            this.receivers         = new ConcurrentDictionary <QueueId, KafkaEventBusAdapterReceiver>();
            this.telemetryProducer = this.serviceProvider.GetService <ITelemetryProducer>();

            if (producer == null)
            {
                InitKafkaProducer();
            }

            _adapterCache = new SimpleQueueAdapterCache(new SimpleQueueCacheOptions {
                CacheSize = cacheOptions.CacheSize
            }, Name, loggerFactory);

            if (this.StreamFailureHandlerFactory == null)
            {
                //TODO: Add a queue specific default failure handler with reasonable error reporting.
                this.StreamFailureHandlerFactory = partition => Task.FromResult <IStreamFailureHandler>(new NoOpStreamDeliveryFailureHandler());
            }

            if (this.QueueMapperFactory == null)
            {
                var h = new HashRingStreamQueueMapperOptions {
                    TotalQueueCount = receiverOptions.TotalQueueCount
                };
                this.streamQueueMapper = new HashRingBasedStreamQueueMapper(h, Name);

                this.QueueMapperFactory = () => new HashRingBasedStreamQueueMapper(h, this.Name);
            }

            this.logger = this.loggerFactory.CreateLogger($"{this.GetType().FullName}"); // join topics?
        }
コード例 #6
0
        private static HashRingStreamQueueMapperOptions GetHashRingStreamQueueMapperOptions(string[] partitionIds)
        {
            var options = new HashRingStreamQueueMapperOptions();

            options.TotalQueueCount = partitionIds.Length;
            return(options);
        }
コード例 #7
0
 public GeneratorAdapterFactory(string providerName, HashRingStreamQueueMapperOptions queueMapperOptions, StreamStatisticOptions statisticOptions, IServiceProvider serviceProvider, SerializationManager serializationManager, ITelemetryProducer telemetryProducer, ILoggerFactory loggerFactory)
 {
     this.Name = providerName;
     this.queueMapperOptions   = queueMapperOptions ?? throw new ArgumentNullException(nameof(queueMapperOptions));
     this.statisticOptions     = statisticOptions ?? throw new ArgumentNullException(nameof(statisticOptions));
     this.serviceProvider      = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
     this.serializationManager = serializationManager ?? throw new ArgumentNullException(nameof(serializationManager));
     this.telemetryProducer    = telemetryProducer ?? throw new ArgumentNullException(nameof(telemetryProducer));
     this.loggerFactory        = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
     this.logger = loggerFactory.CreateLogger <GeneratorAdapterFactory>();
 }
コード例 #8
0
 public MemoryAdapterFactory(string providerName, StreamCacheEvictionOptions cacheOptions, StreamStatisticOptions statisticOptions, HashRingStreamQueueMapperOptions queueMapperOptions,
                             IServiceProvider serviceProvider, IGrainFactory grainFactory, ITelemetryProducer telemetryProducer, ILoggerFactory loggerFactory)
 {
     this.Name = providerName;
     this.queueMapperOptions = queueMapperOptions ?? throw new ArgumentNullException(nameof(queueMapperOptions));
     this.cacheOptions       = cacheOptions ?? throw new ArgumentNullException(nameof(cacheOptions));
     this.statisticOptions   = statisticOptions ?? throw new ArgumentException(nameof(statisticOptions));
     this.grainFactory       = grainFactory ?? throw new ArgumentNullException(nameof(grainFactory));
     this.telemetryProducer  = telemetryProducer ?? throw new ArgumentNullException(nameof(telemetryProducer));
     this.loggerFactory      = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
     this.logger             = loggerFactory.CreateLogger <ILogger <MemoryAdapterFactory <TSerializer> > >();
     this.serializer         = MemoryMessageBodySerializerFactory <TSerializer> .GetOrCreateSerializer(serviceProvider);
 }
コード例 #9
0
 public PubSubAdapterFactory(
     string name,
     PubSubOptions options,
     HashRingStreamQueueMapperOptions queueMapperOptions,
     SimpleQueueCacheOptions cacheOptions,
     IServiceProvider serviceProvider,
     IOptions <ClusterOptions> clusterOptions,
     ILoggerFactory loggerFactory)
 {
     this._providerName      = name;
     this.options            = options;
     this.clusterOptions     = clusterOptions.Value;
     this.loggerFactory      = loggerFactory;
     this._adaptorFactory    = () => ActivatorUtilities.GetServiceOrCreateInstance <TDataAdapter>(serviceProvider);
     this._streamQueueMapper = new HashRingBasedStreamQueueMapper(queueMapperOptions, this._providerName);
     this._adapterCache      = new SimpleQueueAdapterCache(cacheOptions, this._providerName, loggerFactory);
 }
コード例 #10
0
 public SQSAdapterFactory(
     string name,
     SqsOptions sqsOptions,
     HashRingStreamQueueMapperOptions queueMapperOptions,
     SimpleQueueCacheOptions cacheOptions,
     IOptions <ClusterOptions> clusterOptions,
     Orleans.Serialization.Serializer serializer,
     ILoggerFactory loggerFactory)
 {
     this.providerName   = name;
     this.sqsOptions     = sqsOptions;
     this.clusterOptions = clusterOptions.Value;
     this.serializer     = serializer.GetSerializer <SQSBatchContainer>();
     this.loggerFactory  = loggerFactory;
     streamQueueMapper   = new HashRingBasedStreamQueueMapper(queueMapperOptions, this.providerName);
     adapterCache        = new SimpleQueueAdapterCache(cacheOptions, this.providerName, this.loggerFactory);
 }
        private IStreamQueueMapper Create(string providerName)
        {
            var mapper = serviceProvider.GetServiceByName <IStreamQueueMapper>(providerName);

            if (mapper != null)
            {
                return(mapper);
            }

            // Default
            var rmqOptions    = serviceProvider.GetOptionsByName <RabbitMqOptions>(providerName);
            var mapperOptions = new HashRingStreamQueueMapperOptions {
                TotalQueueCount = rmqOptions.UseQueuePartitioning ? rmqOptions.NumberOfQueues : 1
            };

            return(new HashRingBasedStreamQueueMapper(mapperOptions, rmqOptions.QueueNamePrefix));
        }
コード例 #12
0
        public EventStoreAdapterFactory(string providerName, IEventStoreStreamProviderConfiguration streamProviderConfiguration, ILoggerFactory loggerFactory)
        {
            _streamProviderConfiguration = streamProviderConfiguration;
            _loggerFactory = loggerFactory;
            _providerName  = providerName;

            _receivers = new ConcurrentDictionary <QueueId, EventStoreQueueAdapterReceiver>();

            _eventStoreQueueAdapterCache = new EventStoreQueueAdapterCache(this, loggerFactory);

            var hashRingStreamQueueMapperOptions = new HashRingStreamQueueMapperOptions()
            {
                TotalQueueCount = 2
            };

            _streamQueueMapper = new HashRingBasedStreamQueueMapper(hashRingStreamQueueMapperOptions, _providerName);
        }
コード例 #13
0
 public SQSAdapterFactory(
     string name,
     SqsOptions sqsOptions,
     HashRingStreamQueueMapperOptions queueMapperOptions,
     SimpleQueueCacheOptions cacheOptions,
     IServiceProvider serviceProvider,
     IOptions <ClusterOptions> clusterOptions,
     SerializationManager serializationManager,
     ILoggerFactory loggerFactory)
 {
     this.providerName         = name;
     this.sqsOptions           = sqsOptions;
     this.clusterOptions       = clusterOptions.Value;
     this.serializationManager = serializationManager;
     this.loggerFactory        = loggerFactory;
     streamQueueMapper         = new HashRingBasedStreamQueueMapper(queueMapperOptions, this.providerName);
     adapterCache = new SimpleQueueAdapterCache(cacheOptions, this.providerName, this.loggerFactory);
 }
コード例 #14
0
 public RabbitMQAdapterFactory(
     string name,
     RabbitMQStreamProviderOptions options,
     HashRingStreamQueueMapperOptions queueMapperOptions,
     SimpleQueueCacheOptions cacheOptions,
     IServiceProvider serviceProvider,
     IOptions <ClusterOptions> clusterOptions,
     SerializationManager serializationManager,
     ILoggerFactory loggerFactory)
 {
     providerName        = name;
     this.options        = options ?? throw new ArgumentNullException(nameof(options));
     this.clusterOptions = clusterOptions.Value;
     //this.SerializationManager = serializationManager ?? throw new ArgumentNullException(nameof(serializationManager));
     this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
     streamQueueMapper  = new HashRingBasedStreamQueueMapper(queueMapperOptions, providerName);
     adapterCache       = new SimpleQueueAdapterCache(cacheOptions, providerName, this.loggerFactory);
     mapper             = ActivatorUtilities.GetServiceOrCreateInstance <TMapper>(serviceProvider);
 }
コード例 #15
0
        public RabbitMQAdapterFactory(
            string providerName,
            RabbitMQOptions rmqOptions,
            CachingOptions cachingOptions,
            IServiceProvider serviceProvider,
            ILoggerFactory loggerFactory)
        {
            if (string.IsNullOrEmpty(providerName))
            {
                throw new ArgumentNullException(nameof(providerName));
            }
            if (rmqOptions == null)
            {
                throw new ArgumentNullException(nameof(rmqOptions));
            }
            if (cachingOptions == null)
            {
                throw new ArgumentNullException(nameof(cachingOptions));
            }
            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            _cache = new ConcurrentQueueAdapterCache(cachingOptions.CacheSize);

            var queueMapperOptions = new HashRingStreamQueueMapperOptions()
            {
                TotalQueueCount = rmqOptions.NumberOfQueues
            };

            _mapper         = new HashRingBasedStreamQueueMapper(queueMapperOptions, rmqOptions.QueueNamePrefix);
            _failureHandler = Task.FromResult <IStreamFailureHandler>(new NoOpStreamDeliveryFailureHandler(false));
            var serializer = new DefaultBatchContainerSerializer(serviceProvider.GetRequiredService <SerializationManager>());

            _adapter = new RabbitMQAdapter(rmqOptions, cachingOptions, serializer, _mapper, providerName, loggerFactory);
        }
コード例 #16
0
        public EventStoreAdapterFactory(string providerName, EventStoreRepositoryConfiguration eventStoreRepositoryConfiguration, ILoggerFactory loggerFactory)
        {
            _loggerFactory = loggerFactory;
            _providerName  = providerName;

            _eventStoreRepositoryConfiguration = eventStoreRepositoryConfiguration;

            var options = new SimpleQueueCacheOptions()
            {
                CacheSize = 100
            };

            _eventStoreQueueAdapterCache = new SimpleQueueAdapterCache(options, _providerName, _loggerFactory);

            var hashRingStreamQueueMapperOptions = new HashRingStreamQueueMapperOptions()
            {
                TotalQueueCount = 1
            };

            _streamQueueMapper = new HashRingBasedStreamQueueMapper(hashRingStreamQueueMapperOptions, _providerName);
        }
コード例 #17
0
        public HashRingBasedStreamQueueMapper(HashRingStreamQueueMapperOptions options, string queueNamePrefix)
        {
            numQueues = options.TotalQueueCount;
            var queueIds = new List <QueueId>(numQueues);

            if (numQueues == 1)
            {
                uint uniformHashCode = 0;
                queueIds.Add(QueueId.GetQueueId(queueNamePrefix, 0, uniformHashCode));
            }
            else
            {
                uint portion = checked ((uint)(RangeFactory.RING_SIZE / numQueues + 1));
                for (uint i = 0; i < numQueues; i++)
                {
                    uint uniformHashCode = checked (portion * i);
                    queueIds.Add(QueueId.GetQueueId(queueNamePrefix, i, uniformHashCode));
                }
            }
            this.hashRing = new HashRing <QueueId>(queueIds);
        }
コード例 #18
0
        public RedisQueueAdapterFactory(
            string name,
            RedisStreamOptions options,
            IConnectionMultiplexerFactory connectionMultiplexerFactory,
            HashRingStreamQueueMapperOptions queueMapperOptions,
            SimpleQueueCacheOptions cacheOptions,
            IServiceProvider serviceProvider,
            IOptions <ClusterOptions> clusterOptions,
            IRedisDataAdapter dataAdapter,
            ILogger logger,
            ISerializationManager serializationManager)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }
            if (connectionMultiplexerFactory == null)
            {
                throw new ArgumentNullException(nameof(connectionMultiplexerFactory));
            }
            if (queueMapperOptions == null)
            {
                throw new ArgumentNullException(nameof(queueMapperOptions));
            }
            if (cacheOptions == null)
            {
                throw new ArgumentNullException(nameof(cacheOptions));
            }
            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }
            if (clusterOptions == null)
            {
                throw new ArgumentNullException(nameof(clusterOptions));
            }
            if (dataAdapter == null)
            {
                throw new ArgumentNullException(nameof(dataAdapter));
            }
            if (serializationManager == null)
            {
                throw new ArgumentNullException(nameof(serializationManager));
            }

            _providerName = name;
            _options      = options;
            _connectionMultiplexerFactory = connectionMultiplexerFactory;
            _clusterOptions = clusterOptions.Value;
            _logger         = logger.ForContext <RedisQueueAdapterFactory>();
            _dataAdapter    = dataAdapter;

            _streamQueueMapper = new HashRingBasedStreamQueueMapper(queueMapperOptions, _providerName);

            var microsoftLoggerFactory = serviceProvider.GetService <Microsoft.Extensions.Logging.ILoggerFactory>();

            _adapterCache = new SimpleQueueAdapterCache(cacheOptions, _providerName, microsoftLoggerFactory);
        }