1

我已经集成了 symfony messenger 包,我正在尝试对该消息进行编码。它在 Symfony 3.4.4 版本中工作。但是它在 Symfony 3.4.28 版本中给出了上述错误。我在 symfony serialzer 组件中进行了跟踪,似乎 jsonEncoder 没有在 serialzer.php 中列出,这导致了这个问题。

在 symfony 序列化程序组件中排除 json 编码器的原因是什么。见下文 DoctrineTransportSender:

public function send(Envelope $envelope)
{
    $encodedMessage = $this->encoder->encode($envelope);
}

//messenger configuration:
messenger:
  transports:
    # DSN: doctrine://$repository_alias/$queue_name
    # most likely we do not need more repositories (unless there's a need for splitting MySQL table with messages)
    main: "doctrine://default/test"

  routing:
    # message type to transport routes
    Bundle\QueueBundle\Message\TestMessage: [ main ]

  serializer:
    enabled: true
4

2 回答 2

0

Symfony Messenger 默认切换到 PHP 的原生序列化/反序列化。使用 php 序列化可以防止出现问题,例如意外地忽略序列化的属性。它还将确保组件可以在没有 Symfony Serializer 的情况下使用,这在 Symfony 3.4 中不是问题,但在 Symfony 4 和 Flex 中,或者在 Symfony 之外使用信使时,您必须手动安装此依赖项,从而导致错误。

您仍然可以使用 Symfony Serializer,但必须对其进行配置。考虑到您使用的是 Symfony 3.4,您可能必须通过向 TransportFactory 提供适当的 Serializer-instance 来手动执行此操作,请参阅:

https://github.com/symfony/symfony/blob/4.4/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php#L1751-L1757

在 Symfony 4 中,您可以改用配置,请参阅:

https://symfony.com/doc/current/messenger.html#serializing-messages

于 2019-09-07T20:17:19.857 回答
0

感谢您的回复。我通过添加自定义序列化程序而不是调用信使序列化程序(包括编码和解码)解决了上述问题,并且工作正常

于 2019-10-02T16:49:39.967 回答