vadiktok / rabbitmq-elastica-bundle
此包的最新版本(3.0)没有可用的许可证信息。
3.0
2020-02-28 10:53 UTC
Requires
- php: ^7.1
- friendsofsymfony/elastica-bundle: ^5.0
- php-amqplib/rabbitmq-bundle: ^1.11
README
你可能知道,Elastica的填充命令非常慢且不稳定。
此捆绑包提供了一种简单的功能,使用RabbitMQ捆绑包通过Elastica索引填充。
灵感来源于Enqueue Elastica Bundle。
安装
$ composer require vadiktok/rabbitmq-elastica-bundle
- 然后,在项目的app/AppKernel.php文件中添加以下行以启用捆绑包
<?php
// app/AppKernel.php
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new Vadiktok\RabbitMQElasticaBundle\VadiktokRabbitMQElasticaBundle(),
);
// ...
}
}
- 在您的app/config.yml文件中定义RabbitMQ生产者和消费者
old_sound_rabbit_mq:
producers:
vadiktok_elastica:
connection: default
exchange_options: { name: elastica, type: direct }
queue_options: { name: elastica }
consumers:
vadiktok_elastica:
connection: default
exchange_options: { name: elastica, type: direct }
queue_options: { name: elastica }
callback: vadiktok.rabbitmq.elastica.consumer
用法
- 使用--pager-persister选项设置为"rabbitmq"运行elastica populate命令
$ php bin/console fos:elastica:populate --pager-persister=rabbitmq
您可能还想使用--max-per-page选项。默认情况下,它设置为100,在我的情况下,20k运行得非常好。
此命令简单地创建具有页数、结果数量和索引名称/类型的MQ消息。消费者负责从Elasticsearch服务器检索结果并推送它们。
一页等于队列中的一条消息。所以如果您有100万条记录,并将--max-per-page设置为10k,则将发布100条消息。
- 使用以下方法消费您的消息
$ php bin/console rabbitmq:consume vadiktok_elastica -vvv
您运行的消费者越多,您的索引填充速度就越快。根据我的经验,合理的消费者数量为5到10。
我还建议使用SupervisorD。
配置
默认情况下,捆绑包将查看
vadiktok_rabbit_mq_elastica:
producers:
your_producer_id: ~
或者更多。想象一下,您想将索引分割到不同的队列中。您只需像在安装部分描述的那样定义您的消费者/生产者,然后告诉捆绑包使用哪个生产者即可
vadiktok_rabbit_mq_elastica:
producers:
your_producer_id_1: [index_name_1, index_name_2]
your_producer_id_2: [index_name_3, index_name_4]
现在想象一下,您需要首先获取新数据,而不是等待从第一条记录开始索引数据。您只需添加"order"参数即可
vadiktok_rabbit_mq_elastica:
order: DESC