Working with Envelopes
The IMessageContext.SendEnvelope(Envelope)
method allows you to override how a Jasper message is sent and even processed by directly altering the Envelope
object that is created for you behind the scenes by IMessageContext.Send()
or IMessageContext.Publish()
. Here are some sample customizations of Envelope
to control how a message is published:
public Task CustomizingEnvelope(IMessageContext bus)
{
var envelope = new Envelope(new SomeMessage())
{
// Override the message routing by a Uri
Destination = new Uri("tcp://server1:2000"),
// Make this a scheduled message
ExecutionTime = DateTime.UtcNow.AddDays(1),
// Direct the receiver that the sender is interested in any response
// with this message type
};
// This envelope should be discarded if not processed
// successfully within 5 days
envelope.DeliverBy = DateTimeOffset.UtcNow.AddDays(5);
// Discard the message after 20 seconds if
// not successfully processed before then
envelope.DeliverWithin(20.Seconds());
// Send the envelope and its contained message
return bus.SendEnvelope(envelope);