コード例 #1
0
        public LinkConsumerBuilder(
            Link link,
            TimeSpan recoveryInterval,
            ILinkSerializer serializer,
            ushort?prefetchCount    = null,
            bool?autoAck            = null,
            int?priority            = null,
            bool?cancelOnHaFailover = null,
            bool?exclusive          = null,
            ILinkConsumerErrorStrategy errorStrategy = null,
            LinkConsumerMessageHandlerBuilder messageHandlerBuilder = null,
            ILinkConsumerTopologyHandler topologyHandler            = null,
            LinkStateHandler <LinkConsumerState> stateHandler       = null,
            LinkStateHandler <LinkChannelState> channelStateHandler = null,
            LinkTypeNameMapping typeNameMapping = null
            )
        {
            _link = link ?? throw new ArgumentNullException(nameof(link));

            _reconveryInterval     = recoveryInterval;
            _prefetchCount         = prefetchCount ?? 1;
            _autoAck               = autoAck ?? false;
            _priority              = priority ?? 0;
            _cancelOnHaFailover    = cancelOnHaFailover ?? false;
            _exclusive             = exclusive ?? false;
            _errorStrategy         = errorStrategy ?? new LinkConsumerDefaultErrorStrategy();
            _messageHandlerBuilder = messageHandlerBuilder;
            _topologyHandler       = topologyHandler;
            _stateHandler          = stateHandler ?? ((old, @new) => { });
            _channelStateHandler   = channelStateHandler ?? ((old, @new) => { });
            _serializer            = serializer;
            _typeNameMapping       = typeNameMapping ?? new LinkTypeNameMapping();
        }
コード例 #2
0
 private LinkConsumerBuilder(
     LinkConsumerBuilder prev,
     TimeSpan?recoveryInterval = null,
     ushort?prefetchCount      = null,
     bool?autoAck            = null,
     int?priority            = null,
     bool?cancelOnHaFailover = null,
     bool?exclusive          = null,
     ILinkConsumerErrorStrategy errorStrategy = null,
     LinkConsumerMessageHandlerBuilder messageHandlerBuilder = null,
     ILinkConsumerTopologyHandler topologyHandler            = null,
     LinkStateHandler <LinkConsumerState> stateHandler       = null,
     LinkStateHandler <LinkChannelState> channelStateHandler = null,
     ILinkSerializer serializer          = null,
     LinkTypeNameMapping typeNameMapping = null
     ) : this
     (
         prev._link,
         recoveryInterval ?? prev._reconveryInterval,
         serializer ?? prev._serializer,
         prefetchCount ?? prev._prefetchCount,
         autoAck ?? prev._autoAck,
         priority ?? prev._priority,
         cancelOnHaFailover ?? prev._cancelOnHaFailover,
         exclusive ?? prev._exclusive,
         errorStrategy ?? prev._errorStrategy,
         messageHandlerBuilder ?? prev._messageHandlerBuilder,
         topologyHandler ?? prev._topologyHandler,
         stateHandler ?? prev._stateHandler,
         channelStateHandler ?? prev._channelStateHandler,
         typeNameMapping ?? prev._typeNameMapping
     )
 {
 }
コード例 #3
0
        public LinkConsumerConfiguration(
            TimeSpan recoveryInterval,
            ushort prefetchCount,
            bool autoAck,
            int priority,
            bool cancelOnHaFailover,
            bool exclusive,
            ILinkConsumerTopologyHandler topologyHandler,
            LinkStateHandler<LinkConsumerState> stateHandler,
            ILinkConsumerErrorStrategy errorStrategy,
            LinkConsumerMessageHandlerDelegate<byte[]> messageHandler,
            ILinkSerializer serializer
        )
        {
            if (recoveryInterval < TimeSpan.Zero)
                throw new ArgumentOutOfRangeException(nameof(recoveryInterval), "Must be greater than TimeSpan.Zero");
            
            if(prefetchCount == 0)
                throw new ArgumentOutOfRangeException(nameof(prefetchCount), "Must be greater than 0");

            RecoveryInterval = recoveryInterval;
            PrefetchCount = prefetchCount;
            AutoAck = autoAck;
            Priority = priority;
            CancelOnHaFailover = cancelOnHaFailover;
            Exclusive = exclusive;
            MessageHandler = messageHandler ?? throw new ArgumentNullException(nameof(messageHandler));
            ErrorStrategy = errorStrategy ?? throw new ArgumentNullException(nameof(errorStrategy));
            TopologyHandler = topologyHandler ?? throw new ArgumentNullException(nameof(topologyHandler));
            StateHandler = stateHandler ?? throw new ArgumentNullException(nameof(stateHandler));
            Serializer = serializer;
        }
