Symfony/messenger语言 - AMQP - 如何设置content_type:application/json



>我正在使用Symfony的Messenger组件来发送AMQP消息。 但是我不知道如何修改消息的属性"content_type"。默认情况下设置为"文本/纯文本",但我想要"应用程序/json"。

我尝试创建一个信封和一个中间件,但我无法修改 AMQP 消息的"content_type"属性。

是否可以使用Symfony的Messenger组件来做到这一点?

谢谢

吉尔海姆

收到的响应将取决于服务设置为返回的内容类型。也许请求中的参数会向服务指示应返回文本/纯响应。这将取决于该选项是否得到实施。

我已经实现了使用Symfony Messenger(5.1(,JMS Serializer和RabbitMQ代理通过AMQP 0.9.1发送JSON消息。

由于我没有使用默认的Symfony序列化程序,所以我实现了自己的SerializerInterface。在public function encode(Envelope $envelope): array方法中,我将application/json内容类型设置为标题,并且工作正常。

class MessengerSerializer
implements SerializerInterface
{
private JmsSerializerInterface $serializer;

public function encode(Envelope $envelope): array
{
$message = $envelope->getMessage();
return [
'headers' => [
'Content-Type' => 'application/json'
],
'body' => $this->serializer->serialize($message, 'json')
];
}
}

如果未正确设置此标头,则邮件以text/plain的形式发送。

我们可以使用图章进行更改:

$bus->dispatch(
new SmsNotification('Look! I created a message!'),
[
new SerializerStamp(['json_encode_options' => JSON_UNESCAPED_UNICODE]),
new AmqpStamp(null, AMQP_NOPARAM, [
'content_type' => 'application/json',
'content_encoding' => 'UTF-8',
]),
],
);

最新更新