Пример #1
0
        public int DeterminePartition(IMessage message)
        {
            var key = ExtractKey(message);

            int partition;

            if (!string.IsNullOrEmpty(_producerOptions.PartitionSelectorExpression) && _expressionParser != null)
            {
                var expr = _expressionParser.ParseExpression(_producerOptions.PartitionSelectorExpression);
                partition = expr.GetValue <int>(_evaluationContext, key);
            }
            else
            {
                partition = _partitionSelectorStrategy.SelectPartition(key, PartitionCount);
            }

            //// protection in case a user selector returns a negative.
            return(Math.Abs(partition % PartitionCount));
        }