arr*_*l12 5 php elasticsearch laravel laravel-4
我目前正在使用laravel-elasticsearch提供程序进行ES查询.我在我的laravel队列(使用beanstalkd)处理的作业中使用它.我遇到的问题是,在长时间运行的作业中,最终我无法再将数据插入到elasticsearch中.工作刚刚挂起(没有异常被抛出)我已经缩小到我正在进行ES调用的代码.我的连接是否可能变得陈旧,如何重新连接?我的另一个想法是它与使用Facade有关,它是一个单身人士.
这是我正在做的,这不是我的确切代码.但是当代码没有在长时间运行的作业中运行时,代码工作正常.我只想提供一些context.it插入就好了,代码运行没有问题,直到它在长时间运行的进程后运行.
更新:
我已经将问题缩小到持久连接的elasticsearch-php库.我的ES背后有一个负载平衡器,它在5分钟后超时TCP连接.问题是ES php库中没有活着.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
Run Code Online (Sandbox Code Playgroud)
聚集在一起,让我们谈谈持久的队列流程.
Laravel与工人一起排队工作.那些没有租金的精灵从我们的队列服务中取出工作并及时处理它们.
然而,经过长时间的不间断工作,我们的精灵开始厌倦并随意制造错误.错误类型包括无法使用发送邮件SwiftMailer
,处理数据库事务或连接到SSL端口.
我们的精灵需要的是能量饮料queue:restart
,每20分钟一次.
实施步骤:
1)如果你在linux上,输入console sudo crontab -e
2)使用vim,输入以下行 0,20,40 * * * * cd /path/to/my/laravel/installation && php artisan queue:restart --env=yourenvironment 1>> /dev/null 2>&1
/path/to/my/laravel/installation
用你的laravel的路径替换.
并yourenvironment
与laravel的环境名称.
资料来源:我有一个弹性搜索安装,正常运行时间为一个月,并使用shift31的软件包实时进行laravel轮询和更新数据.
文档:http://laravel.com/docs/5.0/queues#daemon-queue-worker
我最终解决这个问题的方法是在创建 ES 客户端时添加以下设置。
'guzzleOptions' => array(
'curl.options' => [
CURLOPT_FORBID_REUSE => true
]
),
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助别人。