4 votes

Azure Durable Functions se met en sommeil

J'ai une fonction azur durable (2.0) qui fait appel à elle-même pour une orchestration éternelle, sur la base des éléments suivants cet article . Code ci-dessous. Cela fonctionne bien et s'exécute pendant environ 20 minutes (disons environ 50 itérations). Cependant, après ce temps, il se met en veille et cesse de fonctionner. Si je me rends sur le portail Azure, que je clique sur l'application Fonctions et que je clique sur la liste des fonctions (c'est-à-dire que je ne fais que cliquer, sans modifier les paramètres ni arrêter ou démarrer quoi que ce soit), il se réveille soudainement et continue à fonctionner sans problème. Il n'y a pas d'erreurs ou de problèmes dans les journaux, juste une indication de la période d'inactivité, puis les journaux reprennent. Est-ce qu'il me manque un paramètre quelque part ?

public static async Task Run([OrchestrationTrigger] DurableOrchestrationContextBase ctx, ILogger log)
{
    try
    {
        var config = ctx.GetInput<Config>();
        config = await ctx.CallActivityAsync<Config>("GetConfig", null);
        await ctx.CallActivityAsync("ProcessDetails", config);

        var nextCheckpoint = ctx.CurrentUtcDateTime.AddSeconds(config.PollingIntervalInSeconds);

        await ctx.CreateTimer(nextCheckpoint, CancellationToken.None);             
        ctx.ContinueAsNew(config);   
    }
    catch (Exception ex)
    {
        log.LogError($"[Error!][Failed with: {ex.ToString()}]");
        throw;
    }
}

Après avoir appuyé sur le bouton de rafraîchissement comme décrit par @davidebbo, le problème persiste, voir le journal ci-dessous.

enter image description here

Autre mise à jour, même si le numéro sur GitHub semble résolu, j'avais encore besoin de faire le double réglage de configuration comme indiqué ci-dessous afin d'obtenir ma fonction fiable.

{
  "version": "2.0",
  "extensions": {

    "durableTask": {
      "HubName": "myHub",
      "maxConcurrentActivityFunctions": 10,
      "maxConcurrentOrchestratorFunctions": 1
    }
  },
  "durableTask": {
    "HubName": "myHub",
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 1
  },
  "functionTimeout": "00:10:00"
} 

Aujourd'hui, nous avons toujours des problèmes après avoir optimisé le code, même si les mesures semblent solides.

enter image description here

3voto

OxQ Points 832

Cette situation peut se produire lorsque vous utilisez le plan de consommation pour votre Func. Cela signifie qu'après une certaine période d'infectivité, Azure suspendra votre Func et lorsqu'un nouvel événement ou une nouvelle demande se produira dans un système, il réactivera votre fonction. Pour résoudre ce problème, vous pouvez faire ce qui suit

  • utiliser le plan App Service
  • utiliser le plan Premium
  • créez une application pour chauffer vos fonctions.

Vous pouvez lire plus de détails dans este article

1voto

David Ebbo Points 13246

Vous étiez probablement en train de courir dans cette question .

Le problème est maintenant résolu, mais si vous avez été affecté, vous devez explicitement synchroniser les déclencheurs une fois maintenant que la correction est sortie. Pour ce faire, allez sur l'application de fonction dans le portail et cliquez sur la petite icône de rafraîchissement à côté du nom de l'application de fonction dans l'arbre. Vous ne devez le faire qu'une seule fois.

Ensuite, vous pouvez quitter le portail et il devrait continuer à fonctionner tranquillement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X