Todos os produtos
Search
Central de documentação

ApsaraMQ for RocketMQ:Scheduled messages and delayed messages

Última atualização: Jun 27, 2026

Mensagens agendadas e mensagens com atraso adiam a entrega aos consumidores. A diferença está na definição do tempo:

  • Mensagem agendada: especifique um timestamp absoluto. O broker retém a mensagem e a entrega exatamente nesse momento.

  • Mensagem com atraso: defina uma duração relativa. O broker retém a mensagem e a entrega após o término dessa duração, contada a partir do envio.

O mecanismo subjacente é o mesmo. O broker armazena a mensagem e a libera para os consumidores quando o horário-alvo é atingido.

Casos de uso

  • Tratamento de timeout de pedidos: ao criar um pedido no fluxo de checkout de um e-commerce, envie uma mensagem com atraso de 30 minutos. Após esse período, o consumidor verifica se o pagamento foi concluído. Em caso negativo, cancela o pedido; caso contrário, ignora a mensagem.

  • Notificações programadas: envie uma mensagem agendada para um horário específico — por exemplo, às 9h do dia seguinte — para acionar uma notificação push ou um lembrete.

Defina o horário de entrega

Ambos os tipos de mensagem usam o mesmo parâmetro: msg.setStartDeliverTime, que aceita um timestamp Unix com precisão de milissegundos.

  • Mensagem agendada: passe o timestamp absoluto correspondente ao horário de entrega desejado.

  • Mensagem com atraso: passe System.currentTimeMillis() + delayMillis, onde delayMillis representa a duração do atraso em milissegundos.

Exemplos de código

Atrase uma mensagem em 10 minutos a partir do momento atual:

// Calculate the delivery timestamp: current time + 10 minutes
long deliverTime = System.currentTimeMillis() + 10L * 60 * 1000;
msg.setStartDeliverTime(deliverTime);

Agende uma mensagem para uma data e hora específicas:

// Schedule delivery for 2024-06-15 14:30:00 (UTC+8)
// Millisecond Unix timestamp: 1718433000000
long deliverTime = 1718433000000L;
msg.setStartDeliverTime(deliverTime);

Regras e limites

Regra

Detalhes

Horário mínimo de entrega

Deve ser posterior ao timestamp atual. Se o horário especificado estiver no passado, a mensagem será entregue imediatamente.

Janela máxima de agendamento

40 dias a partir do momento atual. Mensagens que ultrapassarem esse limite falharão no envio.

Unidade de tempo

Milissegundos

Requisito de tipo de tópico

Crie o tópico com o campo Message Type definido como Scheduled/Delayed Message no console do ApsaraMQ for RocketMQ. Um tópico aceita apenas mensagens compatíveis com seu tipo configurado.

Retenção de mensagens

Até 3 dias. Por exemplo, se uma mensagem estiver agendada para entrega em 5 dias e não for consumida, ela será excluída no 8º dia (5 dias de atraso + 3 dias de retenção).

Precisão da entrega

Não há garantia de que mensagens agendadas ou com atraso cheguem exatamente no horário especificado devido aos seguintes fatores:

  • Latência de base: espere uma latência de entrega entre 1 e 2 segundos.

  • Acúmulo de mensagens: se houver mensagens acumuladas na fila, as mensagens agendadas e com atraso serão enfileiradas atrás delas e poderão chegar após o horário-alvo.

  • Divergência de relógio: o valor de StartDeliverTime é avaliado com base no relógio do broker. Se o relógio do cliente divergir do relógio do broker, o horário real de entrega poderá não corresponder ao timestamp definido pelo produtor.

Código de exemplo

Para exemplos completos de produtores e consumidores, consulte os guias abaixo, organizados por protocolo e linguagem.

TCP

Linguagem

Link

Java

Enviar e receber mensagens agendadas

Java

Enviar e assinar mensagens com atraso

C++

Enviar e assinar mensagens agendadas

.NET

Enviar e receber mensagens agendadas

HTTP

Linguagem

Link

Java

Enviar e assinar mensagens agendadas e mensagens com atraso

Go

Enviar e assinar mensagens agendadas e mensagens com atraso

Python

Enviar e assinar mensagens agendadas e mensagens com atraso

Node.js

Enviar e assinar mensagens agendadas e mensagens com atraso

PHP

Enviar e assinar mensagens agendadas e mensagens com atraso

C#

Enviar e assinar mensagens agendadas e mensagens com atraso

C++

Enviar e assinar mensagens agendadas e mensagens com atraso