Как я могу направить мероприятие с конкретного транспорта на конкретный автобус?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как я могу направить мероприятие с конкретного транспорта на конкретный автобус?

Сообщение Anonymous »

В моем проекте Symfony у меня есть такая конфигурация в Messenger.yaml:

Код: Выделить всё

framework:
messenger:
transports:
async: '%env(MESSENGER_TRANSPORT_DSN)%'
failed: 'doctrine://default?table_name=failed_messages'
sql_channel_manager_dlq:
dsn: '%env(SQS_CHANNEL_MANAGER_TRANSPORT_DLQ_DSN)%'
options:
access_key: '%env(AWS_ACCESS_KEY_ID)%'
secret_key: '%env(AWS_SECRET_ACCESS_KEY)%'
region: '%env(AWS_REGION)%'
queue_name: '%env(CHANNEL_MANAGER_QUEUE_NAME_DLQ)%'
sqs_channel_manager:
failure_transport: sql_channel_manager_dlq
dsn: '%env(SQS_CHANNEL_MANAGER_TRANSPORT_DSN)%'
serializer: App\Infrastructure\Messenger\ChannelManagerSerializer
options:
access_key: '%env(AWS_ACCESS_KEY_ID)%'
secret_key: '%env(AWS_SECRET_ACCESS_KEY)%'
region: '%env(AWS_REGION)%'
queue_name: '%env(CHANNEL_MANAGER_QUEUE_NAME)%'
failure_transport: failed
default_bus: command.bus
buses:
event.bus: ~
command.bus:
middleware:
- 'App\Infrastructure\Middleware\RequestIdMiddleware'
routing:
App\Message\TestQueue: async
App\Domain\Event\ChannelManager\ChannelManagerEventHasReceived: sqs_channel_manager
И мой сериализатор следующий:

Код: Выделить всё

declare(strict_types=1);

namespace App\Infrastructure\Messenger;

use App\Domain\Event\ChannelManager\ChannelManagerEventHasReceived;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
use Symfony\Component\Messenger\Stamp\TransportMessageIdStamp;
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;

class ChannelManagerSerializer implements SerializerInterface
{
public function decode(array $encodedEnvelope): Envelope
{
$data = json_decode($encodedEnvelope['body'], true);

if (json_last_error() !== JSON_ERROR_NONE) {
throw new \InvalidArgumentException(
'Invalid JSON received from SQS: ' . json_last_error_msg()
);
}

$envelope = new Envelope(new ChannelManagerEventHasReceived($data));

if (!empty($encodedEnvelope['headers']['stamps'])) {
$stamps = unserialize(base64_decode($encodedEnvelope['headers']['stamps']));
foreach ($stamps as $stamp) {
$envelope = $envelope->with($stamp);
}
}

return $envelope;
}

public function encode(Envelope $envelope): array
{
$event = $envelope->getMessage();

$stampsToSerialize = [];

foreach ($envelope->all() as $stampArray) {
foreach ($stampArray as $stamp) {
if ($stamp instanceof RedeliveryStamp || $stamp instanceof TransportMessageIdStamp) {
$stampsToSerialize[] = $stamp;
}
}
}

return [
'body' => json_encode($event->channelManagerData, JSON_THROW_ON_ERROR),
'headers' => [
'stamps' => base64_encode(serialize($stampsToSerialize)),
],
];
}
}
Я хочу направить ChannelManagerEventHasReceived на шину event.bus. Как мне этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ecific-bus
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»