Plutôt que d'interroger régulièrement l'API pour obtenir les résultats, configurez une URL de callback HTTP ou RocketMQ afin de recevoir des notifications de fin de tâche depuis EventBridge. Une fois notifié, appelez l'API de résultat une seule fois pour récupérer la sortie.
Contexte
Alibaba Cloud Model Studio s'intègre à EventBridge pour transmettre les événements de fin de tâche aux cibles d'événements configurées.
Lorsqu'une tâche asynchrone se termine (succès ou échec), un événement de fin de tâche contenant le statut et l'ID de la tâche est signalé à EventBridge, qui le transfère ensuite à votre cible. Pour découvrir d'autres cibles d'événements, consultez Cibles d'événements et Types de services cibles.
Interrogation (polling) contre notifications événementiellesCritère de comparaison | Interrogation (Polling) | Événementiel |
|---|---|---|
Limitation du débit | L'API de résultat est soumise à une limite de débit (20 QPS) | Aucune limitation de débit |
Complexité d'intégration | Simple : il suffit d'interroger l'API de résultat. Certaines tâches (comme text-to-image et text-to-video) proposent des SDK intégrant l'interrogation automatique. | Nécessite de configurer un callback HTTP ou RocketMQ dans EventBridge et d'analyser les notifications. |
Consommation des ressources serveur | Les requêtes fréquentes consomment des ressources serveur. | Aucune consommation de ressources : EventBridge envoie les données par push. |
Latence | Dépend de l'intervalle d'interrogation. | Quasi temps réel : notification immédiate dès la fin de la tâche. |
Recommandation | Scénarios à faible concurrence ou tolérants à la latence. | Scénarios à forte concurrence ou sensibles à la latence. |
Configurez l'une des cibles d'événements suivantes dans EventBridge :
- URL de callback HTTP : endpoint accessible publiquement ou via VPC acceptant les requêtes POST. Convient à la plupart des scénarios.
- RocketMQ : consommation des événements via Message Queue for RocketMQ. Idéal pour les scénarios exigeant une haute fiabilité.
Option 1 : Configurer une URL de callback HTTP
Présentation
Une fois qu'Alibaba Cloud Model Studio a terminé une tâche, il signale l'événement de fin de tâche à EventBridge. Ce dernier transmet alors l'événement à votre endpoint de callback. Votre endpoint analyse l'événement pour extraire l'ID de la tâche traitée avec succès, puis appelle l'API d'interrogation des résultats une seule fois afin de récupérer la sortie de la tâche.
Avantages : comparée à l'interrogation directe, cette approche évite les requêtes inutiles, réduit la consommation de ressources et diminue la pression sur les limites de débit de l'API de résultats.
Facturation : Facturation d'EventBridge.
Par exemple, le flux d'appel asynchrone utilisant une URL de callback HTTP pour text-to-image se déroule comme suit :
| ![]() |
Procédure
Étape 1 : Préparer l'endpoint de callback HTTP
Généralement, déployez l'endpoint de callback HTTP dans votre système métier pour recevoir les notifications d'événements asynchrones. Il doit répondre aux exigences suivantes :
- URL de requête : une URL HTTP accessible via le réseau public ou un VPC Alibaba Cloud.
- Méthode de requête :
POST. - Corps de la requête : format
JSONcontenant les données de l'événement de fin de tâche asynchrone. Vous pouvez consulter la structure exacte de l'événement dans la console EventBridge. Exemple :
Cliquez pour afficher la structure des données de l'événement de fin de tâche asynchrone
{
"datacontenttype": "application/json;charset=utf-8",
"aliyunaccountid": "xxxxx",
"aliyunpublishtime": "2023-10-25T01:45:16.993Z",
"data": {
"start_time": "2023-10-25 09:45:09",
"user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v2",
"task_status": "SUCCEEDED",
"contain_result": false,
"end_time": "2023-10-25 09:45:16",
"task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35",
"region": "cn-beijing",
"request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3",
"api_key_id": "1250"
},
"aliyunoriginalaccountid": "xxxxxxxx",
"specversion": "1.0",
"aliyuneventbusname": "default",
"id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9",
"source": "acs.dashscope",
"time": "2023-1-25T01:45:16.969Z",
"aliyunregionid": "cn-beijing",
"type": "dashscope:System:AsyncTaskFinish"
}
{
"datacontenttype": "application/json;charset=utf-8",
"aliyunaccountid": "xxxxx",
"aliyunpublishtime": "2023-10-25T01:45:16.993Z",
"data": {
"start_time": "2023-10-25 09:45:09",
"user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v2",
"task_status": "SUCCEEDED",
"contain_result": false,
"end_time": "2023-10-25 09:45:16",
"task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35",
"region": "ap-southeast-1",
"request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3",
"api_key_id": "1250"
},
"aliyunoriginalaccountid": "xxxxxxxx",
"specversion": "1.0",
"aliyuneventbusname": "default",
"id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9",
"source": "acs.dashscope",
"time": "2023-1-25T01:45:16.969Z",
"aliyunregionid": "ap-southeast-1",
"type": "dashscope:System:AsyncTaskFinish"
}
Étape 2 : Interroger les événements dans la console EventBridge
La console EventBridge permet d'interroger les événements transmis par Alibaba Cloud Model Studio.
-
Connectez-vous à votre compte Alibaba Cloud et accédez à la console EventBridge. Basculez vers la Singapore region. Dans le volet de navigation de gauche, sélectionnez Event buses et cliquez sur default pour accéder au bus d'événements par défaut des services cloud.
Par défaut, Alibaba Cloud Model Studio utilise le bus d'événements par défaut.
-
Cliquez sur Event tracking et saisissez les critères de recherche pour trouver les événements de fin de tâche asynchrone provenant d'Alibaba Cloud Model Studio.
- Source de l'événement : recherchez et sélectionnez acs.dashscope, ce qui indique que l'événement provient de DashScope (le service de modèle sous-jacent d'Alibaba Cloud Model Studio).
- Type d'événement : recherchez et sélectionnez dashscope:System:AsyncTaskFinish, correspondant à un événement de fin de tâche asynchrone.
-
Cliquez sur Details pour afficher tous les détails de l'événement signalé.
{ "datacontenttype": "application/json;charset=utf-8", "aliyunaccountid": "xxxxx", "aliyunpublishtime": "2023-10-25T01:45:16.993Z", "data": { "start_time": "2023-10-25 09:45:09", "user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v2", "task_status": "SUCCEEDED", "contain_result": false, "end_time": "2023-10-25 09:45:16", "task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35", "region": "cn-beijing", "request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3", "api_key_id": "1250" }, "aliyunoriginalaccountid": "xxxxxxxx", "specversion": "1.0", "aliyuneventbusname": "default", "id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9", "source": "acs.dashscope", "time": "2023-1-25T01:45:16.969Z", "aliyunregionid": "cn-beijing", "type": "dashscope:System:AsyncTaskFinish" }{ "datacontenttype": "application/json;charset=utf-8", "aliyunaccountid": "xxxxx", "aliyunpublishtime": "2023-10-25T01:45:16.993Z", "data": { "start_time": "2023-10-25 09:45:09", "user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v2", "task_status": "SUCCEEDED", "contain_result": false, "end_time": "2023-10-25 09:45:16", "task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35", "region": "ap-southeast-1", "request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3", "api_key_id": "1250" }, "aliyunoriginalaccountid": "xxxxxxxx", "specversion": "1.0", "aliyuneventbusname": "default", "id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9", "source": "acs.dashscope", "time": "2023-1-25T01:45:16.969Z", "aliyunregionid": "ap-southeast-1", "type": "dashscope:System:AsyncTaskFinish" }
Cliquez pour afficher la description des paramètres
| Paramètre | Type | Description | Valeur d'exemple |
|---|---|---|---|
datacontenttype | String | Format de données du champ data. Seul |
|
aliyunaccountid | String | ID du compte Alibaba Cloud. | 123456789098**** |
aliyunpublishtime | String | Heure de réception de l'événement. | 2020-11-19T21:04:42.179PRC |
data | Object | Contenu de l'événement. Objet JSON dont la structure est définie par le service source. Les CloudEvents peuvent inclure des informations contextuelles fournies par le producteur de l'événement au moment de son occurrence, encapsulées dans data. | |
data[].start_time | String | Heure de début de la tâche asynchrone. Format : yyyy-MM-dd HH:mm:ss | 2023-10-25 09:45:09 |
data[].end_time | String | Heure de fin de la tâche asynchrone. Format : yyyy-MM-dd HH:mm:ss | 2023-10-25 09:45:16 |
data[].user_api_unique_key | String | Clé API unique (les cinq éléments de l'API du modèle utilisés lors de la soumission de la tâche). Format :
|
|
data[].task_status | String | Statut de la tâche
| SUCCEEDED |
data[].task_id | String | ID de la tâche | a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35 |
data[].region | String | Région où la tâche s'exécute | ap-southeast-1 |
data[].request_id | String | ID de la requête | 108f38f5-xxxx-xxxx-xxxx-6504db9080b3 |
data[].api_key_id | String | ID de la clé API | 1234 |
data[].contain_result | Boolean | Indique si l'événement contient les détails du résultat.
| true |
data[].output_result | JSON | Détails du résultat. Renvoyé lorsque |
|
aliyunoriginalaccountid | String | ID du compte Alibaba Cloud d'origine | 123456789098**** |
specversion | String | Version du protocole CloudEvents | 1.0 |
aliyuneventbusname | String | Nom du bus d'événements recevant l'événement | default |
id | String | ID de l'événement — valeur unique identifiant l'événement. | 45ef4dewdwe1-7c35-447a-bd93-fab**** |
source | String | Source de l'événement. Service fournissant l'événement, identifiant ce qui s'est produit. Inclut généralement le type de source de l'événement, le mécanisme de publication ou le processus de production. L'expéditeur doit garantir que la combinaison | acs.dashscope |
time | String | Heure de génération de l'événement. Si l'heure exacte de l'événement est inconnue, les producteurs CloudEvents peuvent définir time sur une autre valeur (par exemple, l'heure actuelle), mais tous les producteurs pour la même source doivent utiliser des valeurs cohérentes. | 2020-11-19T21:04:41+08:00 |
aliyunregionid | String | Région recevant l'événement. | ap-southeast-1 |
type | String | Type d'événement. Décrit le type d'événement lié à la source. Utilisé pour le routage, les requêtes d'événements et l'application des politiques. Le format est défini par le producteur et inclut des informations de version. | dashscope:System:AsyncTaskFinish |
Étape 3 : Configurer les règles de transfert d'événements
-
Dans le volet de navigation de gauche, sélectionnez Event rules et cliquez sur Create rule.
-
Configure basic information : saisissez un nom et une description personnalisés pour la règle.
-
Configure event pattern : spécifiez les événements à transférer.
-
Event source : recherchez et sélectionnez acs.dashscope, indiquant que l'événement provient d'Alibaba Cloud Model Studio.
-
Event type : recherchez et sélectionnez dashscope:System:AsyncTaskFinish, correspondant à un événement de fin de tâche asynchrone.
-
Pattern content : configurez les conditions de filtrage pour cibler des événements spécifiques. Utilisez les champs issus des détails d'événements interrogés à l'étape 2. Pour la syntaxe des modèles, consultez Modèles d'événements. Exemples :
- Par défaut : après avoir sélectionné la source et le type d'événement, le modèle prend par défaut la forme suivante, transférant ainsi tous les événements
dashscope:System:AsyncTaskFinish.
{ "source": ["acs.dashscope"], "type": ["dashscope:System:AsyncTaskFinish"] }- Filtrage par champ : transférez uniquement les événements dont le champ
user_api_unique_keyse termine par:paraformer-8k-v2, c'est-à-dire uniquement les événements concernant le modèleparaformer-8k-v2. Le type d'événement estdashscope:System:AsyncTaskFinish.
{ "source": ["acs.dashscope"], "type": ["dashscope:System:AsyncTaskFinish"], "data": { "user_api_unique_key": [ {"suffix": ":paraformer-8k-v2"} ] } } - Par défaut : après avoir sélectionné la source et le type d'événement, le modèle prend par défaut la forme suivante, transférant ainsi tous les événements
-
-
Configure event targets : prend en charge plusieurs types de cibles d'événements, notamment les URL de callback HTTP et les files d'attente de messages RocketMQ. Consultez l'étape 4 pour plus de détails.
Étape 4 : Définir la cible d'événement sur un endpoint de callback HTTP
-
Configure event target : transférez les événements vers une URL de callback HTTP.
-
Type de service : sélectionnez « HTTP ».
-
URL : saisissez l'endpoint du service HTTP.
-
Body : sélectionnez « Complete event ».
-
Type de réseau : choisissez selon votre endpoint de service.
- HTTP prend en charge les réseaux publics et privés. Si vous sélectionnez un réseau privé, configurez le VPC, le vSwitch et le SecurityGroup.
-
-
Cliquez sur Confirm pour enregistrer la règle. Si la cible d'événement affiche un style HTTP, la configuration a réussi.
La colonne Event target de la règle affiche désormais HTTP (1).
Option 2 : Configurer RocketMQ
Présentation
Une fois qu'Alibaba Cloud Model Studio a terminé une tâche, il signale l'événement de fin de tâche à EventBridge. Ce dernier transfère l'événement vers Message Queue for RocketMQ. Votre application écoute la file d'attente de messages, consomme le message, extrait l'ID de la tâche terminée, puis appelle l'API d'interrogation des résultats une seule fois afin de récupérer la sortie de la tâche.
Avantages : contrairement à l'approche par callback HTTP, RocketMQ garantit la livraison des messages et prend en charge les nouvelles tentatives en cas d'échec, ce qui est idéal pour les scénarios exigeant une grande fiabilité des messages.
Facturation : Facturation d'EventBridge, Facturation de RocketMQ.
Par exemple, le flux d'appel asynchrone utilisant RocketMQ pour text-to-image se déroule comme suit :
| ![]() |
Procédure
Étape 1 : Préparer une instance RocketMQ (ignorez cette étape si vous possédez déjà une file d'attente RocketMQ)
Pour recevoir des événements via RocketMQ, préparez d'abord une file d'attente RocketMQ.
-
Accédez à la console RocketMQ. Dans le volet de navigation de gauche, sélectionnez Instances et cliquez sur Create Instance.
Exemple d'ID d'instance :
rmq-cn-nwy*******. -
Créez un Topic pour l'instance et saisissez un nom de topic personnalisé.
-
Créez un Group pour l'instance et saisissez un nom de groupe personnalisé.
Étape 2 : Interroger les événements dans la console EventBridge
La console EventBridge permet d'interroger les événements transmis par Alibaba Cloud Model Studio.
-
Connectez-vous à votre compte Alibaba Cloud et accédez à la console EventBridge. Basculez vers la Singapore region. Dans le volet de navigation de gauche, sélectionnez Event buses et cliquez sur default pour accéder au bus d'événements par défaut des services cloud.
Par défaut, Alibaba Cloud Model Studio utilise le bus d'événements par défaut.
-
Cliquez sur Event tracking et saisissez les critères de recherche pour trouver les événements de fin de tâche asynchrone provenant d'Alibaba Cloud Model Studio.
- Source de l'événement : recherchez et sélectionnez acs.dashscope, ce qui indique que l'événement provient de DashScope (le service de modèle sous-jacent d'Alibaba Cloud Model Studio).
- Type d'événement : recherchez et sélectionnez dashscope:System:AsyncTaskFinish, correspondant à un événement de fin de tâche asynchrone.
-
Cliquez sur Details pour afficher tous les détails de l'événement signalé.
{ "datacontenttype": "application/json;charset=utf-8", "aliyunaccountid": "xxxxx", "aliyunpublishtime": "2023-10-25T01:45:16.993Z", "data": { "start_time": "2023-10-25 09:45:09", "user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v2", "task_status": "SUCCEEDED", "contain_result": false, "end_time": "2023-10-25 09:45:16", "task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35", "region": "cn-beijing", "request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3", "api_key_id": "1250" }, "aliyunoriginalaccountid": "xxxxxxxx", "specversion": "1.0", "aliyuneventbusname": "default", "id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9", "source": "acs.dashscope", "time": "2023-1-25T01:45:16.969Z", "aliyunregionid": "cn-beijing", "type": "dashscope:System:AsyncTaskFinish" }{ "datacontenttype": "application/json;charset=utf-8", "aliyunaccountid": "xxxxx", "aliyunpublishtime": "2023-10-25T01:45:16.993Z", "data": { "start_time": "2023-10-25 09:45:09", "user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v2", "task_status": "SUCCEEDED", "contain_result": false, "end_time": "2023-10-25 09:45:16", "task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35", "region": "ap-southeast-1", "request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3", "api_key_id": "1250" }, "aliyunoriginalaccountid": "xxxxxxxx", "specversion": "1.0", "aliyuneventbusname": "default", "id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9", "source": "acs.dashscope", "time": "2023-1-25T01:45:16.969Z", "aliyunregionid": "ap-southeast-1", "type": "dashscope:System:AsyncTaskFinish" }
Cliquez pour afficher la description des paramètres
| Paramètre | Type | Description | Valeur d'exemple |
|---|---|---|---|
datacontenttype | String | Format de données du champ data. Seul |
|
aliyunaccountid | String | ID du compte Alibaba Cloud. | 123456789098**** |
aliyunpublishtime | String | Heure de réception de l'événement. | 2020-11-19T21:04:42.179PRC |
data | Object | Contenu de l'événement. Objet JSON dont la structure est définie par le service source. Les CloudEvents peuvent inclure des informations contextuelles fournies par le producteur de l'événement au moment de son occurrence, encapsulées dans data. | |
data[].start_time | String | Heure de début de la tâche asynchrone. Format : yyyy-MM-dd HH:mm:ss | 2023-10-25 09:45:09 |
data[].end_time | String | Heure de fin de la tâche asynchrone. Format : yyyy-MM-dd HH:mm:ss | 2023-10-25 09:45:16 |
data[].user_api_unique_key | String | Clé API unique (les cinq éléments de l'API du modèle utilisés lors de la soumission de la tâche). Format :
|
|
data[].task_status | String | Statut de la tâche
| SUCCEEDED |
data[].task_id | String | ID de la tâche | a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35 |
data[].region | String | Région où la tâche s'exécute | ap-southeast-1 |
data[].request_id | String | ID de la requête | 108f38f5-xxxx-xxxx-xxxx-6504db9080b3 |
data[].api_key_id | String | ID de la clé API | 1234 |
data[].contain_result | Boolean | Indique si l'événement contient les détails du résultat.
| true |
data[].output_result | JSON | Détails du résultat. Renvoyé lorsque |
|
aliyunoriginalaccountid | String | ID du compte Alibaba Cloud d'origine | 123456789098**** |
specversion | String | Version du protocole CloudEvents | 1.0 |
aliyuneventbusname | String | Nom du bus d'événements recevant l'événement | default |
id | String | ID de l'événement — valeur unique identifiant l'événement. | 45ef4dewdwe1-7c35-447a-bd93-fab**** |
source | String | Source de l'événement. Service fournissant l'événement, identifiant ce qui s'est produit. Inclut généralement le type de source de l'événement, le mécanisme de publication ou le processus de production. L'expéditeur doit garantir que la combinaison | acs.dashscope |
time | String | Heure de génération de l'événement. Si l'heure exacte de l'événement est inconnue, les producteurs CloudEvents peuvent définir time sur une autre valeur (par exemple, l'heure actuelle), mais tous les producteurs pour la même source doivent utiliser des valeurs cohérentes. | 2020-11-19T21:04:41+08:00 |
aliyunregionid | String | Région recevant l'événement. | ap-southeast-1 |
type | String | Type d'événement. Décrit le type d'événement lié à la source. Utilisé pour le routage, les requêtes d'événements et l'application des politiques. Le format est défini par le producteur et inclut des informations de version. | dashscope:System:AsyncTaskFinish |
Étape 3 : Configurer les règles de transfert d'événements
-
Dans le volet de navigation de gauche, sélectionnez Event rules et cliquez sur Create rule.
-
Configure basic information : saisissez un nom et une description personnalisés pour la règle.
-
Configure event pattern : spécifiez les événements à transférer.
-
Event source : recherchez et sélectionnez acs.dashscope, indiquant que l'événement provient d'Alibaba Cloud Model Studio.
-
Event type : recherchez et sélectionnez dashscope:System:AsyncTaskFinish, correspondant à un événement de fin de tâche asynchrone.
-
Pattern content : configurez les conditions de filtrage pour cibler des événements spécifiques. Utilisez les champs issus des détails d'événements interrogés à l'étape 2. Pour la syntaxe des modèles, consultez Modèles d'événements. Exemples :
- Par défaut : après avoir sélectionné la source et le type d'événement, le modèle prend par défaut la forme suivante, transférant ainsi tous les événements
dashscope:System:AsyncTaskFinish.
{ "source": ["acs.dashscope"], "type": ["dashscope:System:AsyncTaskFinish"] }- Filtrage par champ : transférez uniquement les événements dont le champ
user_api_unique_keyse termine par:paraformer-8k-v2, c'est-à-dire uniquement les événements concernant le modèleparaformer-8k-v2. Le type d'événement estdashscope:System:AsyncTaskFinish.
{ "source": ["acs.dashscope"], "type": ["dashscope:System:AsyncTaskFinish"], "data": { "user_api_unique_key": [ {"suffix": ":paraformer-8k-v2"} ] } } - Par défaut : après avoir sélectionné la source et le type d'événement, le modèle prend par défaut la forme suivante, transférant ainsi tous les événements
-
-
Configure event targets : prend en charge plusieurs types de cibles d'événements, notamment les URL de callback HTTP et les files d'attente de messages RocketMQ. Consultez l'étape 4 pour plus de détails.
Étape 4 : Définir la cible d'événement sur RocketMQ
Après avoir créé RocketMQ, ouvrez l'interface de configuration de la cible d'événement et sélectionnez votre instance RocketMQ.
Étape 5 : Afficher les messages dans la console RocketMQ
Après la configuration, soumettez une tâche asynchrone. Une fois celle-ci terminée, consultez le message dans le topic RocketMQ configuré.
- Pour afficher les messages en ligne dans RocketMQ, activez la fonctionnalité d'expérience d'envoi/réception en un clic.
- Cette fonctionnalité utilise Function Compute. Si vous dépassez le quota d'essai gratuit, des frais minimes s'appliquent. Consultez les Règles de facturation de Function Compute.
Sur la page Topics, localisez votre topic et cliquez sur Details dans la colonne Actions.
Sur la page de détails du topic, basculez vers l'onglet One-click send/receive experience. Dans la section Basic Features, sélectionnez une méthode de consommation, telle que PushConsumer.
Après avoir configuré des paramètres tels que Topic Name et Group ID, cliquez sur Run pour commencer à recevoir des messages. L'onglet Run Results affiche les messages reçus, y compris l'ID du message et l'heure de réception.
Étape 6 : Utiliser le SDK pour recevoir et consommer des messages
Utilisez le SDK Java RocketMQ pour mettre en œuvre la logique suivante : abonnez-vous au topic concerné et implémentez un écouteur de messages. Traitez le message dès sa réception.
L'exemple suivant présente le code client Java pour RocketMQ 5.0.
- Dans un projet Maven, ajoutez cette dépendance :
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client-java</artifactId>
<version>5.0.4</version>
</dependency>
- Exemple de code pour consommer des messages MQ :
import com.alibaba.fastjson2.JSON;
import org.apache.rocketmq.client.apis.*;
import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
import org.apache.rocketmq.client.apis.consumer.FilterExpression;
import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
import org.apache.rocketmq.client.apis.consumer.PushConsumer;
import org.apache.rocketmq.shaded.org.slf4j.Logger;
import org.apache.rocketmq.shaded.org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Collections;
public class ConsumerExample {
private static final Logger LOGGER = LoggerFactory.getLogger(ConsumerExample.class);
private ConsumerExample() {
}
public static void main(String[] args) throws ClientException, IOException, InterruptedException {
/*
Endpoint obtained from the Endpoints tab on the instance details page in the console.
If accessing from an Alibaba Cloud ECS instance over the internal network, use the VPC endpoint.
If accessing from a local public network or on-premises IDC, use the public endpoint. Public endpoint access requires enabling public network access for the instance.
*/
String endpoints = "xxxx";
// Specify the target topic to subscribe to. The topic must be created in the console beforehand; otherwise, an error occurs.
String topic = "xxxx";
// Specify the consumer group for the consumer. The group must be created in the console beforehand; otherwise, an error occurs.
String consumerGroup = "xxxx";
final ClientServiceProvider provider = ClientServiceProvider.loadService();
ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(endpoints);
/*
If using a public endpoint, configure the instance username and password, available on the instance details page in the console.
If accessing from an Alibaba Cloud ECS instance over the internal network, skip this configuration—the server intelligently retrieves VPC info.
*/
builder.setCredentialProvider(new StaticSessionCredentialsProvider("xxxx", "xxxx"));
ClientConfiguration clientConfiguration = builder.build();
// Subscription filter rule—subscribe to messages with any tag.
String tag = "*";
FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
// Initialize PushConsumer with consumer group, communication parameters, and subscription relationship.
PushConsumer pushConsumer = provider.newPushConsumerBuilder()
.setClientConfiguration(clientConfiguration)
// Set consumer group.
.setConsumerGroup(consumerGroup)
// Set pre-bound subscription relationships.
.setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
// Set message listener.
.setMessageListener(messageView -> {
try {
// Process message and return consumption result.
ByteBuffer buffer = messageView.getBody();
ByteBuffer newBuffer = ByteBuffer.allocate(buffer.capacity());
for (int i = 0; i < buffer.capacity(); i++) {
newBuffer.put(buffer.get(i));
}
String result = new String(newBuffer.array());
LOGGER.info("Consume message={}", JSON.toJSONString(result));
System.out.println(result);
return ConsumeResult.SUCCESS;
} catch (Exception e) {
LOGGER.error("deal message has error", e);
return ConsumeResult.FAILURE;
}
})
.build();
Thread.sleep(Long.MAX_VALUE);
// Close PushConsumer when no longer needed.
pushConsumer.close();
}
}
FAQ
Une règle d'événement peut-elle avoir plusieurs cibles d'événements ?
Oui. Une seule règle d'événement peut comporter plusieurs cibles d'événements. Si cela est configuré, le même événement est transmis à chaque cible.
J'ai configuré une règle d'événement mais je ne reçois aucun événement. Pourquoi ?
Assurez-vous que la région de la règle de transfert d'événements correspond à la région de l'événement. Par exemple, une règle configurée dans la région Singapour ne transfère que les événements de Singapour, et non ceux d'autres régions. Vérifiez la région EventBridge dans le sélecteur de région situé en haut de la page de la console.
La requête de service HTTP/HTTPS expire ou renvoie une erreur ?
Suivez ces étapes pour résoudre le problème :
-
Vérifiez l'état du service HTTP/HTTPS.
-
Vérifiez l'URL configurée dans la cible d'événement.
-
Vérifiez le type de réseau configuré pour la cible d'événement :
-
PublicNetwork : réseau public — assurez-vous que l'URL est accessible publiquement.
-
PrivateNetwork : réseau VPC — si cette option est sélectionnée, vérifiez les configurations du VPC, du vSwitch et du SecurityGroup.
- Vérifiez les paramètres du VPC et du vSwitch.
- Vérifiez les paramètres du groupe de sécurité réseau.
-
-
Pour les autres paramètres, consultez Paramètres de la cible d'événement.

