/// <summary>Sends a request message and waits for a reply.</summary> /// <param name="request">The message to send</param> /// <returns>The reply message</returns> /// <exception cref="TimeoutException">Thrown when the message has not been received by the target processor before <see cref="TimeToBeReceived"/></exception> /// <exception cref="AcknowledgmentException">Thrown when the message cannot be delivered to the destination queue</exception> public Message SendRequest(Message request) { Contract.Requires(request != null); Contract.Ensures(Contract.Result <Message>() != null); SetupRequest(request); var tracking = _postman.RequestDelivery(request, _requestQueue, null); _postman.WaitForDelivery(tracking); _postman.WaitToBeReceived(tracking); return(_responseQueue.ReadByCorrelationId(request.Id)); }
/// <summary> /// Sends a <paramref name="message"/> to the <paramref name="queue"/> and waits for it to be delivered. /// Waits for responses from all queues when the <paramref name="queue"/> is a multi-element format name. /// Note that the transaction MUST commit before the acknowledgements are received. /// </summary> /// <returns>Task that completes when the message has been delivered</returns> /// <exception cref="TimeoutException">Thrown if the message does not reach the queue before the <see cref="ReachQueueTimeout"/> has been reached</exception> /// <exception cref="AcknowledgmentException">Thrown if something bad happens, e.g. message could not be sent, access denied, the queue was purged, etc</exception> public static Task DeliverAsync(this QueueWriter queue, Message message, Postman postman, QueueTransaction transaction = null) { Contract.Requires(queue != null); Contract.Requires(message != null); Contract.Requires(postman != null); Contract.Requires(transaction == null || transaction == QueueTransaction.None || transaction == QueueTransaction.Single); var t = postman.RequestDelivery(message, queue, transaction); return(postman.WaitForDeliveryAsync(t)); }
public static Tracking RequestDelivery(this QueueWriter queue, Message message, Postman postman, QueueTransaction txn = null) => postman.RequestDelivery(message, queue, txn);