Thanks for the response Sean. Basically, we are looking to emulate behavior similar to how partitions are used in Apache Kafka. That is, take a stream of entity update events and consume them using multiple consumers, but provide a guarantee that at least all messages for the same entity instance (i.e. with the same id) are routed to the same consumer. We only need local ordering guarantees, not global ordering guarantees. We have had conversations with Microsoft and have a strategy for doing what we need to do with Service Bus, but we are also looking at available frameworks for putting a little bit more structure and consistency to our microservices architecture. We were looking at NServiceBus as one possible option, but needed to understand if the two things (Azure Service Bus Sessions and NServiceBus) could play together. It sounds like the answer is No … or at least not right now.
We currently use Service Bus (.NET Core MS client) and things mostly work, but because we have multiple threads processing messages from the same topic, the concurrency sometimes results in our messages being processed out of order … i.e. either lost updates or optimistic concurrency errors. This is particularly a problem when we are recovering from a Service Bus outage (even fairly short ones) because messages that were generated relatively far apart in time can sometimes be processed concurrently. Anyway, I think I think I have my answer, but if you have any thoughts, your inputs are certainly appreciated.