Có hai cách để thiết lập thời gian hết hạn tin nhắn (TTL) cho RabbitMQ:

  1. Thiết lập thông qua các thuộc tính hàng đợi, nơi tất cả các tin nhắn trong hàng đợi có cùng thời gian hết hạn.
  2. Đặt thời gian hết hạn cho từng tin nhắn một cách riêng lẻ, cho phép TTL khác nhau cho mỗi tin nhắn. Nếu cả hai phương pháp được sử dụng cùng nhau, TTL của tin nhắn sẽ là giá trị nhỏ hơn giữa hai giá trị TTL.

Mẹo: Đối với phương pháp đầu tiên của việc thiết lập các thuộc tính hàng đợi, khi tin nhắn hết hạn, nó sẽ được loại bỏ khỏi hàng đợi. Trong phương pháp thứ hai, ngay cả khi tin nhắn hết hạn, nó cũng sẽ không bị xóa ngay lập tức khỏi hàng đợi vì hết hạn của mỗi tin nhắn được kiểm tra trước khi giao cho người tiêu dùng.

Dưới đây là một minh họa về cách thiết lập này bằng Golang, tương tự như các ngôn ngữ lập trình khác.

Thiết lập TTL cho Hàng đợi

Thiết lập thời gian hết hạn của tin nhắn thông qua các thuộc tính hàng đợi (x-message-ttl).

	// Thuộc tính hàng đợi
	props := make(map[string]interface{})
	// Thời gian hết hạn của tin nhắn là 60 giây
	props["x-message-ttl"] = 60000

	q, err := ch.QueueDeclare(
		"tizi365.ttl.hello", // Tên hàng đợi
		true,   // Có lưu trữ hàng đợi hay không
		false,
		false,
		false,
		props, // Thiết lập các thuộc tính hàng đợi
	)

Thiết lập TTL cho Tin nhắn

Thiết lập thời gian hết hạn của tin nhắn thông qua các thuộc tính tin nhắn

err = ch.Publish(
		"tizi365",     // Tên trao đổi
		"", // Khóa định tuyến
		false,
		false,
		amqp.Publishing{
			Expiration: "30000", // Thời gian hết hạn là 30 giây
			ContentType: "text/plain",
			Body:        []byte(body),
		})