Skip to content

acoudene/BusHandlerWindowsService

Repository files navigation

BusHandlerWindowsService

Show Service Bus Handler (NServiceBus) hosted in a windows service and executable in .Net 7, which then, call business MFC C++ dlls. Message management will be ensured by RabbitMQ (inside Docker container).

Les objectifs

  • Démontrer qu’on peut se brancher sur une version de NServiceBus sous licence perpétuelle (version : 7.1.6). Note : on ne peut pas prendre les versions récentes sans payer en locatif désormais et suivant le nombre de endpoints.
  • Démontrer qu’on peut créer un service NT via .Net 7
  • Montrer que l’exécutable fourni n’a pas besoin d’installer quoi que ce soit sur la cible, j’ai choisi de produire un exécutable unique incluant toutes les dlls nécessaires dont celles de .Net 7 (Mode de publication avec les options : Produce single file + Self-contained)

image

  • Montrer qu'on peut continuer à faire de l'interop vers du C++ MFC via .Net 7 et un wrapper C++/CLI
  • Appliquer RabbitMQ en dessous NServiceBus

Worflow visé

Messaging Workflow - from command to business library  (1)

Découpage

La solution du prototype est découpée en 7 projets :

  • 1 projet (exécutable) qui émet une commande CreateOrder : PublisherApp
  • 1 projet (exécutable) qui reçoit la commande CreateOrder et émet en ensuite un évènement OrderCreated : SubscriberApp
  • 1 projet (exécutable ou Service Windows) qui reçoit l’évènement OrderCreated : WindowsService
  • 1 projet de messages à échanger entre les différents exécutables : Messages
  • 1 projet qui prend en charge tous les handles de récupération des messages : BusHandler
  • 1 projet de librairie MFC C++ qui fait du pur métier : MFCBusinessLibrary
  • 1 projet de wrapper d'interop C++/CLI entre la librairie MFC C++ et .Net : WrapperBusinessLibrary

image

Test en Debug

Pour tester, rien de plus simple, faire simplement un lancement multiple :

image

NServiceBus va s'appuyer sur le mode LearningTransport (pas besoin de RabbitMQ ici)

Déploiement ou Test en Release

RabbitMQ

Faire tourner RabbitMQ via Docker.

docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

Faire en sorte d'avoir une chaîne de connexion RabbitMQ

  • virtual host : vhost-bhws
  • user = user-bhws ayant accès au virtual host
  • password = p@ssw0rd
host=localhost:5672;username=user-bhws;password=p@ssw0rd;virtualhost=vhost-bhws

Note : des explications pour réaliser ce paramétrage pourront être ajoutées à ce document.

Service Windows

Pour installer le service windows sur votre machine, rien de plus simple faire dans un terminal :

  • WindowsService /Install
  • Puis faire Run dans la console services.msc

Pour désinstaller le service windows, faire :

  • WindowsService /Uninstall
  • Attention, j’ai pas corrigé mais il faut que le service soit démarré pour que la suppression se fasse correctement (je fais d’abord un équivalent de sc stop puis d’un sc delete)

About

NServiceBus Handler hosted in a windows service

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published