Esempio n. 1
0
        public async Task <IConsumer> CreateConsumerAsync(ConsumerConfiguration configuration, CancellationToken cancellationToken)
        {
            var session = await CreateSession(cancellationToken).ConfigureAwait(false);

            var consumerBuilder = new ConsumerBuilder(_loggerFactory, _transactionsManager, session);

            return(await consumerBuilder.CreateAsync(configuration, cancellationToken).ConfigureAwait(false));
        }
        public static Task <IConsumer> CreateConsumerAsync(this IConnection connection, string address, string queue, CancellationToken cancellationToken = default)
        {
            var configuration = new ConsumerConfiguration
            {
                Address = address,
                Queue   = queue
            };

            return(connection.CreateConsumerAsync(configuration, cancellationToken));
        }
        public static Task <IConsumer> CreateConsumerAsync(this IConnection connection, string address, RoutingType routingType, string queue, CancellationToken cancellationToken = default)
        {
            var configuration = new ConsumerConfiguration
            {
                Address     = address,
                RoutingType = routingType,
                Queue       = queue,
                Durable     = routingType == RoutingType.Multicast,
                Shared      = routingType == RoutingType.Multicast,
            };

            return(connection.CreateConsumerAsync(configuration, cancellationToken));
        }
        public Consumer(ILoggerFactory loggerFactory, ReceiverLink receiverLink, TransactionsManager transactionsManager, ConsumerConfiguration configuration)
        {
            _logger              = loggerFactory.CreateLogger <Consumer>();
            _receiverLink        = receiverLink;
            _transactionsManager = transactionsManager;
            _configuration       = configuration;
            var channel = Channel.CreateBounded <Message>(configuration.Credit);

            _reader = channel.Reader;
            _writer = channel.Writer;
            _receiverLink.Start(configuration.Credit, (receiver, m) =>
            {
                var message = new Message(m);
                if (_writer.TryWrite(message))
                {
                    Log.MessageBuffered(_logger, message);
                }
                else
                {
                    Log.FailedToBufferMessage(_logger, message);
                }
            });
        }