JasperFx 0.9.0


Next

TCP Transport

Previous

Messaging Transports

Durable Messaging Edit on GitHub


Note! This transport works by sending traffic directly via sockets and may not be acceptable in your IT department policies. We are pursuing the usage of JWT's to secure the traffic between applications using the socket based transports, see the GitHub issue
Note! The durable transport is "wire compatible" with the lightweight transport, and it is possible to send from a durable transport Uri in one application to a lightweight transport listener in a second application or vice versa.

The durable transport is meant for scenarios where guaranteed delivery is required. The durable transport is a "store and forward" queueing mechanism that uses some kind of pluggable persistence to track messages from the sender until they are successfully received by the intended subscriber, and from the subscriber until the message has either been successfully processed or the error policies delete or move the message after too many failures.

If a Jasper system that uses the durable transport goes down before all the messages are processed, the persisted messages will be loaded from storage and processed when the system is restarted. Jasper does not include any kind of persistence in the core Jasper library, so you'll have to use an extension library to add that behavior. Today the options are:

  1. A Marten/Postgresql backed option
  2. A Sql Server backed option

To use the durable transport, here are examples of all the common use cases:


public class DurableTransportApp : JasperRegistry
{
    public DurableTransportApp()
    {
        // Set up a listener (this is optional)
        Transports.DurableListenerAt(2200);

        // Or, alternatively set up durable listening by Uri
        Transports.ListenForMessagesFrom("tcp://localhost:2200/durable");

        // Or, alternatively set up durable listening by Uri
        Transports.ListenForMessagesFrom("durable://localhost:2200");

        // With the RabbitMQ transport
        Transports.ListenForMessagesFrom("rabbitmq://server1/durable/queue1");
    }
}

See Durable Messaging in Jasper for more context behind the durable messaging.