Para rastrear e identificar mensagens, defina a propriedade de ID da mensagem no cliente produtor do ApsaraMQ for RabbitMQ para atribuir um identificador exclusivo a cada mensagem. Este tópico descreve o que é um ID de mensagem e como defini-lo.
O que é um ID de mensagem
O ID de mensagem é uma propriedade opcional. Trata-se de uma string curta, geralmente definida com um valor exclusivo para fins de negócio. Esse recurso é útil em cenários que exigem mensagens únicas, como o rastreamento de pedidos de vendas ou chamados técnicos. O ApsaraMQ for RabbitMQ não realiza verificações de idempotência no lado do servidor. Para garantir a idempotência, implemente esse controle também no cliente consumidor do ApsaraMQ for RabbitMQ. A idempotência de mensagens significa que, se uma mensagem for reenviada várias vezes, o resultado do consumo da mensagem duplicada será idêntico ao consumo único, sem causar efeitos colaterais. Isso exige a definição de um ID exclusivo para cada mensagem. Para obter mais informações, consulte Message idempotence.
Métodos
No cliente produtor do ApsaraMQ for RabbitMQ, defina a propriedade message-id de Basic.Properties. Exemplo de código:
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",
});