2013-07-01 16 views
3

알고 싶습니다 ... 어떻게하면 php에서 rabbitmq 큐로 파일을 보낼 수 있습니까? 나는 많은 예제를 통해 대부분의 작업을하지 않았다. 아래의 은 일하는 소비자 생산자의 예입니다. 다음 는 상기 rabbitmq 매뉴얼에 제공된 예에있어서, i가 하나 개의 단말에 제 소비자 (PHP의 consumer.php)를 실행해야php에서 amqp로 파일을 업로드하는 방법

<?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); 
?> 

publisher.php 와 퍼블리셔 (php publisher.php 1 2 file/path.png)를 다른 터미널에 추가하면 소비자 터미널에 "Adding points to user : 2"메시지가 표시됩니다. 나는이 메시지를 전혀 듣지 못한다. 잘못가는 곳 스피 당신이 제안 할 수

+0

당신이 따라야 할 매뉴얼에 대한 링크를 제공 할 수 있습니까? – pinepain

답변

5

중요주의 사항 :

AMQP 프로토콜이 큰 컨텐츠 전송을 목적으로하지 않습니다 (하지만이 같은 일을 할 수있는, 내가 테스트를 위해 128MB까지 시도). 큰 메시지를 저장하는 동안 매우 빠르게 메시지를 저장하고 디스크를 초과 할 때 매우 느리고 RAM과 비교하여 메시지를 파일로 경로를 보내고 전체 파일을 보내는 대신 작업자에게 처리하도록 제안합니다. 여전히 파일을 보내려면


어쨌든, :

을 당신은 정기적으로 메시지 본문과 같은 파일 내용을 보낼 수 있습니다. 바이너리 파일 인 경우 base64 또는 원하는대로 인코딩하십시오. 당신이 원하는 것을 할 수있는 다른 방법은 없습니다. 귀하의 코드에서 나는 당신이 파일을 읽는 것을 보지 못했습니다.

+0

저는 콜백 함수와 함께 대기 함수를 추가했습니다. 이제 작업하고 있습니다 :) :) .... 업로드하려는 파일의 크기는 25MB 이하입니다. 그리고 네, 단지 파일 경로를 보냅니다. 소비자는 파일을 읽을 코드를 갖게됩니다. – user2462648

관련 문제