我想知道……我怎么能从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),在另一个终端中运行发布者(php publisher.php 1 2 file / path.png),
我将在消费者终端中获得“向用户添加点数:2”消息.我根本没有得到这个消息.你能告诉我哪里出错吗?
解决方法:
重要的提醒:
AMQP协议不是针对大型内容传输(但它可以做这样的工作,我尝试了高达128Mb的测试).我建议你发送消息中的文件路径并在工作中处理它而不是发送整个文件,同时存储大消息吃内存非常快,当它超过磁盘时将使用,这与RAM相比相当慢.
无论如何,如果你还想发送文件:
您必须将文件内容作为常规邮件正文发送.如果它是二进制文件,则使用base64或任何您想要的编码.没有其他方法可以做你想要的.在你的代码中,我没有看到你正在阅读文件.
标签:php,rabbitmq,amqp 来源: https://codeday.me/bug/20190831/1778163.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。