My application is required to publish messages to thousands of clients with high throughput requirements (hundreds of, maybe 1000+ messages per second) in order to keep local client databases in sync with the server database. Every server database operation would potentially require a message to be published to a location of 20 or less clients. Clients only have database information for their particular location. Thousands of locations exist.
My idea was to use Azure Service Bus topic/subscription model for this. Each client would establish a subscription (and connection) to the database sync topic and receive filtered messages for their location.
However, according to the Azure Service Bus Quota page, I am limited to the following:
- Number of concurrent connections on a namespace - 1,000
- Number of concurrent connections on a queue/topic/subscription entity - Capped by the limit of concurrent connections per namespace.
- Number of subscriptions per topic - 2,000
With these limitations now in mind, my solution does not seem usable. What is the best approach to solving this problem using Azure Service Bus? To get around the subscriptions per topic limit I could just create a topic per location. However, the killer really is the number of concurrent connections on a topic/namespace (I think). All clients would be subscribed and long-polling for sync messages to come down from each topic and that would be thousands. Would I need to create a new namespace and topic per location? This seems problematic since I would have to open a new connection each time I want to publish from the server which is very frequent.
Is Azure Service Bus not the correct solution for this problem?