Various uses of RSS
RSS, or Really Simple Syndication or Rich Site Summary, is a popular broadcasting protocol. A collection of items is made available to outside parties by packaging a digest of it and releasing it. The outside parties can determine what items have been added to the feed, which ones were updated, etc… The digest also provides pointers toward the location of the items.
RSS is pretty popular among the DIY crowd which uses it mostly for keeping in synch with the blogs and sites it follows. Various sites, such as rojo.com, are using it under the hood for enabling users to keep in touch with their blogs. It is creeping into browsers and since IE 7 will have an RSS reader it is a safe bet that this technology is becoming mainstream. I find it interesting that it is becoming mainstream because this is a mindset change: rather than looking for information on the web you wait for this info to be pushed to you. Anyway, I didn’t intend to talk about social changes in this entry.
I am more interested in RSS’s behavior and the way you could apply to various problems.
One of the first uses would be to use RSS for broadcasting events in a group. Let’s say that you are a MySpace user and want to send a message to a group of people. MySpace could broadcast the message to your group by using RSS: each group member would have access to the group’s feed and any member could write to this feed. The result would be that each member could send a message which is guaranteed to be received by the rest of the group as long as the RSS server is up. Setting up this messaging infrastructure in a web application could be as easy as getting an RSS AJAX client and mapping it to the appropriate feed.
Let’s go to some exotic uses of RSS. The fact that RSS is a platform-agnostic broadcasting protocol means that it could be used for managing the interactions between various services in an SOA environment. To go back to the tax example: you have to apply a service (taxation) across a wide array of applications deployed on different platforms in a financial institution. You could have each of these application broadcast events (such as a stock have been traded, a commodity has been bought or sold, etc…) in an RSS feed and the tax program would listen to all these events and take appropriate action. The messaging infrastructure would be pretty simple to implement on both sides, I assume that there are quite a few clients written for various platforms.
You could use it for pushing deltas in a cluster if guaranteed delivery is not mandatory. A company could consolidate its messaging infrastructure using RSS: the email client would be replaced with an RSS client that is mapped to a specific feed, various groupware software could work off RSS feeds.
Various client-server interaction could be implemented easily with RSS: I wrote a desktop application that had to connect to a server and get the latest updates for catalogs, accounts, etc… This could have been done very easily using RSS. The changes in a catalog would have been published in an RSS feed and the client would have just had to connect to this feed and get its updates. Gone is the proprietary protocol which cost me a few nights, instead you get a tried, tested and true RSS client and plug it in your application.
An anti-virus or a patch manager could get a list of the latest virus definitions or patches and their location in an RSS feed and proceed with installation based on the information published in the feed.
I don’t want to be misunderstood. I am not suggesting to gut out MOM and replace it with RSS, I’m suggesting to consider RSS when you need an infrastructure for passing messages with a certain reliability rather than build it in-house. You could have various parts of your application talking to each other literally in seconds. I hold the conviction that code-writing is an error-proce process which has to be minimized as much as possible. In order to do this we have to start thinking in processes, we have to look at various technologies in an open way, realize their potential and use it.
