public void Send(OutboundMessageDispatch envelope) { if (envelope.Message.Facade is AmqpNmsMessageFacade facade) { AmqpCodec.EncodeMessage(facade); global::Amqp.Message message = facade.Message; try { var transactionalState = session.TransactionContext?.GetTxnEnrolledState(); if (envelope.SendAsync) { SendAsync(message, transactionalState); } else { // TODO: Should be unified after https://github.com/Azure/amqpnetlite/pull/374 is sorted out if (transactionalState != null) { SendSync(message, transactionalState); } else { senderLink.Send(message, TimeSpan.FromMilliseconds(session.Connection.Provider.SendTimeout)); } } } catch (TimeoutException tex) { throw ExceptionSupport.GetTimeoutException(this.senderLink, tex.Message); } catch (AmqpException amqpEx) { string messageId = AmqpMessageIdHelper.ToMessageIdString(message.Properties?.GetMessageId()); throw ExceptionSupport.Wrap(amqpEx, $"Failure to send message {messageId} on Producer {info.Id}"); } catch (Exception ex) { Tracer.ErrorFormat( $"Encountered Error on sending message from Producer {info.Id}. Message: {ex.Message}. Stack : {ex.StackTrace}."); throw ExceptionSupport.Wrap(ex); } } }
public void Send(OutboundMessageDispatch envelope) { if (envelope.Message.Facade is AmqpNmsMessageFacade facade) { AmqpCodec.EncodeMessage(facade); global::Amqp.Message message = facade.Message; try { // If the transaction has failed due to remote termination etc then we just indicate // the send has succeeded until the a new transaction is started. if (session.IsTransacted && session.IsTransactionFailed) { return; } var transactionalState = session.TransactionContext?.GetTxnEnrolledState(); if (envelope.SendAsync) { SendAsync(message, transactionalState); } else { SendSync(message, transactionalState); } } catch (TimeoutException tex) { throw ExceptionSupport.GetTimeoutException(this.senderLink, tex.Message); } catch (AmqpException amqpEx) { string messageId = AmqpMessageIdHelper.ToMessageIdString(message.Properties?.GetMessageId()); throw ExceptionSupport.Wrap(amqpEx, $"Failure to send message {messageId} on Producer {info.Id}"); } catch (Exception ex) { Tracer.ErrorFormat( $"Encountered Error on sending message from Producer {info.Id}. Message: {ex.Message}. Stack : {ex.StackTrace}."); throw ExceptionSupport.Wrap(ex); } } }
public void Send(OutboundMessageDispatch envelope) { if (envelope.Message.Facade is AmqpNmsMessageFacade facade) { AmqpCodec.EncodeMessage(facade); global::Amqp.Message message = facade.Message; try { var transactionalState = session.TransactionContext?.GetTxnEnrolledState(); if (envelope.SendAsync) { SendAsync(message, transactionalState); } else { SendSync(message, transactionalState); } } catch (TimeoutException tex) { throw ExceptionSupport.GetTimeoutException(this.senderLink, tex.Message); } catch (AmqpException amqpEx) { string messageId = AmqpMessageIdHelper.ToMessageIdString(message.Properties?.GetMessageId()); throw ExceptionSupport.Wrap(amqpEx, $"Failure to send message {messageId} on Producer {info.Id}"); } catch (Exception ex) { Tracer.ErrorFormat( $"Encountered Error on sending message from Producer {info.Id}. Message: {ex.Message}. Stack : {ex.StackTrace}."); throw ExceptionSupport.Wrap(ex); } } }