Le SDK Java ApsaraMQ for RocketMQ envoie et consomme des messages en mode push ou pull. Cette rubrique décrit les méthodes et les paramètres de configuration disponibles.
Modes push et pull
ApsaraMQ for RocketMQ distribue les messages aux consommateurs selon l'un des deux modes suivants :
Mode push : le broker pousse les messages vers les consommateurs dès qu'ils sont disponibles. Le mode push prend en charge la consommation par lot, ce qui permet de livrer plusieurs messages dans un seul lot.
Mode pull : les consommateurs interrogent le broker pour récupérer de nouveaux messages à la demande. Le mode pull vous offre un contrôle direct sur les partitions à lire, le moment de la récupération des messages et la gestion des offsets.
Le mode pull nécessite une instance Enterprise Platinum Edition.
Paramètres de connexion
Configurez les paramètres suivants pour les producteurs et les consommateurs.
| Paramètre | Description | Valeur par défaut |
|---|---|---|
NAMESRV_ADDR |
Endpoint TCP de l'instance ApsaraMQ for RocketMQ. Vous trouverez cette information sur la page Instance Details de la console. | -- |
AccessKey |
ID AccessKey utilisé comme identifiant unique pour l'authentification. Consultez la section Créer une paire de clés AccessKey. | -- |
SecretKey |
Secret AccessKey utilisé comme mot de passe pour l'authentification. Consultez la section Créer une paire de clés AccessKey. | -- |
OnsChannel |
Canal utilisateur. Définissez la valeur sur CLOUD pour les utilisateurs CloudTmall. |
ALIYUN |
Méthodes du producteur
L'interface du producteur fournit les méthodes suivantes :
Paramètres du producteur
| Paramètre | Description | Valeur par défaut | Unité |
|---|---|---|---|
SendMsgTimeoutMillis |
Délai d'expiration pour l'envoi d'un message. | -- | Millisecondes |
CheckImmunityTimeInSeconds |
Temps d'attente minimum avant que le broker ne vérifie pour la première fois le statut d'un message transactionnel. | -- | Secondes |
shardingKey |
Clé de partitionnement qui détermine la partition recevant un message ordonné. | -- | -- |
Méthodes du consommateur
Mode push
L'interface du consommateur push fournit les méthodes suivantes :
Mode pull
L'interface du consommateur pull fournit les méthodes suivantes :
Interface PullConsumer
public interface PullConsumer extends Admin {
/**
* Returns all partitions for the specified topic.
* Call this method only after the pull consumer has started.
*/
Set<TopicPartition> topicPartitions(String topic);
/**
* Manually assigns partitions to this consumer. Automatic rebalancing
* is not performed -- make sure all partitions are covered across
* your consumers. Calling this method again replaces the previous
* assignment entirely.
*/
void assign(Collection<TopicPartition> topicPartitions);
/**
* Polls for messages. Returns up to maxBatchMessageCount messages,
* blocking for at most the specified timeout (in milliseconds).
*/
List<Message> poll(long timeout);
/**
* Resets the consumer offset of a partition to a specific position.
* The offset must be between the partition's minimum and maximum
* offset. Call this method only after the consumer has started and
* has been assigned the target partition.
*/
void seek(TopicPartition topicPartition, long offset);
/**
* Resets the consumer offset of a partition to the earliest available
* message. Requires a started consumer assigned to the target
* partition.
*/
void seekToBeginning(TopicPartition topicPartition);
/**
* Resets the consumer offset of a partition to the latest message.
* Requires a started consumer assigned to the target partition.
*/
void seekToEnd(TopicPartition topicPartition);
/**
* Pauses message consumption on the specified partitions.
*/
void pause(Collection<TopicPartition> topicPartitions);
/**
* Resumes message consumption on previously paused partitions.
*/
void resume(Collection<TopicPartition> topicPartitions);
/**
* Returns the offset of the first message stored at or after the
* given timestamp in the specified partition. The timestamp refers
* to when the broker stored the message, not when it was sent.
*/
Long offsetForTimestamp(TopicPartition topicPartition, Long timestamp);
/**
* Returns the latest consumer offset for the specified partition.
*/
Long committed(TopicPartition topicPartition);
/**
* Commits the current consumer offsets synchronously. Offsets are
* first synced to the local client, then written to the broker
* asynchronously.
*/
void commitSync();
/**
* Listener interface for partition change events.
*/
interface TopicPartitionChangeListener {
/**
* Called when the partitions of a topic change -- for example,
* after broker scaling adjusts the partition count.
*/
void onChanged(Set<TopicPartition> topicPartitions);
}
/**
* Registers a listener that fires when the partition count for a
* topic changes (for example, due to broker scaling). By default,
* the maximum callback delay is 5 seconds.
*/
void registerTopicPartitionChangedListener(String topic,
TopicPartitionChangeListener callback);
}
Paramètres du consommateur
Paramètres communs
Les paramètres suivants s'appliquent aux consommateurs push et pull.
| Paramètre | Description | Valeur par défaut | Valeurs valides | Unité |
|---|---|---|---|---|
GROUP_ID |
ID du groupe de consommateurs créé dans la console ApsaraMQ for RocketMQ. Consultez la section Termes. | -- | -- | -- |
MessageModel |
Modèle de consommation. Valeurs valides : CLUSTERING (consommation en cluster) et BROADCASTING (consommation en diffusion). |
CLUSTERING |
CLUSTERING, BROADCASTING |
-- |
ConsumeThreadNums |
Nombre de threads utilisés par le consommateur pour traiter les messages. | 20 | -- | -- |
MaxReconsumeTimes |
Nombre maximal de tentatives de nouvelle consommation en cas d'échec. | 16 | -- | -- |
ConsumeTimeout |
Durée maximale autorisée pour la consommation d'un seul message. Si ce délai est dépassé, le message est redistribué après un intervalle de nouvelle tentative. Définissez cette valeur en fonction de votre logique métier. | 15 | -- | Minutes |
suspendTimeMillis |
Intervalle de nouvelle tentative pour les messages ordonnés dont la consommation a échoué. | -- | -- | -- |
maxCachedMessageAmount |
Nombre maximal de messages mis en cache sur le client consommateur local. Le quota est réparti uniformément entre tous les sujets abonnés. Par exemple, si un consommateur est abonné à 2 sujets et que cette valeur est de 1 000, chaque sujet peut mettre en cache jusqu'à 500 messages. Si un client consommateur extrait plusieurs messages à la fois, le nombre réel de messages mis en cache peut dépasser cette valeur. Définissez cette valeur à environ deux fois le nombre de messages traités par seconde par votre consommateur. | 5 000 | 100–50 000 | -- |
maxCachedMessageSizeInMiB |
Taille totale maximale des messages mis en cache sur le client consommateur local. | 512 | 16–2 048 | MiB |
Une valeur trop élevée pour maxCachedMessageAmount ou maxCachedMessageSizeInMiB peut provoquer des erreurs de mémoire insuffisante (OOM) sur le client.
Paramètres de push par lot
Les paramètres suivants contrôlent la manière dont le broker regroupe les messages en mode push avant de les livrer.
| Paramètre | Description | Valeur par défaut | Valeurs valides | Unité |
|---|---|---|---|---|
ConsumeMessageBatchMaxSize |
Nombre maximal de messages mis en cache livrés à un consommateur dans un seul lot. Lorsque le cache atteint ce seuil, tous les messages mis en cache sont poussés en une seule fois. | 32 | 1–1 024 | -- |
BatchConsumeMaxAwaitDurationInSeconds |
Temps d'attente maximal avant que les messages mis en cache ne soient poussés vers les consommateurs. | 0 | 0–450 | Secondes |
Paramètres du mode pull
Les paramètres suivants s'appliquent uniquement aux consommateurs pull.
| Paramètre | Description | Valeur par défaut | Valeurs valides | Unité |
|---|---|---|---|---|
maxCachedMessageSizeInMiB |
Taille maximale des messages mis en cache par partition sur le client local. | 100 | 16–2 048 | MiB |
autoCommit |
Indique si les offsets du consommateur doivent être validés automatiquement. | true |
true, false |
-- |
autoCommitIntervalMillis |
Intervalle entre les validations automatiques des offsets. | 5 | -- | Secondes |
pollTimeoutMillis |
Délai d'expiration pour chaque appel poll(). |
5 | -- | Secondes |
Une valeur trop élevée pour maxCachedMessageSizeInMiB peut provoquer des erreurs OOM sur le client.
Pour plus d'informations sur les partitions et les offsets, consultez la section Termes.
Références
Exemples de code pour l'envoi et la consommation de messages :