【发布时间】:2021-06-18 10:30:35
【问题描述】:
我正在使用 Symfony 5 和 Messenger 通过 Rabbitmq 主题队列使用来自外部应用程序的 JSON 消息。
消费者在序列化步骤中出错。它还没有进入我的处理程序,所以我将在这里专注于序列化程序。
这是使用它找到的第一条消息时的错误:
编码的信封没有“类型”标头。
我尝试将type 属性添加到值为application/json 的消息头,然后是json,但我得到了类似的错误:
无法对“json”类型的对象进行非规范化,找不到支持的规范化器。
理想情况下,我不需要在外部系统上添加标头,但如有必要,我可以。
如何配置 Symfony 或消息本身以克服 json 序列化错误?
这是我的设置:
消息示例:["ABC", 1]
messenger.yaml:
framework:
messenger:
transports:
async:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
serializer: messenger.transport.symfony_serializer
retry_strategy:
delay: 500
options:
exchange:
name: tln_pot
type: topic
flags: 0
default_publish_routing_key: tln_pot
queues:
tln_pot:
binding_keys: [tln_pot]
bin/console config:dump 框架信使
...
serializer:
# Service id to use as the default serializer for the transports.
default_serializer: messenger.transport.native_php_serializer
symfony_serializer:
# Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).
format: json
# Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).
context:
# Prototype
name: ~
【问题讨论】:
-
我认为
application/json类型不正确,应该是数组?也许尝试在没有附加消费者的情况下先将数据发送到队列并检查消息。如果您根本不想附加类型标头,您可能需要编写一个类似于AmqpReceiver.php 的自定义接收器