Exemplo n.º 1
0
        /// <inheritdoc />
        public virtual IDisposable Consume(
            IQueue queue, MessageHandler onMessage, Action <IConsumerConfiguration> configure
            )
        {
            Preconditions.CheckNotNull(queue, "queue");
            Preconditions.CheckNotNull(onMessage, "onMessage");
            Preconditions.CheckNotNull(configure, "configure");

            if (disposed)
            {
                throw new EasyNetQException("This bus has been disposed");
            }

            var consumerConfiguration = new ConsumerConfiguration(configuration.PrefetchCount);

            configure(consumerConfiguration);
            var consumer = consumerFactory.CreateConsumer(queue, (body, properties, receivedInfo, cancellationToken) =>
            {
                var rawMessage = produceConsumeInterceptor.OnConsume(new ConsumedMessage(receivedInfo, properties, body));
                return(onMessage(rawMessage.Body, rawMessage.Properties, receivedInfo, cancellationToken));
            }, consumerConfiguration);

            consumer.StartConsuming();
            return(consumer);
        }
Exemplo n.º 2
0
        /// <inheritdoc />
        public async Task <PullResult> PullAsync(CancellationToken cancellationToken = default)
        {
            using var cts = cancellationToken.WithTimeout(options.Timeout);

            var basicGetResult = await channel.InvokeChannelActionAsync(
                x => x.BasicGet(queue.Name, options.AutoAck), cts.Token
                ).ConfigureAwait(false);

            if (basicGetResult == null)
            {
                return(PullResult.NotAvailable);
            }

            var messagesCount = basicGetResult.MessageCount;
            var message       = new ConsumedMessage(
                new MessageReceivedInfo(
                    "",
                    basicGetResult.DeliveryTag,
                    basicGetResult.Redelivered,
                    basicGetResult.Exchange,
                    basicGetResult.RoutingKey,
                    queue.Name
                    ),
                new MessageProperties(basicGetResult.BasicProperties),
                basicGetResult.Body.ToArray()
                );
            var interceptedMessage = interceptor.OnConsume(message);

            return(PullResult.Available(
                       messagesCount, interceptedMessage.ReceivedInfo, interceptedMessage.Properties, interceptedMessage.Body
                       ));
        }
Exemplo n.º 3
0
        public virtual IDisposable Consume(IQueue queue, Func <byte[], MessageProperties, MessageReceivedInfo, Task> onMessage, Action <IConsumerConfiguration> configure)
        {
            Preconditions.CheckNotNull(queue, "queue");
            Preconditions.CheckNotNull(onMessage, "onMessage");
            Preconditions.CheckNotNull(configure, "configure");

            if (disposed)
            {
                throw new MessageBusException("This bus has been disposed");
            }

            var consumerConfiguration = new ConsumerConfiguration(connectionConfiguration.PrefetchCount);

            configure(consumerConfiguration);
            var consumer = consumerFactory.CreateConsumer(queue, (body, properties, receivedInfo) =>
            {
                var rawMessage = produceConsumeInterceptor.OnConsume(new RawMessage(properties, body));
                return(onMessage(rawMessage.Body, rawMessage.Properties, receivedInfo));
            }, connection, consumerConfiguration);

            return(consumer.StartConsuming());
        }