gpt4 book ai didi

Symfony2,RabbitMQ : I'm lost

转载 作者:行者123 更新时间:2023-12-01 07:18:21 27 4
gpt4 key购买 nike

我已经安装了 RabbitMQ Bundle。现在这是我想要做的:

Controller :创建Redis-List,将消息推送到客户端,然后将消息发送到队列中,因此可以异步执行较重的后台任务。

但我迷路了。

$msg = array('userid' => $someid);
$this->get('old_sound_rabbit_mq.task_example_producer')->publish(serialize($msg));

这会向产品发送一些数据吗?并且相应的消费者将执行繁重的后台任务(DB 查询等,基于来自生产者的“用户 ID”)?我需要回电吗?什么排队?!队列将生产者的消息一一转发给消费者?那么我可以有多个消费者同时处理更多消息吗?!

最佳答案

有点旧的帖子,但万一其他人来寻求帮助:

您似乎正在使用 old_sound 的 rabbitmq 包。它在这里有一些有用的教程类型的文档:https://github.com/videlalvaro/RabbitMqBundle

它帮助我开始在 symfony 中使用 rabbitmq。

简而言之:

1:您需要在 config.yml 文件中进行一些配置。例如:

# RabbitMQ Configuration
old_sound_rabbit_mq:
connections:
default:
host: 'localhost'
port: 5672
user: 'guest'
password: 'guest'
vhost: '/'
lazy: true
connection_timeout: 3
read_write_timeout: 3

# requires php-amqplib v2.4.1+ and PHP5.4+
keepalive: false

# requires php-amqplib v2.4.1+
heartbeat: 0

producers:
task_example:
connection: default
exchange_options: {name: 'task_example', type: direct}
consumers:
task_example:
connection: default
exchange_options: {name: 'task_example', type: direct}
queue_options: {name: 'task_example'}
callback: test_class

这里定义了连接,一个生产者和一个消费者。两者都使用相同的“默认”连接。
您还需要将回调定义为服务:
# My services
services:
test_class:
class: AppBundle\Testclasses\rabbittest\testclass
arguments: [@logger]

2:现在你需要有消费者,这是这里的回调选项,“test_class”。简单的消费者可能看起来像这样:
namespace AppBundle\Testclasses\rabbittest;

use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
use PhpAmqpLib\Message\AMQPMessage;

class testclass implements ConsumerInterface
{
private $logger; // Monolog-logger.

// Init:
public function __construct( $logger )
{
$this->logger = $logger;
echo "testclass is listening...";
}

public function execute(AMQPMessage $msg)
{
$message = unserialize($msg->body);
$userid = $message['userid'];
// Do something with the data. Save to db, write a log, whatever.
}
}

3:现在你已经拥有的制作人:
$msg = array('userid' => $someid);
$this->get('old_sound_rabbit_mq.task_example_producer')->publish(serialize($msg));

4:最后一块拼图是运行消费者。消费者是从控制台启动的,我是在windows机器上开发的,用的是windows PowerShell。您可以像这样启动消费者:
php app/console rabbitmq:consumer task_example

它应该给你文本:

testclass is listening...



,如果你从这个例子中复制了它。该文本不是必需的,没有它,控制台将不会输出任何内容,但可以正常工作。除非出现一些错误。

但请记住,您必须在 symfony-application 所在的目录中。例如:

C:\wamp\www\symfony\my_project

关于Symfony2,RabbitMQ : I'm lost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30507384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com