RabbitMQ에서 메시지 만료 시간(TTL)을 설정하는 두 가지 방법이 있습니다:

  1. 대기열 속성을 통해 설정하면 대기열의 모든 메시지의 만료 시간이 동일합니다.
  2. 각 메시지마다 개별적으로 만료 시간을 설정하여 각 메시지마다 다른 TTL을 허용합니다. 두 가지 방법을 함께 사용하는 경우 메시지의 TTL은 두 값 중 더 작은 값이 됩니다.

팁: 대기열 속성을 통한 첫 번째 방법으로 메시지가 만료되면 대기열에서 제거됩니다. 두 번째 방법에서는 각 메시지의 만료가 소비자에게 전달되기 전에 확인되기 때문에 메시지가 만료되더라도 즉시 대기열에서 삭제되지 않습니다.

아래는 Golang을 사용하여 이를 설정하는 방법을 보여주는 것입니다. 다른 프로그래밍 언어와 유사합니다.

대기열 TTL 설정

대기열 속성(x-message-ttl)을 통해 메시지 만료 시간을 설정합니다.

	// Queue properties
	props := make(map[string]interface{})
	// 메시지 만료 시간은 60초
	props["x-message-ttl"] = 60000

	q, err := ch.QueueDeclare(
		"tizi365.ttl.hello", // Queue 이름
		true,   // 대기열을 지속할 지 여부
		false,
		false,
		false,
		props, // 대기열 속성 설정
	)

메시지 TTL 설정

메시지 속성을 통해 메시지 만료 시간을 설정합니다

err = ch.Publish(
		"tizi365",     // Exchange 이름
		"", // 라우팅 키
		false,
		false,
		amqp.Publishing{
			Expiration: "30000", // 만료 시간은 30초
			ContentType: "text/plain",
			Body:        []byte(body),
		})