Pour suivre et identifier les messages, configurez la propriété d'ID de message dans le client producteur d'ApsaraMQ for RabbitMQ afin d'attribuer un identifiant unique à chaque message. Cette rubrique explique ce qu'est un ID de message et comment le définir.
Qu'est-ce qu'un ID de message
L'ID de message est une propriété facultative. Il s'agit d'une courte chaîne de caractères généralement définie avec une valeur unique à des fins métier. Cette approche est utile pour les scénarios nécessitant des messages uniques, tels que le suivi des commandes ou des tickets. ApsaraMQ for RabbitMQ n'effectue pas de vérifications d'idempotence des messages côté serveur. Pour garantir l'idempotence des messages, vous devez également la gérer dans le client consommateur d'ApsaraMQ for RabbitMQ. L'idempotence des messages signifie que si un message est retenté plusieurs fois, le résultat de la consommation du message en double est identique à celui d'une consommation unique, sans provoquer d'effets secondaires. Cela nécessite de définir un ID de message unique pour chaque message. Pour plus d'informations, consultez la rubrique Idempotence des messages.
Méthodes
Dans le client producteur d'ApsaraMQ for RabbitMQ, définissez la propriété message-id de Basic.Properties. Voici un exemple de code :
Java
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder()
.messageId("messageid")
.build();
channel.basicPublish("<ExchangeName>", "RoutingKey", true, props,
"Message body".getBytes(StandardCharsets.UTF_8));
Python
properties = pika.BasicProperties(
app_id='example-publisher',
content_type='application/json',
message_id='messageid'
)
PHP
$msg = new AMQPMessage($msgBody, [
'application_headers' => $amqpTable,
'content_type' => 'text/plain',
'delivery_mode' => 2,
'message_id' => 'messageid',
]);
Go
err = ch.Publish(
"helloExchange", // exchange
"hello", // routing key
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
MessageId: "messageId",
},
)
Node.js
channel.publish("exchange", "routingKey", Buffer.from("Message body"), {
messageId: "messageid",
});