Hi Thanks for the question
So the short answer; even though you only have one [Ep1] plan instance, which i presume you've set manually, you need to both control the in process trigger concurrency here (max concurrent calls) which you're doing .
You dont need to batch in this scenario (so that config can be skipped) as it's an opt-in trigger functionality. (Opt in or out via the isBatched setting).
You also need to control the function host. The singleton behaviour is the way to do that. Singleton is summed up in a line , in the following comment by Jeff Hollan https://github.com/Azure/azure-functions-host/issues/912#issuecomment-419608830
As far as FIFO goes - service bus only makes the guarantee with sessions enabled - but yes with a singleton, single message processing sequentially it should work. However, assuming you're on a tier which supports it, and its a business critical requirement , I'd opt into using sessions even in this constrained scenario because then there's no ambiguity - the infrastructure will make the guarantee. REF https://learn.microsoft.com/en-us/azure/service-bus-messaging/message-sessions#first-in-first-out-fifo-pattern for example there's no guarantee that without sessions a transient fault might not cause a change in order
A similar Q&A here for ref https://learn.microsoft.com/en-us/answers/questions/494522/function-to-process-only-single-message-at-one-tim
One other thing to mention here - doing what you're doing (single compute instance, singleton behaviour) does leave you vulnerable from a business continuity and SLA perspective - you dont have any resilience . if your function or the underlying host faults you will be at risk of downtime. Using session mitigates this as it allows co-ordinated locking and session management between receivers (as explained in that last link)