예제 #1
0
        private void ConsumerOnReceived(object sender, BasicDeliverEventArgs e)
        {
            try
            {
                var props = new LinkMessageProperties();
                props.Extend(e.BasicProperties);

                var recieveProps = new LinkRecieveProperties(e.Redelivered, e.Exchange, e.RoutingKey, _queue.Name,
                                                             props.AppId == _appId);

                var token = _consumerCancellationTokenSource.Token;

                var msg = new LinkConsumedMessage <byte[]>(e.Body, props, recieveProps, token);

                HandleMessageAsync(msg, e.DeliveryTag);
            }
            catch (Exception ex)
            {
                _logger.Error($"Recieve message error, NACKing: {ex}");

                try
                {
                    _actionQueue.Put(new LinkConsumerMessageAction(
                                         e.DeliveryTag,
                                         LinkConsumerAckStrategy.Nack,
                                         _consumerCancellationTokenSource.Token)
                                     );
                }
                catch
                {
                    // No-op
                }
            }
        }
예제 #2
0
 /// <summary>
 /// Creates intance
 /// </summary>
 /// <param name="body">Body value</param>
 /// <param name="properties">Message properties</param>
 /// <param name="recieveProperties">Recieve properties</param>
 /// <param name="cancellation">Message cancellation</param>
 public LinkConsumedMessage(
     TBody body,
     LinkMessageProperties properties,
     LinkRecieveProperties recieveProperties,
     CancellationToken cancellation
     ) : base(
         body,
         properties
         )
 {
     RecieveProperties = recieveProperties ?? throw new ArgumentNullException(nameof(recieveProperties));
     Cancellation      = cancellation;
 }
예제 #3
0
        public static ILinkConsumedMessage <object> ConstructConsumedMessage(
            Type bodyType,
            object body,
            LinkMessageProperties properties,
            LinkRecieveProperties recievedProperties,
            CancellationToken cancellation
            )
        {
            var genericType = LinkConsumedMessageType.MakeGenericType(bodyType);

            return((ILinkConsumedMessage <object>)Activator
                   .CreateInstance(genericType, body, properties, recievedProperties, cancellation));
        }