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 :
- Connexion et authentification
- Envoyer
- S'ABONNER
- SE DÉSABONNER
- ACCUSÉ DE RÉCEPTION/ABSENCE
- MESSAGE
- REÇU
- DÉCONNECTER
- ERREUR
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.
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 trameSEND
contient un en-têtereceipt
, le service de file d'attente envoie une trameRECEIPT
au client lors de la publication réussie ou une trameERROR
en cas d'erreur.Note
Si l'en-têtereceipt
est manquant, le service de file d'attente n'envoie pas de trameRECEIPT
, mais peut quand même en envoyer une en cas d'erreurERROR
.
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>
id
: (Obligatoire) Identifie l'abonnement. Le même ID doit être transmis par le client dans une trameUNSUBSCRIBE
pour arrêter la consommation des messages.ack
: (Obligatoire) Seule la valeurclient-individual
est prise en charge. Cela signifie qu'une trameACK
supprime uniquement le message identifié dans la trameACK
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 trameSUBSCRIBE
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
etNACK
.
subscription
: ID utilisé dans la trameSUBSCRIBE
.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 trameRECEIPT
au client STOMP une fois que toutes les trames précédentes avec un en-têtereceipt
auront été traitées avec succès. Utilisez l'en-têtereceipt
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êtereceipt
, si la trame à l'origine de l'erreur incluait un en-têtereceipt
.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.