如何将文件从php上载到amqp

如何将文件从php上载到amqp,php,rabbitmq,amqp,Php,Rabbitmq,Amqp,我想知道。。。如何从php向rabbitmq队列发送文件。 我列举了许多例子,其中大多数都不起作用。 下面是一个消费品生产商的例子,这是接近工作。 下面是publisher.php的示例 <?php require_once('../php-amqplib/amqp.inc'); include('../config.php'); $conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST); $channe

我想知道。。。如何从php向rabbitmq队列发送文件。 我列举了许多例子,其中大多数都不起作用。 下面是一个消费品生产商的例子,这是接近工作。 下面是publisher.php的示例

<?php
  require_once('../php-amqplib/amqp.inc');
    include('../config.php');
    $conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);
    $channel = $conn->channel();
    $channel->exchange_declare('upload-pictures','direct', false, true, false);
    $metadata = json_encode(array(
    'image_id' => $argv[1],
    'user_id' => $argv[2],
    'image_path' => $argv[3]
    ));
    $msg = new AMQPMessage($metadata, array('content_type' => 'text/plain','delivery_mode'    => 2));
    $channel->basic_publish($msg, 'upload-pictures');
    $channel->close();
    $conn->close();
    ?>

consumer.php

<?php
require_once('../php-amqplib/amqp.inc');
include('../config.php');
$conn = new AMQPConnection(HOST, PORT, USER, PASS,VHOST);
$channel = $conn->channel();
$queue = 'add-points';
$consumer_tag = 'consumer';
$channel->exchange_declare('upload-pictures','direct', false, true, false);
$channel->queue_declare('add-points',false, true, false, false);
$channel->queue_bind('add-points', 'upload-pictures');
$consumer = function($msg){};
$channel->basic_consume($queue,$consumer_tag,false,false,false,false,$consumer);
?>

根据rabbitmq手册中提供的示例,我需要在一个终端中首先运行consumer(php consumer.php),在另一个终端中运行publisher(php publisher.php 1 2 file/path.png),
我将在消费终端中收到“向用户添加点数:2”消息。我根本没有收到这个信息。你能告诉我哪里出了问题吗重要提示:

AMQP协议并不是针对大型内容传输的(但它可以做这样的工作,我尝试了高达128Mb的测试)我建议您发送消息中文件的路径,并在worker中处理,而不是发送整个文件,同时存储大消息时会非常快地消耗内存,当它超过磁盘时,将使用磁盘,这与RAM相比非常慢


无论如何,如果仍要发送文件:


您必须将文件内容作为常规邮件正文发送。如果它是一个二进制文件,那么就用base64或任何你想要的东西对它进行编码。没有其他方法可以做你想做的事。在您的代码中,我没有看到您正在阅读文件。

您可以提供一个指向您遵循的手册的链接吗?我添加了一个等待函数和一个回调函数。它现在可以工作:):)…我要上载的文件非常小,最大大小为25mb。是的,我只是发送一个文件路径。消费者将拥有读取文件的代码。