Difference between revisions of "Durable Subscription"

From Open Rail Data Wiki
Jump to navigation Jump to search
m (Updated information on the TSR feed)
Line 1: Line 1:
= Durable Subscriptions =
+
= What are they? =
 
 
== What are they? ==
 
  
 
"A durable subscription saves messages for an inactive subscriber and delivers these saved messages when the subscriber reconnects. In this way, a subscriber will not lose any messages even though it disconnected. A durable subscription has no effect on the behaviour of the subscriber or the messaging system while the subscriber is active (e.g., connected). A connected subscriber acts the same whether its subscription is durable or non-durable. The difference is in how the messaging system behaves when the subscriber is disconnected." -- http://www.eaipatterns.com/DurableSubscription.html
 
"A durable subscription saves messages for an inactive subscriber and delivers these saved messages when the subscriber reconnects. In this way, a subscriber will not lose any messages even though it disconnected. A durable subscription has no effect on the behaviour of the subscriber or the messaging system while the subscriber is active (e.g., connected). A connected subscriber acts the same whether its subscription is durable or non-durable. The difference is in how the messaging system behaves when the subscriber is disconnected." -- http://www.eaipatterns.com/DurableSubscription.html
  
== Why should I use one? ==
+
= Why should I use one? =
  
 
You may occasionally disconnect from the Datafeeds service - your client may crash, you may experience connectivity problems or you might simply need to reboot a machine.  A durable subscription stops you losing messages when you're not connected:
 
You may occasionally disconnect from the Datafeeds service - your client may crash, you may experience connectivity problems or you might simply need to reboot a machine.  A durable subscription stops you losing messages when you're not connected:
Line 15: Line 13:
 
The Time-to-Live (TTL) on messages is 5 minutes.  As long as you reconnect within 5 minutes from your last connection, on your next connection, you will receive all messages that you may have missed whilst your client was offline.
 
The Time-to-Live (TTL) on messages is 5 minutes.  As long as you reconnect within 5 minutes from your last connection, on your next connection, you will receive all messages that you may have missed whilst your client was offline.
  
== How do I request a durable subscription? ==
+
= How do I request a durable subscription? =
  
 
You don't need to rewrite your client!  Just do these three things:
 
You don't need to rewrite your client!  Just do these three things:
  
 
* When you send a [http://stomp.github.com/stomp-specification-1.1.html#CONNECT_or_STOMP_Frame CONNECT] frame, send a '''client-id''' in the header.  Set this to the email address you use to subscribe - this makes it easy to identify who the durable subscriber belongs to
 
* When you send a [http://stomp.github.com/stomp-specification-1.1.html#CONNECT_or_STOMP_Frame CONNECT] frame, send a '''client-id''' in the header.  Set this to the email address you use to subscribe - this makes it easy to identify who the durable subscriber belongs to
* When you send a [http://stomp.github.com/stomp-specification-1.1.html#SUBSCRIBE SUBSCRIBE] frame, send a '''activemq.subscriptionName''' header.  Set this to unique string for each feed - for example, the hostname of your subscriber and the feed name, e.g. "prodbox-vstp"
+
* When you send a [http://stomp.github.com/stomp-specification-1.1.html#SUBSCRIBE SUBSCRIBE] frame, send a '''activemq.subscriptionName''' header.  Set this to a unique string for each feed - for example, the hostname of your subscriber and the feed name, e.g. "prodbox-vstp"
 
* Each time you receive a message, send an [http://stomp.github.com/stomp-specification-1.1.html#ACK ACK] so the service knows you've received it
 
* Each time you receive a message, send an [http://stomp.github.com/stomp-specification-1.1.html#ACK ACK] so the service knows you've received it
  
 
If your client disconnects and reconnects, the service will automatically send all queued messages when you reconnect.
 
If your client disconnects and reconnects, the service will automatically send all queued messages when you reconnect.

Revision as of 20:02, 28 April 2013

What are they?

"A durable subscription saves messages for an inactive subscriber and delivers these saved messages when the subscriber reconnects. In this way, a subscriber will not lose any messages even though it disconnected. A durable subscription has no effect on the behaviour of the subscriber or the messaging system while the subscriber is active (e.g., connected). A connected subscriber acts the same whether its subscription is durable or non-durable. The difference is in how the messaging system behaves when the subscriber is disconnected." -- http://www.eaipatterns.com/DurableSubscription.html

Why should I use one?

You may occasionally disconnect from the Datafeeds service - your client may crash, you may experience connectivity problems or you might simply need to reboot a machine. A durable subscription stops you losing messages when you're not connected:

  • The TD and Train Movements feeds are high-volume, and if you disconnect for even a minute, you can lose a lot of data
  • The VSTP feed contains new schedules, and if you miss one of these, you can't track that train
  • The TSR feed has a handful of messages on a Friday morning (when the Weekly Operating Notice is published)

The Time-to-Live (TTL) on messages is 5 minutes. As long as you reconnect within 5 minutes from your last connection, on your next connection, you will receive all messages that you may have missed whilst your client was offline.

How do I request a durable subscription?

You don't need to rewrite your client! Just do these three things:

  • When you send a CONNECT frame, send a client-id in the header. Set this to the email address you use to subscribe - this makes it easy to identify who the durable subscriber belongs to
  • When you send a SUBSCRIBE frame, send a activemq.subscriptionName header. Set this to a unique string for each feed - for example, the hostname of your subscriber and the feed name, e.g. "prodbox-vstp"
  • Each time you receive a message, send an ACK so the service knows you've received it

If your client disconnects and reconnects, the service will automatically send all queued messages when you reconnect.