Hi, I have been using a combination of Redis MQ and within the handler SSE to notify clients of progress updates. This has been working fine until I scaled an Azure website out - obviously the HTTP connection that SSE relies on is only to a single instance, and the workload is shared across multiple servers - each client would only get notifications for tasks that their instance performed.
Is a potential way round this to use Redis PubSub as a “backplane” for the progress updates - the servers subscribe to a channel, and any progress from any server Publishes a message. The appropriate OnMessage delegate then and broadcasts SSEs to all that instance’s clients. Would this work? If so, where would the RedisClient.CreateSubscription() code and delegates live - tried this in global.asax, but caused my IIS to hang, so clearly getting something wrong. Any pointers greatly appreciated.
G
Hi Graham, have you seen docs on the RedisServerEvents provider? https://github.com/ServiceStack/ServiceStack/wiki/Redis-Server-Events
It enables using Redis to be used a back-end for Server Events which works transparently so all you’ll need to do is register a RedisServerEvents
provider and all the API’s remain the same, e.g:
container.Register<IServerEvents>(c =>
new RedisServerEvents(c.Resolve<IRedisClientsManager>()));
Graham Laidler:
Hi - many thanks - how did I miss this? - I am already using this, so there must be another reason why these are failing when I scale out. I will continue to dig.