[rabbitmq-discuss] versioned routing

Santi Manninen santikschzt at gmail.com
Thu Jul 29 18:38:33 BST 2010


I've been trying to figure out a way to single out service versions
for front end users.
Here is the current, simplified scenario:

- Web users with sessions issue requests to a front end server, which
just routes their messages
- Messages are routed to queues called 'LoginService' and 'PingService'

I have a number of LoginService and PingService instances, each bound
to the same queue, so messages are distributed with round-robin and I
can add/remove them based on demand. Wonderful.

PingService currently runs 1.0. Now, I'd like to add a completely new
version of PingService, 1.0.1, with spiffy new features, and have
'selected users' (through Sessions given from LoginService) use the
new version and try it out, so I can monitor and test that the new
version of PingService works correctly before moving more, or all
users into the new version, and deploying 1.0.1 onto more servers.

We talked about doing this with |Blaze|| on the IRC channel (thanks!)
but we didn't really come up with an elegant solution yet.

- Bind the PingService queues with the version name in the queue name,
and have the front end route messages to PingService, based on the
version defined in the Session. Many problems with this. Old users
with active sessions bound to the previous version (which was just
built 15 minutes ago, perhaps!) will lose service once the new version
is completely rolled out, and a failover from basicReturn in the
client would have to be implemented.
- Use topic exchanges for each version, eg. 1.0.1.topic, and a
catch-all with *.topic. I think round-robin is lost here?

That's the gist of it. Your help is appreciated. Thanks!


More information about the rabbitmq-discuss mailing list