php - ElasticSearch 查询卡在 laravel 作业队列中

标签 php laravel laravel-4 elasticsearch

我目前正在使用 laravel-elasticsearch我的 ES 查询的提供者。我在我的 laravel 队列(使用 beanstalkd)处理的作业中使用它。我遇到的问题是,在长时间运行的作业中,最终我无法再将数据插入到 elasticsearch 中。工作只是挂起(没有抛出异常)我已经将它缩小到我进行 ES 调用的代码。我的连接是否有可能变得陈旧而不重新连接?我的另一个想法是它与使用 Facade 和它是一个单例有关。

这是我正在做的,这不是我的确切代码。但是当它没有在长时间运行的作业中运行时,代码工作得很好。我只是想提供一些上下文。它插入得很好,在长时间运行的过程之后运行之前,代码运行没有问题。

更新:

我已将问题缩小到 elasticsearch-php 库保持连接。我的 ES 位于负载均衡器后面,该负载均衡器在 5 分钟后使 TCP 连接超时。问题是 ES php 库中没有 keep alive。 5 分钟后连接关闭,但它不会关闭我这边的连接。有没有办法为 elasticsearch-php 设置一个 keep alive?或重置连接的调用?

//run some functions....
$params = array();
$params['body']  = array('somefield' => 'some data');
$params['index'] = 'my_index';
$params['type']  = 'my_type';
$params['id']    = 'my_id';
$ret = Es::update($params);//this is working just fine

//long running function here
$newparams = array();
$newparams['body']  = array('somefield' => 'some data');
$newparams['index'] = 'my_index';
$newparams['type']  = 'my_type';
$newparams['id']    = 'my_id';
$return = Es::update($newparams);//this will just hang

最佳答案

聚在一起,让我们来谈谈持久队列进程。

Laravel 队列与 worker 一起工作。那些不租用的 Sprite 从我们的队列服务中获取作业并及时处理它们。

然而,经过长时间不间断的工作,我们的小 Sprite 们开始感到疲倦并随机产生错误。错误类型包括失败to send mail using SwiftMailer , 处理数据库事务或 connect to SSL ports .

我们的 Sprite 需要的是能量饮料,以 queue:restart 的形式,每 20 分钟一次。

实现步骤:

1) 如果您使用的是 linux,请在控制台中输入 sudo crontab -e

2) 使用 vim,输入以下行 0,20,40 * * * * cd/path/to/my/laravel/installation && php artisan queue:restart --env=yourenvironment 1>>/开发/空 2>&1

/path/to/my/laravel/installation 替换为你的 laravel 路径。

yourenvironment 是你的 laravel 环境名称。

资料来源:我安装了一个运行时间为一个月的 elasticsearch,并使用 shift31 的包实时轮询和更新数据。

文档:http://laravel.com/docs/5.0/queues#daemon-queue-worker

关于php - ElasticSearch 查询卡在 laravel 作业队列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812084/

相关文章:

javascript - 区分图像错误和形式错误

PHP - 在 MVC View 层(Laravel Blade)中使用数据库

php - ltrim 从字符串 php 中剥离超出应有的内容

php - Woocommerce 自定义用户输入字段

php - 将事件类添加到 Wordpress 中当前选定的 anchor

Mysql根据季度计算增长

php - 拉维尔 : For each where clause

php - 如何同时运行这两个查询?

php - Laravel 5.6 创建多个关系

authentication - LinkedIn + 电子邮件的 Oauth 流程有什么问题?