Как получить доступ к шине транспорта из пользовательского промежуточного программного обеспечения для компонента 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']