1

我正在使用 Symfony 4.2 并且有一条消息要通过 messenger 组件发送,这是一条应该通过几个渠道(例如 SMS 和电子邮件)发送的通知。我想知道如何使这些发件人独立(例如第一个通道失败并抛出异常) - 如何尝试通过第二个发件人独立发送?目前,当链中的一个发送者失败时,其余的无法尝试传递通知。

在发送者级别捕获异常似乎不是一个好的解决方案,因为返回信封会导致它将被标记为发送不正确的内容。

我已经开始为每个频道制作消息以保持 sentStamp 约定,但似乎应该是一条消息和几个频道监听一条消息(甚至配置用senders关键字指示):

routing:
        'App\Messenger\Command\Notification\SendSomeInformation':
            senders:
                - App\Messenger\Sender\Notification\EmailSender
                - App\Messenger\Sender\Notification\SmsSender

对于这样的问题有一些好的方法吗?

4

1 回答 1

1

一种可能性是配置两个不同的传输,并将每个处理程序分配给不同的传输,因此如果其中一个失败并使消息出队,另一个仍然有机会运行。

# config/packages/messenger.yaml
transports:
    async1:
        # dsn
    async2:
        # dsn
...
routing:
    'App\Messenger\Command\Notification\SendSomeInformation': [async1, async2]

将处理程序限制为传输可以在 code 或 config中完成,选择更适合您的。

在配置中:

# config/services.yaml
App\Messenger\Sender\Notification\SmsSender:
    tags: 
        - { name: 'messenger.message_handler', from_transport: 'async1'}
于 2020-10-23T03:23:12.993 回答