Utilisation de STOMP pour la gestion des messages

Utilisez le protocole STOMP pour publier, consommer et gérer des messages dans une file d'attente.

Aperçu

STOMP est un protocole de messagerie ouvert qui peut améliorer l'efficacité de la production et de la consommation, car l'authentification est effectuée une fois par connexion, plutôt qu'une fois par demande. Le service de file d'attente prend en charge les spécifications STOMP 1.0, 1.1 et 1.2. Vous pouvez utiliser STOMP et REST pour publier des messages et en consommer dans la même file d'attente.

Voir les sections suivantes pour plus de détails sur la prise en charge de STOMP par le service de file d'attente :

Note

La file d'attente ne prend pas en charge les en-têtes ou les transactions personnalisés (trames STOMP BEGIN/COMMIT/ABORT). Le service de file d'attente retourne une trame ERROR et ferme la connexion si BEGIN/COMMIT/ABORT sont utilisés.

Connexion et authentification

Les clients peuvent utiliser la trame CONNECT ou STOMP pour se connecter au service de file d'attente sur son point d'extrémité pour les messages sur le port 61613. Pour des instructions détaillées sur la recherche du point d'extrémité pour les messages d'une file d'attente, voir Point d'extrémité pour les messages.

L'authentification avec le protocole STOMP utilise des jetons d'authentification. Les jetons d'authentification doivent être encodés en base64. Vous pouvez générer des jetons dans la page Détails de l'utilisateur de la console. Pour plus d'informations, voir Utilisation de jetons d'authentification.

Conseil

Créez un groupe ou un utilisateur dédié et accordez-lui l'autorisation de gérer des files d'attente dans le compartiment ou la location approprié. Générez ensuite un jeton d'authentification pour l'utilisateur que vous avez créé et l'utilisez dans la configuration de client STOMP. Voir Politiques de file d'attente et Exemples de politiques pour plus de détails sur les autorisations requises pour la gestion des files d'attente.

SEND

Utilisez la trame SEND pour produire des messages. Vous pouvez inclure les en-têtes suivants dans la trame SEND :

  • destination : (Obligatoire) OCID (identificateur Oracle Cloud) de la file d'attente vers laquelle publier les messages. Facultativement, vous pouvez inclure un ID canal à publier sur le canal spécifié. Par exemple :

    <queue_OCID>/<channel_ID>
  • receipt : (Facultatif) Si la trame SEND contient un en-tête receipt, le service de file d'attente envoie une trame RECEIPT au client lors de la publication réussie ou une trame ERROR en cas d'erreur.
    Note

    Si l'en-tête receipt est manquant, le service de file d'attente n'envoie pas de trame RECEIPT, mais peut quand même en envoyer une en cas d'erreur ERROR.

L'en-tête transaction et les en-têtes personnalisés ne sont pas pris en charge. Le service de file d'attente envoie une trame ERROR et ferme la connexion si des en-têtes non pris en charge sont inclus.

SUBSCRIBE

Utilisez la trame SUBSCRIBE pour consommer des messages. Le cadre SUBSCRIBE est égal à une demande longue de scrutation GetMessages. Tous les messages reçus sur la destination abonnée sont transmis au client sous forme de cadres MESSAGE à partir de la file d'attente. Vous pouvez inclure les en-têtes suivants dans la trame SUBSCRIBE :

  • destination : (Obligatoire) OCID (identificateur Oracle Cloud) de la file d'attente à partir de laquelle consommer les messages. Facultativement, vous pouvez inclure un filtre de canal à consommer à partir du ou des canaux spécifiés. Par exemple :

    <queue_OCID>/<channel_ID_filter>
    Note

    Pour plus d'informations sur le filtrage, voir Sélection de messages.
  • id : (Obligatoire) Identifie l'abonnement. Le même ID doit être transmis par le client dans une trame UNSUBSCRIBE pour arrêter la consommation des messages.
  • ack : (Obligatoire) Seule la valeur client-individual est prise en charge. Cela signifie qu'une trame ACK supprime uniquement le message identifié dans la trame ACK et pas tous les messages transmis auparavant.
  • visibility : (Facultatif) Combien de temps les messages consommés ne seront visibles que pour le client soumettant la demande. Si l'en-tête est omis, le service de file d'attente utilise la temporisation de visibilité par défaut de la file d'attente.

