Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Singleton Azure function running as separate instances

We have an Azure function that is supposed to be handling several service bus triggers at the same time and what I assume is happening is that it is being split across several instances which is causing some concurrency problems on our end.

We need our function to act as a singleton so we can process requests one at a time without any collisions. From what we looked into in this article (https://learn.microsoft.com/en-us/azure/app-service/webjobs-sdk-how-to#singleton-attribute) we should be able to accomplish this.

Our function looks like this:

[Microsoft.Azure.WebJobs.Singleton(Mode = SingletonMode.Listener)]
[FunctionName("AccountCreatedSubscriber")]
public static void Run([ServiceBusTrigger("accountscontacts-account-created", "license-keys", Connection = "FBISEventBus")]BrokeredMessage message, ILogger log)
{
    log.LogInformation($"{{ Message received from accountscontacts-account-created topic }}");

    // Do Work
    log.LogInformation($"{{ Message sent to account creation handler }}");
}

And for backup we also have this in our host.json file,

{
  "serviceBus": { "maxConcurrentCalls": 1 }
}

But for whatever reason our functions are still running parallel. Any ideas?

like image 805
tokyo0709 Avatar asked Dec 17 '22 19:12

tokyo0709


1 Answers

  1. If your function is on Consumption plan, set WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT to 1 in Application settings.

  2. Check your Azure Function runtime version in portal(Platform features> Function app settings). If it's ~2, we need to modify service bus setting in host.json as below.

    {
        "version": "2.0",
        "extensions": {
            "serviceBus": {
                "messageHandlerOptions": {
                   "maxConcurrentCalls": 1
                }
            }
        }
    }
    
like image 181
Jerry Liu Avatar answered Jan 01 '23 06:01

Jerry Liu