Как получить доступ к шине транспорта из пользовательского промежуточного программного обеспечения для компонента Messenger?

При определении пользовательских промежуточных программ для Symfony Messenger иногда бывает полезно получить доступ к транспорту для работы с сообщением и очередью.

Например, добавление сообщения в очередь с другими параметрами или удаление сообщения только в случае успешной обработки и т. Д.

Пробовал набирать подсказки TransportInterface:

class CustomMiddleware implements MiddlewareInterface {

    /**
     * @var \Symfony\Component\Messenger\Transport\TransportInterface
     */
    private $transport;

    public function __construct( TransportInterface $transport ) {
        $this->transport = $transport;
    }

    public function handle( Envelope $envelope, StackInterface $stack ): Envelope {
        // TODO: Implement handle() method.
        return $envelope;
    }

}

Но Symfony жалуется, что не может автоматически подключить сервис:

Не удается автоматически подключить службу "App\Messenger\CustomMiddleware": аргумент "$transport" метода "__construct()" ссылается на интерфейс "Symfony\Component\Messenger\Transport\TransportInterface", но такой службы не существует. Возможно, вам следует связать этот интерфейс с одной из этих существующих служб: "App\Messenger\SqsTransport", "messenger.transport.customsqs".

SqsTransport относится к пользовательскому транспорту, созданному для этого приложения. messenger.transport.customsqs относится к тому месту, где определено его фабрика:

framework:
  messenger:
    transports:
      customsqs: '%env(MESSENGER_TRANSPORT_DSN)%'

Здесь я немного озадачен, я думаю, что это не совсем необычный вариант использования, и должно быть более или менее прямое решение, которое я так или иначе упускаю.

поскольку SqsTransport построен по обычаю TransportFactory который интерпретирует DSN, не может на самом деле псевдоним против него.

Пытался определить CustomMiddleware сервис явно сослаться на @messenger.transport.customsqs, но получил точно такие же результаты:

services:
  App\Messenger\CustomMiddleware:
    arguments: ['@messenger.transport.customsqs']

0 ответов

Другие вопросы по тегам