En cas d'erreur, le service de file d'attente retourne une trame ERROR et ferme la connexion.

UNSUBSCRIBE

Utilisez la trame UNSUBSCRIBE pour empêcher le client STOMP de recevoir des messages de la file d'attente. Incluez l'en-tête suivant dans le cadre :

  • id : (Obligatoire) Identifie l'abonnement à arrêter. Cet ID a été utilisé dans la trame SUBSCRIBE correspondant.

ACK/NACK

Utilisez la trame ACK pour supprimer un message après qu'il a été reçu et traité. Une trame ACK supprime uniquement le message identifié par l'en-tête id.

Utilisez la trame NACK pour aviser le service de file d'attente que le message n'a pas été traité avec succès. L'utilisation de la trame NACK met à jour la visibilité du message pour le rendre immédiatement visible pour d'autres consommateurs.

Les deux trames acceptent l'en-tête suivant, selon la version du protocole :

  • id : (Obligatoire pour STOMP v1.2) ID du message à supprimer ou à mettre à jour.
  • message-id : (Obligatoire pour STOMP v1.1 ou 1.0) ID du message à supprimer ou à mettre à jour.

MESSAGE

La trame MESSAGE transmet les messages des abonnements au client STOMP. Une trame MESSAGE contient les en-têtes suivants :

  • message-id :
    • Pour STOMP v1.2 : Identificateur interne unique du message. Utilisé à des fins de débogage uniquement.
    • Pour STOMP v1.1 et v1.0 : Réception de message à utiliser avec les trames ACK et NACK.
  • subscription : ID utilisé dans la trame SUBSCRIBE.
  • destination : OCID (identificateur Oracle Cloud) de la file d'attente contenant les messages et ID canal facultatif à publier sur un canal spécifié. Par exemple :
    <queue_OCID>/<channel_ID>
  • ack : Pour STOMP v.1.2 uniquement, la réception du message.
  • content-type : Type de données utiles, dans ce cas, plain/text.
  • content-length : Longueur des données utiles ou du message.
  • expire-after : Délai d'expiration du message, en millisecondes depuis l'heure de référence.
  • visible-after : Temps de visibilité du message, en millisecondes depuis l'heure de référence.
  • delivery-count : Nombre de fois où ce message a été transmis.
  • oci-message-id : ID message interne.

Une trame MESSAGE contient les données utiles du message dans son corps.

RECEIPT

Le service de file d'attente envoie une trame RECEIPT au client STOMP une fois que le service a traité avec succès une trame SEND qui a demandé une réception. Une trame RECEIPT comprend un en-tête receipt-id avec une valeur qui correspond à l'en-tête de réception dans la trame SEND.

Une trame RECEIPT est un accusé de réception indiquant que la trame client correspondant a été traité par le serveur. Comme STOMP est basé sur le flux, la réception est également un accusé de réception cumulatif indiquant que toutes les images précédentes ont été reçues par le serveur. Cependant, il se peut que ces trames précédentes ne soient pas encore entièrement traitées. Si le client se déconnecte, les trames reçues précédemment devraient continuer à être traitées par le serveur.

DISCONNECT

Utilisez la trame DISCONNECT pour vous déconnecter ou fermer la connexion au service de file d'attente. Tous les abonnements associés à la connexion sont arrêtés. Vous pouvez inclure l'en-tête suivant dans la trame :

  • receipt : (Facultatif) Le service de file d'attente enverra une trame RECEIPT au client STOMP une fois que toutes les trames précédentes avec un en-tête receipt auront été traitées avec succès. Utilisez l'en-tête receipt pour les déconnexions normales.

ERROR

Le service de file d'attente peut envoyer des trames ERROR en cas de problème. Après l'envoi de la trame ERROR, la file d'attente ferme la connexion. La trame ERROR peut contenir les en-têtes suivants :

  • message : Brève description de l'erreur. Le corps contient des informations plus détaillées.
  • receipt-id : Valeur de l'en-tête receipt, si la trame à l'origine de l'erreur incluait un en-tête receipt.
  • content-type : Type de données utiles, si le corps contient plus de détails de message d'erreur.
  • content-length : Longueur des données utiles ou détails du message d'erreur.

Le corps de la trame ERROR contient des informations détaillées sur l'erreur.