0
votes

Comment implémenter une application de console de Core Core Core sans déclenchement en tant que Webjob continue Azure?

Tous les échantillons de code que j'ai vu jusqu'à présent pour Azure Webjobs s'appuient sur une sorte de déclencheur (par exemple Timertrigger code> ou queuetrigger code>). Je cherche spécifiquement à webjobs sdk 3.x code>, à la manière.

SO. Pour un webjob sans déclenchement (Windows Service-similaire), suis-je censé utiliser noautomatictrigger code> et trouver un moyen de lancer manuellement mon code "principal"? P>

ou devrais-je recourir à Implémentation et enregistrement d'une classe qui implémente l'interface code> iHostedService code>? Jusqu'à présent, c'est l'approche que je prends, mais cela ressent plus d'un piratage que de manière recommandée. Je n'ai même pas essayé de déployer ce code et je ne suis que dans ma machine locale. Je crains donc que le processus de publication confirme que mon code ne convient pas aux webjobs Azure dans sa forme actuelle. P>


entréePoint.cadpoint.cs strong> p>

Voici comment l'application est en train d'être bootstrap lorsque le processus commence. P>

using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using AbcCorp.Internal.Microsoft.Azure.ServiceBus;
using AbcCorp.Api.Messaging;

namespace AbcCorp.Jobs
{
    public sealed class ConsoleApplication: IHostedService
    {
        private readonly IReceiver<SubmissionNotification> _messageReceiver;
        private readonly MessageHandler _messageHandler;

        public ConsoleApplication(IReceiver<SubmissionNotification> messageReceiver, MessageHandler messageHandler)
        {
            _messageReceiver = messageReceiver;
            _messageHandler = messageHandler;
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            _messageReceiver.StartListening(_messageHandler.HandleMessage, _messageHandler.HandleException);
            return Task.Delay(Timeout.Infinite);
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            _messageReceiver.Dispose();
            return Task.CompletedTask;
        }
    }
}


4 commentaires

Pourquoi ne pas essayer le bus de service de bus de service Webjob?


@george parce que ce n'était pas la conception envisagée du système que je travaille. Existe-t-il un moyen de réaliser ce que je demande ou une utilisation d'une sorte de déclencheur est mandaté?


Premièrement, le webjob de Trigger de bus de service est en fait un webjob continu. Ensuite, si votre fonction de console est correcte, supposez que vous puissiez le déployer comme WebJob continu directement comme une simple application de console World Hello World. Si vous n'utilisez pas WEBJOB SDK, alors pas de formulaire beaucoup à rencontrer.


@Georgechen j'ai relu votre commentaire trois fois et je ne l'obtiens toujours pas. Si vous avez une idée de la manière d'obtenir une application de console autonome Travailler dans l'environnement Azure WebJobs sans utiliser de déclencheurs - veuillez écrire une réponse et je vais vous assurer bien. Merci


3 Réponses :


0
votes

Vous pouvez vérifier la réponse de @george Chen à partir de ce message Comment créer un bus de service Trigger Webjob?

Où au lieu de créer un récepteur et d'enregistrer un gestionnaire de messages, vous pouvez utiliser la gâchette de la file d'attente construite et écrire la logique de votre gestionnaire de messages à l'intérieur.


1 commentaires

Deux raisons. 1. J'ai un code de travail, je suis contraint dans le temps et j'essaie d'éviter d'ajouter plus d'acteurs à ma conception. 2. Je ne veux pas avoir de gâchette en premier lieu. Mais plutôt avoir mon propre code d'auditeur déployé dans une manière Windows Service de même.



1
votes

J'ai des travailleurs attachés aux sujets de bus de service et ce que nous faisons est ce que nous suivants (ServiceBusClient est une classe personnalisée contenant notre client d'abonnement): xxx

et puis vous pouvez utiliser di pour Instanciez votre client de bus de service et injectez sur le constructeur de votre classe de travail.

Ici, j'ai l'initialisation de l'instance Singleton de mon client de bus de classe personnalisé xxx

Puis sur cette classe personnalisée, j'initialise mon client d'abonnement xxx


3 commentaires

Merci de partager cela! Pourriez-vous s'il vous plaît montrer le gist de votre programme.cs ou quelle que soit la classe de points d'entrée? Je suis intéressé de voir à quel point ma configuration est différente de la vôtre en ce qui concerne la configuration, l'instanciation de service et le lancement de DI. Cela devrait être suffisant pour que je puisse procéder et accepter votre réponse. Merci!


Upvoted. Cela ne semble pas être une solution de base .NET mais .NET framework si je ne me trompe pas.


Pas d'igor. Ceci utilise .NET CORE 3.0



1
votes

Vous voulez donc une application de console qui exécute dans un webjob et écoutez des messages. Vous ne vous souciez pas vraiment de webjob Magic comme des déclencheurs, c'est juste un endroit pour exécuter votre application de console. J'ai fait exactement la même chose avant.

J'ai trouvé le ihostedservice code> abstraction pour être très utile, mais je n'ai pas aimé leur SDK. Je l'ai trouvé gonflé et difficile à utiliser. Je ne voulais pas prendre une grande dépendance dans l'ordre Utilisez une grande gamme de trucs spéciaux azur spéciaux, lorsque tout ce que je voulais faire était d'exécuter une application de console dans un webjob pour l'instant, et peut-être le déplacer ailleurs plus tard. P>

J'ai donc fini simplement supprimer cette dépendance, voler le code d'arrêt du SDK et écrire mon propre hôte de service. Le résultat est sur mon repo Azure-webjob-host . N'hésitez pas à l'utiliser ou de le raid pour les idées. Je ne sais pas, peut-être que si je l'ai fait de nouveau, j'aurais une autre tentative pour que le SDK fonctionne, mais je présente que c'est un peu d'alternative au SDK. P>

essentiellement j'ai écrit un IserviceHost n'est pas trop différent de la vôtre (sauf que startasync code> est sorti lorsque des trucs ont commencé au lieu de suspendre simplement). Ensuite, j'ai écrit mon propre hôte de service, qui est essentiellement juste une boucle: p> xxx pré>

puis j'ai volé le webjobsshutdownwatcher code> code de leur repo . P >

Puis j'ai créé un iserviceHost code> qui a démarré mon gestionnaire de messages. (J'utilisais la lapin, qui n'a rien à voir avec des déclencheurs ou des trucs azur) p> xxx pré>

alors je mets tous ensemble dans quelque chose comme ceci: p>

IHostedService myService = new MyService();

using (var host = new ServiceHostBuilder().HostService(myService))
{
    await host.RunAsync(default);
}


0 commentaires