Exposer une méthode

Pour exposer une méthode Python dans Constellation vous devez tout simplement ajouter le décorateur “Constellation.MessageCallback” sur votre méthode :

Ici nous déclarons le MessageCallback “SimpleMessageCallback” avec un seul paramètre nommé “data”.

Le paramètre peut être aussi un objet complexe :

Et vous pouvez également définir plusieurs arguments sur votre MessageCallback (simple ou complexe) :

Ou bien même exposer des méthodes sans argument :

L’ensemble de ces méthodes déclarées “MessageCallbacks” seront alors référencées dans la Constellation. Vous pouvez les découvrir en interrogeant le Package Descriptor de votre package.

Par exemple, lancez la Console Constellation et rendez-vous dans le “MessageCallback Browser”. Vous aurez la liste de vos méthodes avec la possibilité de les invoquer directement depuis l’interface :

image

Documenter son MessageCallback

Comme vous l’avez remarqué dans les exemples précédents, nous utilisons la documentation des méthodes de Python :

La documentation de la méthode est utilisée comme description du MessageCallback :

image

Personnaliser le MessageCallback

Comme pour l’API.NET, par défaut le nom du MessageCallback déclaré dans la Constellation est le nom de votre méthode mais vous pouvez redéfinir le nom exposé dans la Constellation :

Aussi vous pouvez “cacher” ce MessageCallback à la Constellation.

Tous les packages ou consommateurs de votre Constellation pourront envoyer un message “HiddenMessageCallback” à votre package Python et donc invoquer votre méthode mais celle-ci ne sera pas déclarée dans le “Package  Descriptor”.

Récupérer le contexte

Comme avec l’API.NET, vous pouvez récupérer le contexte de réception du message en déclarant comme dernier argument de votre MessageCallback, le paramètre “context”.

Par exemple :

Ou avec des paramètres :

Il faut juste que le dernier argument soit nommé “context”. Notez qu’il ne fait pas partie de la signature de votre MessageCallback.

Ci-dessus, le 1er exemple est un MessageCallback caché et sans paramètre et le 2ème n’a que deux paramètres “a” et “b”.

L’objet “context” correspondant à la classe “Constellation.Package.MessageContext”. Vous retrouvez les propriétés suivantes :

  • IsSaga : indique si le message reçu appartient à une Saga
  • SagaId : identifiant de la Saga (si IsSaga = true)
  • Scope : scope d’envoi du message reçu
    • Type : type du scope (All, Group, Package, Sentinel, Others)
    • Args : arguments du scope (ex : nom du groupe, du package ou de la sentinelle)
  • Sender : représente l’émetteur du message
    • ConnectionId : identifiant de connexion unique de l’émetteur
    • Type : type de l’émetteur (ConsumerHub, ConstellationHub, ConsumerHttp ou ConstellationHttp)
    • FriendlyName : nom de l’émetteur

Répondre aux Sagas

Enfin votre méthode peut également retourner une réponse à l’appelant, c’est ce que l’on appelle une saga. Pour cela vous devez “retourner” une valeur de retour et déclarer le type de cet objet de réponse dans le décorateur.

Cela marche également en combinant la récupération du contexte :

Par exemple en ouvrant le “Message Callback Explorer” de la Console Constellation vous constaterez que votre MC “DemoSaga” est bien référencé comme retournant un “Booléen” en prenant deux arguments (car “context” n’est pas reconnu comme argument du MC) :

image

En invoquant cette méthode depuis la console, vous recevrez alors la réponse du package, ici un booléen :

image

Dans les logs, on retrouve bien la trace de l’invocation de notre Saga avec le “contexte” :

image

(le FriendlyName de la Console Constellation est “Consumer/ControlCenter:<user>”).

MessageCallback : Exposer des méthodes Python
Editer la page sur GitHub
Étiqueté avec :                        

Démarrez la discussion sur le forum Constellation