В1. Будут ли оба приложения по отдельности получать по 100 сообщений каждое или сообщение, предоставленное одному потребителю, никогда не будет доставлено другому потребителю?
Ни один из них не является достаточно точным.
Стандартные очереди никогда не доставляют сообщение преднамеренно более одного раза. возможно , что сообщения могут иногда доставляться более одного раза - но это исключение и является артефактом того факта, что SQS является распределенной системой, и могут возникнуть ситуации, когда, например, в очереди было сообщение, хранящееся в нескольких репликах, и тот факт, что сообщение не было известно всем репликам из-за внутренней ошибки.
Если сообщение непреднамеренно доставлено более одного раза, оно может быть отправлено нескольким потребителям или одному и тому же потребителю. «Соединения» потребителя с SQS фактически не сохраняют состояния, они сбрасываются при каждой доставке списка сообщений, поэтому SQS не имеет представления, какому потребителю оно доставило каждое сообщение.
Потребители удаляют свои сообщения после обработки, в противном случае истекает их тайм-аут visibilitt, и они доставляются снова и снова - любому потребителю, которому удача розыгрыша доставляет их каждый раз. Как уже отмечалось, в SQS нет понятия идентичности или состояния потребителя. (В приложениях большого объема один потребитель может на самом деле иметь несколько подключений к SQS, причем все получающие сообщения параллельны, потому что обходы и циклы приема / удаления в сети в противном случае ограничат одного потребителя несколькими сотнями сообщений в секунду. эти соединения обрабатываются с использованием асинхронного ввода-вывода, потоков и т. д., не имеет значения для SQS, которому все равно, какой потребитель находится в данном соединении.)
Если вы хотите, чтобы все сообщения отправлялись всем потребителям, вам нужно разветвиться от SNS к SQS.
Q2: Тайм-аут видимости применим как к стандартной очереди, так и к очереди FIFO?
Да. Поскольку (отмеченное выше) соединение с SQS не является постоянным соединением с отслеживанием состояния, SQS использует тайм-аут видимости в качестве индикатора того, что потребитель потерял сообщение или ошибочно отказал, поэтому сообщение необходимо снова сделать доступным. (Очереди мертвых писем не позволяют этому происходить бесконечно, перемещая сообщение в другую очередь, поскольку повторяющиеся сбои указывают на проблему с потребителем или сообщение «ядовитая таблетка».)
Очереди FIFO сохраняют доставку по порядку, и вы можете утверждать, что они возвращаются к "хотя бы разу" доставке, но идея заключается в том, что это никогда не должно происходить. Если это так, значит, у вас слишком короткий тайм-аут видимости, или ваш потребитель вылетает или неправильно помещает сообщения.
Q3: Что такое несколько групп сообщений в очереди FIFO?
Группы сообщений позволяют очередям FIFO поддерживать упорядоченную параллельную обработку сообщений групп, чей порядок относительно друг друга через границы групп не имеет значения. Сообщения доставляются по порядку, внутри каждой группы.
Если очередь FIFO, если все сообщения отправляются с одинаковым идентификатором группы, то одновременно может работать только один потребитель.
Доставка по заказу (простая иллюстрация) означает, что сообщение 2 не будет доставлено ни одному потребителю, пока сообщение 1 не будет получено и удалено - завершено - потребителем. В заказ доставка входит вся обработка (не только начальная «доставка»). Или, если 20 сообщений в очереди имеют одинаковый идентификатор группы и два потребителя запрашивают по 10 сообщений каждое, один потребитель получает 10, а другой ничего не получает - пока - потому что эти вторые 10 сообщений должны быть изолированы, пока первые 10 не будут обработано (иначе мы больше не "в порядке").
В сценарии с 20 сообщениями, если бы 14 были в группе A и 6 были в группе B, один потребитель получил бы A1-A10, A11-A14 был бы изолирован до тех пор, пока A1-A10 не был завершен, но пока первый потребитель занят у другого потребителя может быть B1-B6 одновременно.
Еще раз отметим, что нет привязанности к потребителю. Если A1-A10 и B1-B6 были удалены в одно и то же время, A11-A14 затем будет доставлен одному потребителю, но не обязательно тому, который обрабатывал A1-A10.