laravel队列工作者中的持久连接

时间:2017-12-12 13:08:11

标签: php laravel laravel-5

我正在尝试使用第三方库在我的laravel应用程序上设置服务以连接到提供程序。

其代码如下

$connection = new CustomConnection();
$connection->refresh();
$connection->sendMessage('user@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->refresh();
$connection->sendMessage('user2@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->close();

我的目标是在通过laravel队列工作人员发送消息时保持连接连接。

像que worker建立

之类的东西
$connection = new CustomConnection();
$connection->refresh();

每5秒执行一次$connection->refresh()&每当在队列中添加作业时,它应该执行

$connection->sendMessage('user@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->refresh();

代码块。

我不知道laravel的核心队列在后端是如何工作的,以及我是否可以覆盖它的功能以及如何。

感谢。

1 个答案:

答案 0 :(得分:0)

在您的服务提供商中,将连接(或使用该连接的服务)注册为 singleton 。将此声明为作业的依赖项,并且所有作业将在队列工作程序的生命周期内具有相同的连接/服务实例。

你无法每五秒钟执行$ connection-> refresh()。如果此呼叫的目的是某种心跳/健康检查,请听取queue-related events并使用这些。 JobProcessing,JobProcessed,JobFailed和Looping的组合将允许您在作业执行之前和之后执行代码。您可以使用它们来评估是否应该调用$ connection-> refresh(),就像上次调用后至少已经过了五秒钟一样。

在调度作业时,没有任何事件可用于运行代码。

不要尝试覆盖队列系统的内部工作方式。不同的Laravel版本之间没有向后兼容的承诺,你必须跟踪上游引入的所有(可能的)细微变化。