コード例 #4
0
        public ILinkConsumerBuilder ErrorStrategy(ILinkConsumerErrorStrategy value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            return(new LinkConsumerBuilder(this, errorStrategy: value));
        }
コード例 #5
0
ファイル: RequestEndpoint.cs プロジェクト: ijsgaus/AstralOld
 public IRequestEndpoint <TService, TRequest, TResponse> ErrorStrategy(ILinkConsumerErrorStrategy value)
 => new RequestEndpoint <TService, TRequest, TResponse>(Link, Schema, SetParameter(nameof(ErrorStrategy), value));
コード例 #6
0
        public static ILinkConsumerBuilder CreateConsumerBuilder(ServiceLink link, IExchangeSchema exchange,
                                                                 bool exchangePassive, bool queuePassive,
                                                                 string queueName, bool autoAck, bool?cancelOnHaFailover, ILinkConsumerErrorStrategy errorStrategy,
                                                                 bool exclusive, ushort prefetchCount, QueueParameters queueParameters, ICollection <string> routingKeys,
                                                                 bool bind)
        {
            var builder = link
                          .Consumer
                          .AutoAck(autoAck);

            if (cancelOnHaFailover != null)
            {
                builder = builder.CancelOnHaFailover(cancelOnHaFailover.Value);
            }
            if (errorStrategy != null)
            {
                builder = builder.ErrorStrategy(errorStrategy);
            }
            builder = builder.Exclusive(exclusive)
                      .PrefetchCount(prefetchCount);
            if (!string.IsNullOrWhiteSpace(exchange.Name) &&
                exchange.Type.ToLinkExchangeType() != LinkExchangeType.Fanout &&
                (routingKeys == null || routingKeys.Count == 0))
            {
                throw new InvalidConfigurationException($"No routing key for bind specified!");
            }
            builder = builder.Queue(async cfg =>
            {
                var exch =
                    string.IsNullOrWhiteSpace(exchange.Name)
                        ? await cfg.ExchangeDeclareDefault()
                        :
                    exchangePassive
                            ? await cfg.ExchangeDeclarePassive(exchange.Name)
                            : await cfg.ExchangeDeclare(exchange.Name, exchange.Type.ToLinkExchangeType(),
                                                        exchange.Durable,
                                                        exchange.AutoDelete, exchange.Alternate, exchange.Delayed);
                var queue = queuePassive
                    ? await cfg.QueueDeclarePassive(queueName)
                    : await cfg.QueueDeclare(queueName, queueParameters.Durable(), queueParameters.Exclusive(), queueParameters.AutoDelete(),
                                             queueParameters.MessageTtl(), queueParameters.Expires(), queueParameters.MaxPriority(), queueParameters.MaxLength(),
                                             queueParameters.MaxLengthBytes(), queueParameters.DeadLetterExchange(), queueParameters.DeadLetterRoutingKey());
                if (!string.IsNullOrWhiteSpace(exchange.Name) && bind)
                {
                    if (exchange.Type.ToLinkExchangeType() == LinkExchangeType.Fanout)
                    {
                        await cfg.Bind(queue, exch);
                    }
                    else
                    {
                        foreach (var key in routingKeys)
                        {
                            await cfg.Bind(queue, exch, key);
                        }
                    }
                }
                return(queue);
            });
            return(builder);
        }
コード例 #7
0
 public IEventEndpoint <TService, TEvent> ErrorStrategy(ILinkConsumerErrorStrategy value)
 => new EventEndpoint <TService, TEvent>(Link, Schema, SetParameter(nameof(ErrorStrategy), value));