Мы используем SES для отправки электронных писем и следуем совету использовать поток очереди SNS Topi c -> SQS для захвата таких событий, как Bounce
, Delivery
и т. Д .:
Я сейчас изучаю реализацию стороны "Процессора", где мы будем запрашивать очередь SQS для новых сообщений, анализировать соответствующие биты и действовать соответственно ( например обновить что-нибудь в базе данных).
Я пишу это в Kotlin, используя Java SDK, предоставленных AWS. До сих пор мне удавалось развернуть внешний бит SNS JSON, используя что-то вроде следующего:
class SnsEmailNotificationHandler : DefaultSnsMessageHandler() {
override fun handle(message: SnsNotification?) {
val messageStr = message?.message
println(messageStr)
}
}
...
val messages = sqs.receiveMessage(queueUrl).messages
val snsMessageHandler = SnsEmailNotificationHandler()
messages.forEach {
SnsMessageManager().handleMessage(it.body.byteInputStream(), snsMessageHandler)
}
Выполнение этого в очереди примеров с некоторыми уведомлениями SES, строкой, которая печатается в консоль - это развернутое уведомление SES, которое следует за spe c здесь . Я доволен этим до сих пор, потому что я смог использовать встроенные в Amazon SDK вещи вместо того, чтобы дублировать их структуру сообщений, чтобы проанализировать JSON.
Однако теперь я Я застрял. Глядя на пример кода здесь , кажется, что теперь я должен создать свои собственные классы для представления структур сообщений AWS для отказов, жалоб, доставок и так далее. Я могу на go вперед и сделать это с некоторыми легковесными классами данных и чем-то вроде Джексона, но я не хочу этого, если не буду абсолютно обязан, потому что:
- Это стандартный код, который я бы скорее не поддерживать
- Хрупко, если amazon когда-нибудь изменит свой API
Вместо этого, я надеюсь, существуют некоторые готовые объекты данных где-то в Amazon SDK, такие как SnsNotification
Я использовал ранее. Кто знает, может быть, даже метод AmazonEmailEvent.parse(...)
, который вернул бы мне класс, который я могу проверить в экземпляре, чтобы выяснить, является ли это отскоком или доставкой и go оттуда.
У меня нет нашел их быстро, хотя, так что я начинаю верить, что они не существуют ... что было бы действительно плохо. Кто-нибудь нашел хороший способ сделать это?