У меня есть очередь fifo, и я использую org.springframework.cloud.aws.messaging
, и вот что я хотел бы сделать:
- Потребляйте сообщение
- Попробуй справиться с этим (внутренняя логика)
- Если дескрипторы не работают - записать в сообщение новый атрибут (без повторной отправки сообщения в очередь)
Я не хочу отправлять сообщения в новую очередь (мне нужно сохранить порядок сообщений). также я не хочу использовать очередь недоставленных сообщений для обработки ошибок (по той же причине, что и выше).
причина, по которой я хочу использовать атрибуты сообщения, связана с тем, что мне нужно реализовать внутренний механизм повторных попыток, что означает: при использовании сообщения я проверю last_try_timestamp, и если оно прошло мою проверку, я попытаюсь обработать его , иначе я выкину ошибку. (Я знаю, что сообщение будет продолжать использоваться до MaxRetention
, и меня это устраивает)
Возможно ли что-то подобное?
@SqsListener(value = "#{'${my.queue.fifo}'}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void deadLetterQueueListener(@Headers Map<String, String> headers, String message) throws Exception {
log.info("consuming message");
if(!this.handleMessage(message)){
//Set message attributes (timestamp)
throw new Exception("Failed to handle message");
}
}