如何从Laravel向Symfony创建的RabbitMQ队列发布原始JSON消息
问题原因
Laravel 默认的队列任务调度机制是为自身消费场景设计的,会自动封装任务类信息、重试配置、序列化后的任务参数等元数据,用于后续Laravel队列进程解析执行任务,这就是你收到的消息携带额外字段的原因。
解决方案
你不需要通过自定义Job类的方式发布消息,直接调用队列连接的pushRaw方法发布原始内容即可,代码示例如下:
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Queue; class TestController extends Controller { public function sendMessage() { // 构造你需要发送的原始数据 $rawData = [ 'type' => 'logger', 'content' => 'Some json message' ]; // 直接向rabbitmq连接的test-queue队列发布原始JSON Queue::connection('rabbitmq')->pushRaw( json_encode($rawData), 'test-queue' ); } }
补充:如果需要自定义消息的RabbitMQ专属属性(如持久化标识、消息过期时间、路由键等),可向
pushRaw方法传入第三个参数配置对应属性即可。
验证效果
通过该方法发布的消息不会携带任何Laravel队列默认元数据,队列中存储的就是你传入的原始JSON字符串,可直接被Symfony应用正常消费。
内容的提问来源于stack exchange,提问作者Nguyen Nhut Tien
相关产品推荐
相关产品推荐

