3

知りたい...どのように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();
    ?>

消費者.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 マニュアルで提供されている例によると、最初に 1 つの端末でコンシューマー (php consumer.php) を実行し、別の端末でパブリッシャー (php publisher.php 1 2 file/path.png) を実行する必要があります。ユーザーへのポイントの追加: 消費者端末の 2" メッセージ。このメッセージをまったく受け取っていません。どこが間違っているのか教えてもらえますか

4

1 に答える 1

5

重要なお知らせ:

AMQP プロトコルは、大量のコンテンツの転送を目的としていません (ただし、そのような仕事はできます。テストのために 128Mb まで試しました)。ファイル全体を送信するのではなく、メッセージでファイルへのパスを送信してワーカーで処理することをお勧めしますが、大きなメッセージを保存するとメモリが非常に速く消費され、それを超えるとディスクが使用され、RAM と比較してかなり遅くなります。


とにかく、それでもファイルを送信したい場合:

ファイルの内容を通常のメッセージ本文として送信する必要があります。バイナリ ファイルの場合は、base64 または任意の形式でエンコードします。あなたが望むことをする他の方法はありません。あなたのコードでは、ファイルを読んでいることがわかりませんでした。

于 2013-07-01T14:40:43.007 に答える