Há duas maneiras de definir o tempo de expiração da mensagem (TTL) para o RabbitMQ:

  1. Definir através das propriedades da fila, onde todas as mensagens na fila têm o mesmo tempo de expiração.
  2. Definir o tempo de expiração para cada mensagem individualmente, permitindo diferentes TTL para cada mensagem. Se ambos os métodos forem usados juntos, o TTL da mensagem será o menor valor entre os dois.

Dica: Para o primeiro método de definir propriedades da fila, uma vez que a mensagem expira, ela será removida da fila. No segundo método, mesmo que a mensagem expire, ela não será excluída imediatamente da fila porque a expiração de cada mensagem é verificada antes da entrega aos consumidores.

Abaixo está uma demonstração de como fazer isso usando Golang, similar a outras linguagens de programação.

Definir TTL da Fila

Defina o tempo de expiração da mensagem através das propriedades da fila (x-message-ttl).

	// Propriedades da fila
	props := make(map[string]interface{})
	// Tempo de expiração da mensagem é de 60 segundos
	props["x-message-ttl"] = 60000

	q, err := ch.QueueDeclare(
		"tizi365.ttl.hello", // Nome da fila
		true,   // Se persistir a fila
		false,
		false,
		false,
		props, // Definir propriedades da fila
	)

Definir TTL da Mensagem

Defina o tempo de expiração da mensagem através das propriedades da mensagem

err = ch.Publish(
		"tizi365",     // Nome da troca
		"", // Chave de roteamento
		false,
		false,
		amqp.Publishing{
			Expiration: "30000", // Tempo de expiração é de 30 segundos
			ContentType: "text/plain",
			Body:        []byte(body),
		})