Aws sns 不适用于 Laravel 排队通知

问题描述

我有一个 Laravel 6.0 项目,使用 ses 驱动程序发送电子邮件

为了跟踪退回邮件、投诉等,我使用了 sns。

所有配置都已到位。如果发送邮件,则 Amazon 正确生成 sns 消息并由 Laravel 接收。这是因为在 config/service.PHP 中有 ConfigurationSetName 值。

问题开始于通过电子邮件发送的排队通知

仅对于此类生成的电子邮件,sns 工作流程甚至不会启动。根本没有通知。确定 ConfigurationSetName 已设置,我仔细检查了配置的语法,但看起来不是,或者 Laravel 忽略了它。

我再说一遍,对于简单的电子邮件,一切正常。只有当电子邮件是从排队的通知生成时,我才会遇到这个问题。

非常感谢任何帮助,我真的不知道问题出在哪里。

解决方法

最后我发现了问题,即使我不了解情况。

重点是我如何实现 ShouldQueue 契约。

我在通知类本身上设置了 ShouldQueue,而不是在可邮寄类上。所以 Laravel 会触发一个排队的通知。一旦队列工作人员提出了详细说明,通知就会生成一个 Mailable。这不起作用,根本没有 SNS 通知。

现在我在 Mailable 类上移动了 ShouldQueue 实现,这解决了问题。

所以,现在 Laravel 会触发生成排队的 Mailable 的通知。当队列工作人员收到详细说明时,发送电子邮件,现在 SNS 正常工作。

代码中没有其他变化,只是将 ShouldQueue 的实现从 Notification 移到 Mailable 即可。

我想知道为什么......但现在它起作用了,对我来说实施似乎很好。