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 SO. Pour un webjob sans déclenchement (Windows Service-similaire), suis-je censé utiliser 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> Timertrigger code> ou
queuetrigger code>).
Je cherche spécifiquement à
webjobs sdk 3.x code>, à la manière.
noautomatictrigger code> et trouver un moyen de lancer manuellement mon code "principal"? 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;
}
}
}
3 Réponses :
Vous pouvez vérifier la réponse de @george Chen à partir de ce message Comment créer un bus de service Trigger Webjob? P>
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. P>
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.
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): et puis vous pouvez utiliser di pour Instanciez votre client de bus de service et injectez sur le constructeur de votre classe de travail. P> Ici, j'ai l'initialisation de l'instance Singleton de mon client de bus de classe personnalisé P> Puis sur cette classe personnalisée, j'initialise mon client d'abonnement p>
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
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 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 puis j'ai volé le Puis j'ai créé un alors je mets tous ensemble dans quelque chose comme ceci: p> 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>
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>
webjobsshutdownwatcher code> code de leur repo . P >
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>
IHostedService myService = new MyService();
using (var host = new ServiceHostBuilder().HostService(myService))
{
await host.RunAsync(default);
}
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