Envoyez et recevez des messages avec ApsaraMQ for RocketMQ en utilisant le SDK Java Apache RocketMQ. Cette rubrique couvre à la fois le SDK basé sur le protocole gRPC (rocketmq-client-java) et le SDK basé sur le protocole Remoting (rocketmq-client).
Prérequis
Avant de commencer, assurez-vous d'avoir :
Une instance ApsaraMQ for RocketMQ avec des topics et des ID de groupe créés dans la console ApsaraMQ for RocketMQ
L'endpoint de l'instance (par exemple,
rmq-cn-XXXX.rmq.aliyuncs.com:8080)La dépendance SDK requise ajoutée à votre projet. Pour plus de détails sur les versions, reportez-vous au Guide des versions
Si vous utilisez une instance Serverless, consultez les exigences de version du SDK pour l'accès via le réseau public avant de poursuivre.
SDK protocole gRPC
Le SDK rocketmq-client-java communique via le protocole gRPC. Les tableaux suivants répertorient les exemples de code pour chaque type de message, hébergés dans le répertoire des clients Apache RocketMQ.
Pour l'intégration avec Spring Boot, consultez rocketmq-v5-client-spring-boot-samples.
Lors de l'envoi de messages transactionnels avec le SDK protocole gRPC, spécifiez un topic au démarrage du producteur. Sans topic défini, les vérifications de transaction sont retardées. Si le message n'est pas envoyé dans un délai de quatre heures, le message transactionnel partiel risque d'être supprimé.
Envoyer des messages
| Type de message | Exemple de code |
|---|---|
| Message normal (synchrone) | ProducerNormalMessageExample.java |
| Message normal (asynchrone) | AsyncProducerExample.java |
| Message ordonné | ProducerFifoMessageExample.java |
| Message planifié ou différé | ProducerDelayMessageExample.java |
| Message transactionnel | ProducerTransactionMessageExample.java |
| Message léger | LiteProducerExample.java |
Consommer des messages
| Type de consommateur | Exemple de code |
|---|---|
| Consommateur Push | PushConsumerExample.java |
| Consommateur simple (synchrone) | SimpleConsumerExample.java |
| Consommateur simple (asynchrone) | AsyncSimpleConsumerExample.java |
| Consommateur push léger | LitePushConsumerExample.java |
Pour plus d'informations sur les consommateurs Push et les consommateurs simples, consultez la section Types de consommateurs.
SDK protocole Remoting
Le SDK rocketmq-client communique via le protocole Remoting. Cette section fournit du code intégré pour chaque type de message.
Pour l'intégration avec Spring Boot, consultez rocketmq-spring-boot-samples.
Configuration commune
Tous les exemples utilisant le protocole Remoting partagent la même configuration d'authentification et de connexion. Consultez cette section en premier lieu, puis reportez-vous au code spécifique au type de message ci-dessous.
Authentification
La méthode d'initialisation du producteur ou du consommateur dépend de la méthode d'accès :
-
Endpoint public -- Transmettez un
RPCHookcontenant le nom d'utilisateur et le mot de passe de l'instance. Obtenez le nom d'utilisateur et le mot de passe de l'instance depuis l'onglet Intelligent Identity Recognition de la console Resource Access Management. N'utilisez pas l'AccessKey ID et l'AccessKey secret de votre compte Alibaba Cloud.private static RPCHook getAclRPCHook() { return new AclClientRPCHook(new SessionCredentials("<instance-username>", "<instance-password>")); } // Pass the RPCHook when creating the producer DefaultMQProducer producer = new DefaultMQProducer(getAclRPCHook()); -
Endpoint VPC -- Aucun
RPCHookn'est requis. Le serveur s'authentifie sur la base du VPC :DefaultMQProducer producer = new DefaultMQProducer(); Instance Serverless -- Transmettez un
RPCHookpour l'accès via le réseau public. Si l'accès sans mot de passe via le réseau interne est activé, aucunRPCHookn'est nécessaire.
Connexion
// Group ID created in the ApsaraMQ for RocketMQ console
producer.setProducerGroup("<your-group-id>");
// Endpoint from the ApsaraMQ for RocketMQ console
// Use the domain name and port as shown. Do not add http:// or https://.
// Do not use a resolved IP address.
producer.setNamesrvAddr("<your-access-point>");
Traces de messages (facultatif)
Pour activer le traçage des messages cloud, configurez le canal d'accès et activez les traces :
producer.setAccessChannel(AccessChannel.CLOUD);
// Required for SDK v5.3.0 and later, in addition to setAccessChannel
producer.setEnableTrace(true);
Référence des espaces réservés
Remplacez les espaces réservés suivants par vos valeurs réelles :
| Espace réservé | Description | Exemple |
|---|---|---|
<instance-username> |
Nom d'utilisateur de l'instance issu de la console | -- |
<instance-password> |
Mot de passe de l'instance issu de la console | -- |
<your-group-id> |
ID de groupe créé dans la console | GID_example |
<your-access-point> |
Endpoint issu de la console | rmq-cn-XXXX.rmq.aliyuncs.com:8080 |
<your-topic> |
Topic créé dans la console | topic_example |
<your-order-topic> |
Topic pour les messages ordonnés | order_topic_example |
<your-transaction-topic> |
Topic pour les messages transactionnels | transaction_topic_example |
<your-transaction-group-id> |
ID de groupe dédié aux messages transactionnels | GID_transaction_example |
<your-message-tag> |
Tag de message pour le filtrage | TagA |
Messages normaux
Les messages normaux conviennent à la plupart des cas d'utilisation où l'ordre et les garanties transactionnelles ne sont pas requis.
Messages ordonnés
Les messages ordonnés garantissent une livraison FIFO (First In, First Out) pour une même clé de sharding. Utilisez-les pour des scénarios tels que le traitement séquentiel d'événements ou la synchronisation de données en temps réel.
Messages planifiés et différés
Les messages planifiés sont livrés à un moment précis. Les messages différés sont livrés après un délai configurable. Les deux utilisent la propriété utilisateur __STARTDELIVERTIME.
Consommer des messages planifiés et différés
La consommation des messages planifiés et différés s'effectue de la même manière que pour les messages normaux. Aucune configuration supplémentaire n'est requise.
Messages transactionnels
Les messages transactionnels utilisent un protocole de validation en deux phases. Le producteur envoie un message transactionnel partiel, exécute une transaction locale, puis valide ou annule l'opération. Le broker vérifie périodiquement les transactions non validées en appelant checkLocalTransaction.
L'ID de groupe utilisé pour les messages transactionnels ne peut pas être partagé avec d'autres types de messages. Créez un ID de groupe dédié aux producteurs transactionnels.
Consommer des messages transactionnels
La consommation des messages transactionnels s'effectue de la même manière que pour les messages normaux. Aucune configuration supplémentaire n'est requise.
Accès au réseau public pour les instances Serverless
Pour accéder à une instance Serverless via le réseau public, votre SDK doit respecter une exigence de version minimale. Ajoutez la configuration de namespace indiquée ci-dessous.
Remplacez InstanceId par votre ID d'instance réel.
SDK protocole Remoting (rocketmq-client >= 5.2.0)
Ajoutez le namespace au producteur ou au consommateur :
// Producer
producer.setNamespaceV2("InstanceId");
// Consumer
consumer.setNamespaceV2("InstanceId");
SDK protocole gRPC (rocketmq-client-java >= 5.0.6)
Définissez le namespace dans la ClientConfiguration :
ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
.setEndpoints(endpoints)
.setNamespace("InstanceId")
.setCredentialProvider(sessionCredentialsProvider)
.build();