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 } } }
/// <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; }
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)); }